From 7fadd04ff712b48b79e8adac118c5608518be3b6 Mon Sep 17 00:00:00 2001 From: Philipp Thun Date: Sat, 23 May 2026 00:20:40 +0200 Subject: [PATCH 1/2] Add ADR 0015: switch to factory_bot; supersede ADR 0002 ADR 0002 (2019) chose to keep machinist after a partial factory_bot migration hit friction with Sequel's mutual-foreign-key pattern. The blocker described there is solvable in factory_bot using a global to_create with save+refresh and after(:create) callbacks with transient flags. machinist 1.0.6 has had no upstream activity since 2013, and 2.0 is not a viable upgrade (no Sequel adapter, no Sham, non-persisting make). Mark ADR 0002 as superseded and add ADR 0015 documenting the new decision and the patterns that made it work. --- .../0002-using-machinist-for-factories.md | 2 +- .../0015-using-factory-bot-for-factories.md | 107 ++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 decisions/0015-using-factory-bot-for-factories.md diff --git a/decisions/0002-using-machinist-for-factories.md b/decisions/0002-using-machinist-for-factories.md index 41937169036..e557da7a0a3 100644 --- a/decisions/0002-using-machinist-for-factories.md +++ b/decisions/0002-using-machinist-for-factories.md @@ -6,7 +6,7 @@ Date: 2019-03-22 Status ------ -Accepted +Superseded by [ADR 0015](0015-using-factory-bot-for-factories.md) Context diff --git a/decisions/0015-using-factory-bot-for-factories.md b/decisions/0015-using-factory-bot-for-factories.md new file mode 100644 index 00000000000..1a122432ca5 --- /dev/null +++ b/decisions/0015-using-factory-bot-for-factories.md @@ -0,0 +1,107 @@ +# 15: Using FactoryBot for Factories + +Date: 2026-05-23 + +## Status + +Accepted (supersedes [ADR 0002](0002-using-machinist-for-factories.md)) + +## Context + +[ADR 0002](0002-using-machinist-for-factories.md) (2019) decided to keep +[machinist][machinist] after a partial migration to [factory_bot][factory_bot] +hit friction with Sequel's mutual-foreign-key associations. Seven years later, +the situation has shifted: + +* `machinist` 1.0.6 has had no upstream activity since 2013. The "maintained + fork" mentioned in 0002 never materialised in a way that this project + consumed. +* `machinist` 2.0 exists but is not a viable upgrade. It removed the Sequel + adapter we depend on, dropped `Sham`, and flipped `make` from a persisting + call to a non-persisting one — every existing call site would change + meaning. +* `factory_bot` is actively maintained and well-known to anyone joining a + Ruby project. +* The blocker described in 0002 — Sequel's mutual-foreign-key pattern, where + two records reference each other — turns out to be solvable cleanly in + `factory_bot` once a global `to_create` and `after(:create)` callbacks + with transient flags are used. None of these primitives required a special + Sequel adapter. + +## Decision + +Replace `machinist` with `factory_bot` as the test-data framework. The +`machinist` gem and its supporting files (`spec/support/fakes/blueprints.rb`, +`spec/support/machinist_monkey_patch.rb`) are removed; ~11k call sites of +`Klass.make(...)` and `Klass.make_unsaved(...)` are converted to +`create(:klass, ...)` and `build(:klass, ...)`; and ~130 blueprints become +factory definitions under `spec/support/factory_definitions/`. + +The conversion is done as one change. There is no extended period in which +both libraries coexist in the codebase. + +### Key technical decisions + +The patterns below are what made the 2019 friction tractable. + +* **Global `to_create { |i| i.save; i.refresh }`** in + `spec/support/factories.rb`. This matches machinist's Sequel adapter, + which both saved and refreshed. Without the refresh, tests that mutate + associations after creation see Sequel's stale in-memory association + cache rather than the current DB state. + +* **`Sham` is preserved as a thin shim** (`spec/support/sham_shim.rb`) that + delegates `Sham.` to `FactoryBot.generate(:sham_)` sequences + defined in `spec/support/factories.rb`. The shim mirrors the original + `Sham.define` block 1:1, so existing call sites need no edits. + +* **Dynamic class → factory-name conversion** via + `klass.name.demodulize.underscore.to_sym` is used in matchers and + shared examples, so generic helpers continue to look up the right + factory when given any model class. + +* **Named blueprints become traits** — `Foo.blueprint(:bar)` turns into a + `trait :bar` on the `:foo` factory. Call sites move from + `Foo.make(:bar, x: 1)` to `create(:foo, :bar, x: 1)`. + +* **`build` replaces `make_unsaved`** for the (rare) cases that wanted an + unsaved instance. + +* **`:droplet_model` only auto-sets itself as the app's current droplet + when no `app:` override is supplied** (`set_as_current_droplet { app == :unset }`), + matching machinist's blueprint where the default `app` block only ran in + that case. Specs that previously relied on the auto-set side effect when + passing `app:` explicitly call `app.update(droplet:)`, just as the + pre-migration versions did. + +* **`:revision_sidecar_process_type_model` builds its parent with the + `:no_process_types` trait** so `FactoryBot.lint` does not collide with + the parent's `after_create` web row on the + `(revision_sidecar_guid, type)` unique constraint. + +## Consequences + +* New contributors no longer need to learn `machinist` first; `factory_bot` + is the de-facto Ruby standard. +* The `machinist 1.0.6` dependency and its dependabot churn are gone. +* `factory_bot` is actively maintained, so most future test-framework + upgrades happen via `bundle update` rather than via a custom monkey + patch (as `machinist_monkey_patch.rb` had to do). +* Tooling that reasoned about `machinist` blueprints (e.g. spec generators, + custom rubocop cops) needs to be updated; none of it lived in this + repository. + +## Alternatives Considered + +* **Stay on `machinist 1.0.6`.** Rejected: unmaintained upstream, dependabot + noise, and the risk that some future Ruby/Sequel upgrade silently breaks + the gem. +* **Upgrade to `machinist 2.0`.** Rejected: no Sequel adapter, no `Sham`, + and `make` no longer persists — the upgrade is effectively a rewrite of + every call site for less benefit than moving to `factory_bot`. +* **Adopt a maintained fork of `machinist`.** No fork with meaningful + activity exists, and adopting one trades one unmaintained dependency for + another small one. + +[machinist]: https://github.com/notahat/machinist +[factory_bot]: https://github.com/thoughtbot/factory_bot From f39017084bc530b90dee585da7ffbfade84b22a1 Mon Sep 17 00:00:00 2001 From: Philipp Thun Date: Fri, 22 May 2026 23:54:19 +0200 Subject: [PATCH 2/2] Replace machinist with FactoryBot for test data setup Per ADR 0015. machinist 1.0.6 has had no upstream activity since 2013 and machinist 2.0 is not a viable upgrade (no Sequel adapter, no Sham, non-persisting make). FactoryBot is actively maintained, has trivial Sequel integration, and provides equivalents for every pattern used by the existing blueprints. Convert ~11k call sites from Model.make / Model.make_unsaved to create(:foo) / build(:foo), replace ~130 blueprints with factory definitions under spec/support/factory_definitions/, and remove the machinist gem along with spec/support/fakes/blueprints.rb and spec/support/machinist_monkey_patch.rb. Key technical decisions (see ADR 0015): - Global to_create { |i| i.save; i.refresh } in spec/support/factories.rb. This matches machinist's Sequel adapter which both saved and refreshed; the refresh prevents stale-cache bugs whenever a factory's after-create hook mutates associations. - Sham is preserved as a thin shim (spec/support/sham_shim.rb) that delegates Sham. to FactoryBot.generate(:sham_) sequences defined in spec/support/factories.rb. The shim mirrors the original Sham.define block 1:1 so existing call sites need no edits. - Dynamic class -> factory-name conversion via klass.name.demodulize.underscore.to_sym is used in matchers and shared examples, so generic helpers continue to look up the right factory when given any model class. - Named blueprints become traits: Foo.blueprint(:bar) turns into a trait :bar on the :foo factory; Foo.make(:bar, x: 1) becomes create(:foo, :bar, x: 1). - build replaces make_unsaved for the (rare) cases that wanted an unsaved instance. - :droplet_model only auto-sets itself as the app's current droplet when no app: override is supplied (set_as_current_droplet { app == :unset }), matching machinist's blueprint where the default app block only ran in that case. Specs that previously relied on the auto-set side effect when passing app: explicitly call app.update(droplet:) just as the pre-migration versions did. - :revision_sidecar_process_type_model builds its parent with the :no_process_types trait so FactoryBot.lint does not collide with the parent's after-create web row on the (revision_sidecar_guid, type) unique constraint. --- Gemfile | 2 +- Gemfile.lock | 5 +- lib/cloud_controller/console.rb | 5 +- spec/acceptance/async_bindings_spec.rb | 48 +- .../broker_api_v2.13_spec.rb | 32 +- .../broker_api_v2.14_spec.rb | 4 +- .../broker_api_v2.15_spec.rb | 26 +- .../broker_api_v2.7_spec.rb | 4 +- .../broker_api_v2.8_spec.rb | 2 +- .../broker_api_v2.9_spec.rb | 2 +- .../broker_api_versions_spec.rb | 12 +- .../managed_service_instance_spec.rb | 12 +- spec/api/documentation/app_bits_api_spec.rb | 2 +- .../documentation/app_usage_event_api_spec.rb | 6 +- spec/api/documentation/apps_api_spec.rb | 20 +- .../documentation/apps_restage_api_spec.rb | 4 +- spec/api/documentation/buildpacks_api_spec.rb | 2 +- spec/api/documentation/domains_api_spec.rb | 8 +- spec/api/documentation/events_api_spec.rb | 84 +- .../documentation/organizations_api_spec.rb | 46 +- .../documentation/private_domains_api_spec.rb | 8 +- .../quota_definitions_api_spec.rb | 2 +- spec/api/documentation/routes_api_spec.rb | 16 +- ...ecurity_group_running_defaults_api_spec.rb | 4 +- ...ecurity_group_staging_defaults_api_spec.rb | 4 +- .../documentation/security_groups_api_spec.rb | 6 +- .../service_bindings_api_spec.rb | 8 +- .../documentation/service_brokers_api_spec.rb | 4 +- .../service_instances_api_spec.rb | 42 +- .../documentation/service_keys_api_spec.rb | 4 +- .../service_plan_visibilities_api_spec.rb | 12 +- .../documentation/service_plans_api_spec.rb | 4 +- .../service_usage_events_api_spec.rb | 6 +- spec/api/documentation/services_api_spec.rb | 6 +- .../documentation/shared_domain_api_spec.rb | 6 +- .../space_quota_definitions_api_spec.rb | 8 +- spec/api/documentation/spaces_api_spec.rb | 44 +- spec/api/documentation/summary_api_spec.rb | 36 +- ...ser_provided_service_instances_api_spec.rb | 14 +- spec/api/documentation/users_api_spec.rb | 34 +- spec/api/internal/log_access_api_spec.rb | 4 +- spec/db_spec_helper.rb | 6 +- spec/factories_lint_spec.rb | 23 + .../parallel_route_creation_spec.rb | 4 +- spec/isolated_specs/processes_sync_spec.rb | 38 +- spec/logcache/client_spec.rb | 10 +- .../logcache/container_metric_batcher_spec.rb | 2 +- ...40_backfill_status_for_deployments_spec.rb | 2 +- ...nd_timestamps_to_roles_join_tables_spec.rb | 4 +- ...and_timestamps_for_spaces_auditors_spec.rb | 8 +- ...and_timestamps_for_spaces_managers_spec.rb | 8 +- ...d_timestamps_for_spaces_developers_spec.rb | 8 +- ...estamps_for_organizations_auditors_spec.rb | 8 +- ...for_organizations_billing_managers_spec.rb | 8 +- ...estamps_for_organizations_managers_spec.rb | 8 +- ...timestamps_for_organizations_users_spec.rb | 8 +- ...nce_operations_service_instance_id_spec.rb | 30 +- ...ecurity_groups_spaces_unique_index_spec.rb | 8 +- ...135214_route_bindings_unique_index_spec.rb | 10 +- ...ided_metadata_to_service_instances_spec.rb | 2 +- ...ique_constraint_to_security_groups_spec.rb | 2 +- .../service_credential_binding_view_spec.rb | 40 +- .../packages_controller_index_spec.rb | 20 +- spec/request/admin_actions_spec.rb | 4 +- .../app_visibility_spec.rb | 4 +- spec/request/app_features_spec.rb | 17 +- spec/request/app_manifests_spec.rb | 65 +- spec/request/app_usage_events_spec.rb | 22 +- spec/request/apps_spec.rb | 566 ++++++------ spec/request/buildpacks_spec.rb | 80 +- spec/request/builds_spec.rb | 139 ++- spec/request/deployments_spec.rb | 209 ++--- spec/request/domains_spec.rb | 127 ++- spec/request/droplets_spec.rb | 481 +++++----- .../environment_variable_groups_spec.rb | 8 +- spec/request/errors_spec.rb | 2 +- spec/request/events_spec.rb | 93 +- spec/request/feature_flags_spec.rb | 10 +- spec/request/info_spec.rb | 8 +- .../internal/asg_update_timestamp_spec.rb | 2 +- spec/request/internal/log_access_spec.rb | 6 +- spec/request/internal/metrics_spec.rb | 6 +- spec/request/isolation_segments_spec.rb | 80 +- spec/request/jobs_spec.rb | 37 +- ...erify_old_lrps_can_download_assets_spec.rb | 6 +- spec/request/organization_quotas_spec.rb | 49 +- spec/request/organizations_spec.rb | 158 ++-- spec/request/packages_spec.rb | 175 ++-- spec/request/processes_spec.rb | 372 ++++---- spec/request/rate_limit_spec.rb | 4 +- spec/request/resource_matches_spec.rb | 4 +- spec/request/revisions_spec.rb | 61 +- spec/request/roles_spec.rb | 102 +- spec/request/route_destinations_spec.rb | 257 +++--- spec/request/routes_spec.rb | 240 ++--- spec/request/security_groups_spec.rb | 46 +- spec/request/service_brokers_spec.rb | 80 +- .../service_credential_bindings_spec.rb | 223 +++-- spec/request/service_instances_spec.rb | 469 +++++----- spec/request/service_offerings_spec.rb | 278 +++--- spec/request/service_plan_visibility_spec.rb | 106 +-- spec/request/service_plans_spec.rb | 257 +++--- spec/request/service_route_bindings_spec.rb | 177 ++-- spec/request/service_usage_events_spec.rb | 34 +- spec/request/sidecars_spec.rb | 113 ++- spec/request/space_features_spec.rb | 4 +- spec/request/space_manifests_spec.rb | 50 +- spec/request/space_quotas_spec.rb | 76 +- spec/request/spaces_spec.rb | 146 +-- spec/request/stacks_spec.rb | 59 +- spec/request/stacks_state_spec.rb | 21 +- spec/request/tasks_spec.rb | 311 +++---- spec/request/users_spec.rb | 38 +- spec/request/v2/apps_spec.rb | 203 ++-- spec/request/v2/auth_spec.rb | 16 +- spec/request/v2/organizations_spec.rb | 22 +- spec/request/v2/private_domains_spec.rb | 12 +- spec/request/v2/route_mappings_spec.rb | 22 +- spec/request/v2/routes_spec.rb | 26 +- spec/request/v2/service_bindings_spec.rb | 40 +- spec/request/v2/service_brokers_spec.rb | 4 +- spec/request/v2/service_instances_spec.rb | 54 +- spec/request/v2/service_keys_spec.rb | 22 +- spec/request/v2/service_plans_spec.rb | 13 +- spec/request/v2/services_spec.rb | 16 +- spec/request/v2/shared_domains_spec.rb | 12 +- .../v2/space_quota_definitions_spec.rb | 12 +- spec/request/v2/spaces_spec.rb | 52 +- .../v2/staging_security_groups_spec.rb | 57 +- .../vcap_request_context_setter_spec.rb | 8 +- spec/request_spec_shared_examples.rb | 64 +- spec/spec_helper_helper.rb | 11 +- spec/support/broker_api_helper.rb | 4 +- spec/support/controller_helpers.rb | 8 +- spec/support/factories.rb | 80 ++ .../app_annotation_model.rb | 5 + spec/support/factory_definitions/app_event.rb | 10 + .../factory_definitions/app_label_model.rb | 5 + spec/support/factory_definitions/app_model.rb | 45 + .../factory_definitions/app_usage_event.rb | 16 + .../build_annotation_model.rb | 5 + .../factory_definitions/build_label_model.rb | 5 + .../factory_definitions/build_model.rb | 40 + spec/support/factory_definitions/buildpack.rb | 15 + .../buildpack_annotation_model.rb | 5 + .../buildpack_label_model.rb | 5 + .../buildpack_lifecycle_buildpack_model.rb | 17 + .../buildpack_lifecycle_data_model.rb | 15 + .../cnb_lifecycle_data_model.rb | 14 + .../factory_definitions/custom_buildpack.rb | 7 + .../deployment_annotation_model.rb | 5 + .../deployment_label_model.rb | 5 + .../factory_definitions/deployment_model.rb | 15 + .../deployment_model_test_factory.rb | 49 + .../deployment_process_model.rb | 7 + spec/support/factory_definitions/domain.rb | 5 + .../domain_annotation_model.rb | 5 + .../factory_definitions/domain_label_model.rb | 5 + .../droplet_annotation_model.rb | 5 + .../droplet_label_model.rb | 5 + .../factory_definitions/droplet_model.rb | 77 ++ .../environment_variable_group.rb | 11 + spec/support/factory_definitions/event.rb | 15 + .../factory_definitions/feature_flag.rb | 7 + .../isolation_segment_annotation_model.rb | 5 + .../isolation_segment_label_model.rb | 5 + .../isolation_segment_model.rb | 6 + .../factory_definitions/job_warning_model.rb | 7 + .../managed_service_instance.rb | 31 + .../factory_definitions/organization.rb | 7 + .../organization_annotation_model.rb | 5 + .../organization_auditor.rb | 7 + .../organization_billing_manager.rb | 7 + .../organization_label_model.rb | 5 + .../organization_manager.rb | 7 + .../factory_definitions/organization_user.rb | 7 + .../factory_definitions/orphaned_blob.rb | 4 + .../package_annotation_model.rb | 5 + .../package_label_model.rb | 5 + .../factory_definitions/package_model.rb | 23 + .../factory_definitions/pollable_job_model.rb | 9 + .../factory_definitions/private_domain.rb | 6 + .../process_annotation_model.rb | 5 + .../process_label_model.rb | 5 + .../factory_definitions/process_model.rb | 30 + .../factory_definitions/quota_definition.rb | 10 + .../revision_annotation_model.rb | 5 + .../revision_label_model.rb | 5 + .../factory_definitions/revision_model.rb | 53 ++ .../revision_process_command_model.rb | 7 + .../revision_sidecar_model.rb | 22 + .../revision_sidecar_process_type_model.rb | 6 + spec/support/factory_definitions/route.rb | 17 + .../route_annotation_model.rb | 5 + .../factory_definitions/route_binding.rb | 11 + .../route_binding_label_model.rb | 5 + .../route_binding_operation.rb | 8 + .../factory_definitions/route_label_model.rb | 5 + .../route_mapping_model.rb | 13 + .../factory_definitions/security_group.rb | 16 + spec/support/factory_definitions/service.rb | 25 + .../factory_definitions/service_binding.rb | 11 + .../service_binding_annotation_model.rb | 5 + .../service_binding_label_model.rb | 5 + .../service_binding_operation.rb | 8 + .../factory_definitions/service_broker.rb | 13 + .../service_broker_annotation_model.rb | 5 + .../service_broker_label_model.rb | 5 + .../service_broker_update_request.rb | 8 + .../service_dashboard_client.rb | 6 + .../factory_definitions/service_instance.rb | 7 + .../service_instance_annotation_model.rb | 5 + .../service_instance_label_model.rb | 5 + .../service_instance_operation.rb | 8 + .../factory_definitions/service_key.rb | 11 + .../service_key_annotation_model.rb | 5 + .../service_key_label_model.rb | 5 + .../service_key_operation.rb | 8 + .../service_offering_annotation_model.rb | 5 + .../service_offering_label_model.rb | 5 + .../factory_definitions/service_plan.rb | 22 + .../service_plan_annotation_model.rb | 5 + .../service_plan_label_model.rb | 5 + .../service_plan_visibility.rb | 6 + .../service_usage_event.rb | 15 + .../factory_definitions/shared_domain.rb | 9 + .../factory_definitions/sidecar_model.rb | 8 + .../sidecar_process_type_model.rb | 7 + spec/support/factory_definitions/space.rb | 6 + .../space_annotation_model.rb | 5 + .../factory_definitions/space_auditor.rb | 7 + .../factory_definitions/space_developer.rb | 7 + .../factory_definitions/space_label_model.rb | 5 + .../factory_definitions/space_manager.rb | 7 + .../space_quota_definition.rb | 11 + .../factory_definitions/space_supporter.rb | 7 + spec/support/factory_definitions/stack.rb | 6 + .../stack_annotation_model.rb | 5 + .../factory_definitions/stack_label_model.rb | 5 + .../task_annotation_model.rb | 5 + .../factory_definitions/task_label_model.rb | 5 + .../support/factory_definitions/task_model.rb | 49 + .../support/factory_definitions/test_model.rb | 5 + .../test_model_many_to_many.rb | 4 + .../test_model_many_to_one.rb | 4 + .../factory_definitions/test_model_redact.rb | 4 + .../test_model_second_level.rb | 4 + spec/support/factory_definitions/user.rb | 5 + .../user_annotation_model.rb | 5 + .../factory_definitions/user_label_model.rb | 5 + .../user_provided_service_instance.rb | 13 + spec/support/fakes/blueprints.rb | 868 ------------------ .../fakes/deployment_model_test_factory.rb | 11 +- spec/support/fakes/process_model_factory.rb | 38 +- spec/support/lifecycle_tests_helpers.rb | 2 +- spec/support/machinist_monkey_patch.rb | 10 - spec/support/matchers/have_associated.rb | 4 +- spec/support/matchers/model_extensions.rb | 6 +- spec/support/matchers/sequel_validations.rb | 6 +- spec/support/model_creation.rb | 19 +- spec/support/sham_shim.rb | 37 + .../controllers/permissions.rb | 24 +- .../jobs/create_binding_job.rb | 8 +- .../jobs/delete_binding_job.rb | 8 +- .../models/domain_validation.rb | 28 +- .../models/encrypted_attribute.rb | 2 +- .../shared_examples/models/operations.rb | 2 +- .../request/bindings_create.rb | 2 +- .../v3_service_binding_create.rb | 20 +- .../v3_service_binding_delete.rb | 12 +- spec/support/user_header_helpers.rb | 16 +- spec/support/user_helpers.rb | 16 +- spec/unit/access/app_event_access_spec.rb | 12 +- .../access/app_usage_event_access_spec.rb | 4 +- spec/unit/access/buildpack_access_spec.rb | 4 +- spec/unit/access/domain_access_spec.rb | 22 +- .../environment_variable_group_access_spec.rb | 4 +- spec/unit/access/event_access_spec.rb | 16 +- spec/unit/access/feature_flag_access_spec.rb | 4 +- .../managed_service_instance_access_spec.rb | 20 +- spec/unit/access/organization_access_spec.rb | 12 +- .../unit/access/private_domain_access_spec.rb | 14 +- spec/unit/access/process_model_access_spec.rb | 16 +- .../access/quota_definition_access_spec.rb | 4 +- spec/unit/access/route_access_spec.rb | 16 +- spec/unit/access/route_mapping_access_spec.rb | 12 +- .../unit/access/security_group_access_spec.rb | 6 +- spec/unit/access/service_access_spec.rb | 8 +- .../access/service_binding_access_spec.rb | 14 +- .../unit/access/service_broker_access_spec.rb | 20 +- .../access/service_instance_access_spec.rb | 26 +- spec/unit/access/service_key_access_spec.rb | 12 +- spec/unit/access/service_plan_access_spec.rb | 6 +- .../service_plan_visibility_access_spec.rb | 10 +- .../access/service_usage_event_access_spec.rb | 4 +- spec/unit/access/shared_domain_access_spec.rb | 2 +- spec/unit/access/space_access_spec.rb | 6 +- .../space_quota_definition_access_spec.rb | 14 +- spec/unit/access/stack_access_spec.rb | 4 +- spec/unit/access/user_access_spec.rb | 4 +- spec/unit/actions/annotation_delete_spec.rb | 6 +- spec/unit/actions/annotations_update_spec.rb | 22 +- spec/unit/actions/app_apply_manifest_spec.rb | 122 +-- spec/unit/actions/app_assign_droplet_spec.rb | 15 +- spec/unit/actions/app_create_spec.rb | 10 +- spec/unit/actions/app_delete_spec.rb | 48 +- spec/unit/actions/app_feature_update_spec.rb | 2 +- .../app_find_or_create_skeleton_spec.rb | 4 +- .../app_patch_environment_variables_spec.rb | 2 +- spec/unit/actions/app_restart_spec.rb | 18 +- spec/unit/actions/app_start_spec.rb | 85 +- spec/unit/actions/app_stop_spec.rb | 2 +- spec/unit/actions/app_update_spec.rb | 26 +- spec/unit/actions/build_create_spec.rb | 50 +- spec/unit/actions/build_delete_spec.rb | 24 +- spec/unit/actions/build_update_spec.rb | 2 +- spec/unit/actions/buildpack_create_spec.rb | 2 +- spec/unit/actions/buildpack_delete_spec.rb | 8 +- spec/unit/actions/buildpack_update_spec.rb | 12 +- spec/unit/actions/buildpack_upload_spec.rb | 2 +- spec/unit/actions/deployment_cancel_spec.rb | 25 +- spec/unit/actions/deployment_continue_spec.rb | 57 +- spec/unit/actions/deployment_create_spec.rb | 217 +++-- spec/unit/actions/deployment_delete_spec.rb | 18 +- spec/unit/actions/deployment_update_spec.rb | 24 +- spec/unit/actions/domain_create_spec.rb | 12 +- .../actions/domain_delete_shared_org_spec.rb | 22 +- spec/unit/actions/domain_delete_spec.rb | 20 +- .../actions/domain_update_shared_orgs_spec.rb | 8 +- spec/unit/actions/domain_update_spec.rb | 2 +- spec/unit/actions/droplet_copy_spec.rb | 34 +- spec/unit/actions/droplet_create_spec.rb | 62 +- spec/unit/actions/droplet_delete_spec.rb | 15 +- spec/unit/actions/droplet_update_spec.rb | 30 +- spec/unit/actions/droplet_upload_spec.rb | 2 +- spec/unit/actions/feature_flag_update_spec.rb | 4 +- .../actions/internal_package_update_spec.rb | 17 +- .../actions/isolation_segment_assign_spec.rb | 8 +- .../actions/isolation_segment_delete_spec.rb | 8 +- .../isolation_segment_unassign_spec.rb | 12 +- .../actions/isolation_segment_update_spec.rb | 12 +- spec/unit/actions/label_delete_spec.rb | 6 +- spec/unit/actions/labels_update_spec.rb | 34 +- .../actions/manifest_route_update_spec.rb | 128 ++- spec/unit/actions/organization_create_spec.rb | 2 +- spec/unit/actions/organization_delete_spec.rb | 62 +- .../actions/organization_quota_apply_spec.rb | 16 +- .../actions/organization_quota_delete_spec.rb | 4 +- .../organization_quotas_create_spec.rb | 4 +- .../organization_quotas_update_spec.rb | 24 +- spec/unit/actions/organization_update_spec.rb | 8 +- spec/unit/actions/package_copy_spec.rb | 8 +- spec/unit/actions/package_create_spec.rb | 2 +- spec/unit/actions/package_delete_spec.rb | 8 +- spec/unit/actions/package_update_spec.rb | 8 +- spec/unit/actions/package_upload_spec.rb | 6 +- .../process_create_from_app_droplet_spec.rb | 16 +- spec/unit/actions/process_create_spec.rb | 32 +- spec/unit/actions/process_delete_spec.rb | 14 +- spec/unit/actions/process_restart_spec.rb | 17 +- spec/unit/actions/process_scale_spec.rb | 4 +- spec/unit/actions/process_terminate_spec.rb | 2 +- spec/unit/actions/process_update_spec.rb | 96 +- spec/unit/actions/revision_create_spec.rb | 37 +- spec/unit/actions/revision_delete_spec.rb | 26 +- spec/unit/actions/revision_resolver_spec.rb | 73 +- spec/unit/actions/revisions_update_spec.rb | 2 +- spec/unit/actions/role_create_spec.rb | 4 +- spec/unit/actions/role_delete_spec.rb | 18 +- spec/unit/actions/route_create_spec.rb | 56 +- spec/unit/actions/route_delete_spec.rb | 34 +- .../actions/route_destination_update_spec.rb | 6 +- .../unit/actions/route_mapping_delete_spec.rb | 18 +- spec/unit/actions/route_share_spec.rb | 6 +- .../unit/actions/route_transfer_owner_spec.rb | 10 +- spec/unit/actions/route_unshare_spec.rb | 8 +- spec/unit/actions/route_update_spec.rb | 8 +- .../unit/actions/routing/route_delete_spec.rb | 14 +- .../unit/actions/security_group_apply_spec.rb | 12 +- .../actions/security_group_create_spec.rb | 6 +- .../actions/security_group_delete_spec.rb | 4 +- .../actions/security_group_unapply_spec.rb | 8 +- .../actions/security_group_update_spec.rb | 13 +- ...vice_credential_binding_app_create_spec.rb | 42 +- .../service_credential_binding_delete_spec.rb | 14 +- ...vice_credential_binding_key_create_spec.rb | 30 +- ...vice_instance_create_user_provided_spec.rb | 4 +- .../actions/service_instance_purge_spec.rb | 26 +- .../actions/service_instance_share_spec.rb | 64 +- .../actions/service_instance_unshare_spec.rb | 30 +- ...vice_instance_update_user_provided_spec.rb | 37 +- .../actions/service_offering_delete_spec.rb | 4 +- spec/unit/actions/service_plan_delete_spec.rb | 4 +- .../service_route_binding_create_spec.rb | 48 +- .../service_route_binding_delete_spec.rb | 26 +- .../services/locks/deleter_lock_spec.rb | 36 +- .../services/locks/updater_lock_spec.rb | 14 +- .../service_instance_create_managed_spec.rb | 6 +- .../services/service_instance_delete_spec.rb | 70 +- .../services/service_instance_read_spec.rb | 16 +- .../service_instance_update_managed_spec.rb | 24 +- .../services/service_key_create_spec.rb | 4 +- .../services/service_key_delete_spec.rb | 10 +- .../set_default_isolation_segment_spec.rb | 6 +- spec/unit/actions/sidecar_create_spec.rb | 8 +- spec/unit/actions/sidecar_delete_spec.rb | 10 +- ...decar_synchronize_from_app_droplet_spec.rb | 24 +- spec/unit/actions/sidecar_update_spec.rb | 40 +- spec/unit/actions/space_create_spec.rb | 2 +- spec/unit/actions/space_delete_spec.rb | 62 +- .../space_delete_unmapped_routes_spec.rb | 50 +- spec/unit/actions/space_diff_manifest_spec.rb | 26 +- spec/unit/actions/space_quota_apply_spec.rb | 18 +- spec/unit/actions/space_quota_delete_spec.rb | 6 +- spec/unit/actions/space_quota_unapply_spec.rb | 8 +- spec/unit/actions/space_quota_update_spec.rb | 31 +- spec/unit/actions/space_quotas_create_spec.rb | 8 +- .../space_update_isolation_segment_spec.rb | 6 +- spec/unit/actions/space_update_spec.rb | 8 +- spec/unit/actions/stack_create_spec.rb | 2 +- spec/unit/actions/stack_delete_spec.rb | 10 +- spec/unit/actions/stack_update_spec.rb | 6 +- spec/unit/actions/staging_cancel_spec.rb | 4 +- spec/unit/actions/task_cancel_spec.rb | 4 +- spec/unit/actions/task_create_spec.rb | 30 +- spec/unit/actions/task_delete_spec.rb | 20 +- spec/unit/actions/task_update_spec.rb | 2 +- .../transactional_metadata_update_spec.rb | 6 +- .../actions/update_route_destinations_spec.rb | 134 ++- spec/unit/actions/user_create_spec.rb | 2 +- spec/unit/actions/user_delete_spec.rb | 2 +- spec/unit/actions/user_update_spec.rb | 2 +- spec/unit/actions/v2/app_create_spec.rb | 14 +- spec/unit/actions/v2/app_stage_spec.rb | 33 +- spec/unit/actions/v2/app_stop_spec.rb | 4 +- spec/unit/actions/v2/app_update_spec.rb | 82 +- .../actions/v2/organization_delete_spec.rb | 34 +- spec/unit/actions/v2/route_create_spec.rb | 8 +- .../actions/v2/route_mapping_create_spec.rb | 20 +- .../services/service_binding_create_spec.rb | 18 +- .../services/service_binding_delete_spec.rb | 20 +- .../v2/services/service_binding_read_spec.rb | 18 +- .../actions/v3/service_broker_update_spec.rb | 13 +- .../service_instance_create_managed_spec.rb | 40 +- .../v3/service_instance_delete_spec.rb | 85 +- .../service_instance_update_managed_spec.rb | 165 ++-- .../v3/service_plan_visibility_delete_spec.rb | 4 +- .../v3/service_plan_visibility_update_spec.rb | 38 +- .../credhub_credential_populator_spec.rb | 10 +- .../usernames_and_roles_populator_spec.rb | 8 +- .../controllers/base/base_controller_spec.rb | 2 +- .../controllers/base/model_controller_spec.rb | 46 +- .../download_droplets_controller_spec.rb | 20 +- .../internal/log_access_controller_spec.rb | 4 +- .../internal/packages_controller_spec.rb | 2 +- .../staging_completion_controller_spec.rb | 24 +- .../syslog_drain_urls_controller_spec.rb | 272 +++--- .../task_completion_controller_spec.rb | 8 +- .../app_bits_upload_controller_spec.rb | 14 +- .../runtime/app_summaries_controller_spec.rb | 25 +- .../app_usage_events_controller_spec.rb | 8 +- .../runtime/apps_controller_spec.rb | 198 ++-- .../runtime/apps_ssh_controller_spec.rb | 8 +- .../runtime/buildpack_bits_controller_spec.rb | 2 +- .../buildpacks_cache_controller_spec.rb | 2 +- .../runtime/buildpacks_controller_spec.rb | 6 +- .../runtime/crashes_controller_spec.rb | 4 +- .../runtime/domains_controller_spec.rb | 44 +- ...ronment_variable_groups_controller_spec.rb | 8 +- .../runtime/events_controller_spec.rb | 24 +- .../runtime/feature_flags_controller_spec.rb | 8 +- .../runtime/info_controller_spec.rb | 2 +- .../runtime/jobs_controller_spec.rb | 2 +- .../runtime/legacy_api_base_spec.rb | 12 +- .../controllers/runtime/legacy_info_spec.rb | 2 +- .../organization_summaries_controller_spec.rb | 12 +- .../runtime/organizations_controller_spec.rb | 224 ++--- .../private_domains_controller_spec.rb | 18 +- .../quota_definitions_controller_spec.rb | 8 +- .../resource_matches_controller_spec.rb | 10 +- .../runtime/restages_controller_spec.rb | 2 +- .../runtime/route_mappings_controller_spec.rb | 42 +- .../runtime/routes_controller_spec.rb | 215 +++-- ..._group_running_defaults_controller_spec.rb | 18 +- ..._group_staging_defaults_controller_spec.rb | 10 +- .../security_groups_controller_spec.rb | 12 +- .../runtime/shared_domains_controller_spec.rb | 4 +- ...space_quota_definitions_controller_spec.rb | 10 +- .../space_summaries_controller_spec.rb | 56 +- .../runtime/spaces_controller_spec.rb | 307 +++---- .../runtime/stacks_controller_spec.rb | 4 +- .../runtime/stagings_controller_spec.rb | 33 +- .../runtime/user_summaries_controller_spec.rb | 4 +- .../runtime/users_controller_spec.rb | 82 +- .../service_instance_binding_manager_spec.rb | 51 +- .../service_instance_deprovisioner_spec.rb | 4 +- .../lifecycle/service_instance_purger_spec.rb | 24 +- .../lifecycle/service_key_manager_spec.rb | 10 +- .../service_bindings_controller_spec.rb | 138 ++- .../service_brokers_controller_spec.rb | 103 +-- .../service_instances_controller_spec.rb | 543 ++++++----- .../services/service_keys_controller_spec.rb | 82 +- ...rvice_plan_visibilities_controller_spec.rb | 24 +- .../services/service_plans_controller_spec.rb | 76 +- .../service_usage_events_controller_spec.rb | 44 +- .../services/services_controller_spec.rb | 84 +- ...vided_service_instances_controller_spec.rb | 106 +-- .../service_update_validator_spec.rb | 60 +- .../v3/app_features_controller_spec.rb | 4 +- .../v3/app_manifests_controller_spec.rb | 4 +- .../v3/app_revisions_controller_spec.rb | 36 +- .../v3/application_controller_spec.rb | 16 +- .../controllers/v3/apps_controller_spec.rb | 168 ++-- .../v3/buildpacks_controller_spec.rb | 82 +- .../controllers/v3/builds_controller_spec.rb | 127 ++- .../v3/deployments_controller_spec.rb | 64 +- .../v3/droplets_controller_spec.rb | 66 +- .../v3/feature_flags_controller_spec.rb | 10 +- .../v3/isolation_segments_controller_spec.rb | 52 +- .../controllers/v3/jobs_controller_spec.rb | 4 +- .../v3/organizations_controller_spec.rb | 54 +- .../v3/packages_controller_spec.rb | 88 +- .../v3/processes_controller_spec.rb | 80 +- .../v3/resource_matches_controller_spec.rb | 12 +- .../v3/revisions_controller_spec.rb | 35 +- .../v3/sidecars_controller_spec.rb | 23 +- .../v3/space_manifests_controller_spec.rb | 26 +- .../controllers/v3/spaces_controller_spec.rb | 118 ++- .../controllers/v3/stacks_controller_spec.rb | 42 +- .../controllers/v3/tasks_controller_spec.rb | 49 +- ..._service_instance_broker_decorator_spec.rb | 22 +- ...ervice_instance_offering_decorator_spec.rb | 18 +- ...ce_instance_organization_decorator_spec.rb | 16 +- ...ld_service_instance_plan_decorator_spec.rb | 12 +- ...d_service_instance_space_decorator_spec.rb | 14 +- ..._offering_service_broker_decorator_spec.rb | 8 +- ...vice_plan_service_broker_decorator_spec.rb | 12 +- .../include_binding_app_decorator_spec.rb | 10 +- .../include_binding_route_decorator_spec.rb | 16 +- ...binding_service_instance_decorator_spec.rb | 10 +- .../include_organization_decorator_spec.rb | 10 +- ...nclude_role_organization_decorator_spec.rb | 10 +- .../include_role_space_decorator_spec.rb | 10 +- .../include_role_user_decorator_spec.rb | 8 +- .../include_route_domain_decorator_spec.rb | 6 +- ...ce_plan_service_offering_decorator_spec.rb | 10 +- ..._plan_space_organization_decorator_spec.rb | 18 +- .../include_space_decorator_spec.rb | 6 +- ...clude_space_organization_decorator_spec.rb | 8 +- .../fetchers/app_builds_list_fetcher_spec.rb | 24 +- spec/unit/fetchers/app_fetcher_spec.rb | 2 +- spec/unit/fetchers/app_list_fetcher_spec.rb | 57 +- .../app_revisions_list_fetcher_spec.rb | 22 +- .../app_usage_event_list_fetcher_spec.rb | 6 +- .../assign_current_droplet_fetcher_spec.rb | 4 +- spec/unit/fetchers/base_list_fetcher_spec.rb | 56 +- spec/unit/fetchers/build_list_fetcher_spec.rb | 37 +- .../buildpack_lifecycle_fetcher_spec.rb | 16 +- .../fetchers/buildpack_list_fetcher_spec.rb | 26 +- spec/unit/fetchers/domain_fetcher_spec.rb | 68 +- spec/unit/fetchers/droplet_fetcher_spec.rb | 2 +- .../fetchers/droplet_list_fetcher_spec.rb | 46 +- spec/unit/fetchers/event_list_fetcher_spec.rb | 10 +- .../feature_flag_list_fetcher_spec.rb | 8 +- .../global_usage_summary_fetcher_spec.rb | 28 +- .../isolation_segment_list_fetcher_spec.rb | 14 +- ...tion_segment_organizations_fetcher_spec.rb | 10 +- .../isolation_segment_spaces_fetcher_spec.rb | 12 +- .../label_selector_query_generator_spec.rb | 14 +- spec/unit/fetchers/log_access_fetcher_spec.rb | 10 +- .../null_filter_query_generator_spec.rb | 16 +- spec/unit/fetchers/org_list_fetcher_spec.rb | 18 +- .../organization_quota_list_fetcher_spec.rb | 10 +- .../organization_user_roles_fetcher_spec.rb | 14 +- spec/unit/fetchers/package_fetcher_spec.rb | 2 +- .../fetchers/package_list_fetcher_spec.rb | 28 +- spec/unit/fetchers/process_fetcher_spec.rb | 20 +- .../fetchers/process_list_fetcher_spec.rb | 34 +- spec/unit/fetchers/queries/app_query_spec.rb | 30 +- .../queries/route_mapping_query_spec.rb | 24 +- spec/unit/fetchers/role_list_fetcher_spec.rb | 22 +- .../route_binding_list_fetcher_spec.rb | 30 +- .../route_destinations_list_fetcher_spec.rb | 24 +- spec/unit/fetchers/route_fetcher_spec.rb | 62 +- .../fetchers/security_group_fetcher_spec.rb | 6 +- .../security_group_list_fetcher_spec.rb | 8 +- .../service_binding_create_fetcher_spec.rb | 4 +- .../service_binding_list_fetcher_spec.rb | 18 +- .../service_broker_list_fetcher_spec.rb | 18 +- ...service_credential_binding_fetcher_spec.rb | 30 +- ...ce_credential_binding_list_fetcher_spec.rb | 36 +- .../fetchers/service_instance_fetcher_spec.rb | 12 +- .../service_instance_list_fetcher_spec.rb | 22 +- .../fetchers/service_offering_fetcher_spec.rb | 6 +- .../service_offering_list_fetcher_spec.rb | 118 +-- .../fetchers/service_plan_fetcher_spec.rb | 6 +- .../service_plan_list_fetcher_spec.rb | 138 +-- .../service_plan_visibility_fetcher_spec.rb | 22 +- .../service_usage_event_list_fetcher_spec.rb | 6 +- .../fetchers/sidecar_list_fetcher_spec.rb | 42 +- spec/unit/fetchers/space_fetcher_spec.rb | 2 +- spec/unit/fetchers/space_list_fetcher_spec.rb | 20 +- .../fetchers/space_quota_list_fetcher_spec.rb | 16 +- .../fetchers/space_user_roles_fetcher_spec.rb | 14 +- spec/unit/fetchers/stack_list_fetcher_spec.rb | 8 +- .../unit/fetchers/task_create_fetcher_spec.rb | 8 +- spec/unit/fetchers/task_fetcher_spec.rb | 6 +- spec/unit/fetchers/task_list_fetcher_spec.rb | 34 +- spec/unit/fetchers/user_list_fetcher_spec.rb | 14 +- spec/unit/jobs/audit_event_job_spec.rb | 2 +- spec/unit/jobs/delete_action_job_spec.rb | 12 +- spec/unit/jobs/deserialization_spec.rb | 20 +- spec/unit/jobs/pollable_job_wrapper_spec.rb | 10 +- .../runtime/app_usage_events_cleanup_spec.rb | 4 +- .../jobs/runtime/buildpack_delete_spec.rb | 2 +- .../buildpack_installer_factory_spec.rb | 36 +- .../create_buildpack_installer_spec.rb | 22 +- .../delete_expired_droplet_blob_spec.rb | 2 +- .../delete_expired_package_blob_spec.rb | 2 +- spec/unit/jobs/runtime/events_cleanup_spec.rb | 4 +- .../jobs/runtime/expired_blob_cleanup_spec.rb | 10 +- .../runtime/expired_resource_cleanup_spec.rb | 16 +- spec/unit/jobs/runtime/model_deletion_spec.rb | 2 +- .../runtime/orphaned_blobs_cleanup_spec.rb | 8 +- .../runtime/pending_build_cleanup_spec.rb | 16 +- .../runtime/pending_droplet_cleanup_spec.rb | 22 +- .../runtime/prune_completed_builds_spec.rb | 26 +- .../prune_completed_deployments_spec.rb | 38 +- .../runtime/prune_completed_tasks_spec.rb | 38 +- .../prune_excess_app_revisions_spec.rb | 22 +- ...service_operations_initial_cleanup_spec.rb | 24 +- .../update_buildpack_installer_spec.rb | 10 +- .../services/delete_orphaned_binding_spec.rb | 2 +- .../services/delete_orphaned_instance_spec.rb | 2 +- .../jobs/services/delete_orphaned_key_spec.rb | 2 +- .../service_binding_state_fetch_spec.rb | 8 +- .../service_instance_state_fetch_spec.rb | 18 +- .../service_usage_events_cleanup_spec.rb | 4 +- .../space_apply_manifest_action_job_spec.rb | 8 +- .../jobs/v2/upload_droplet_from_user_spec.rb | 4 +- spec/unit/jobs/v3/buildpack_bits_spec.rb | 4 +- .../jobs/v3/buildpack_cache_upload_spec.rb | 2 +- .../jobs/v3/create_binding_async_job_spec.rb | 10 +- ...rvice_credential_binding_job_actor_spec.rb | 2 +- .../v3/create_service_instance_job_spec.rb | 14 +- ...eate_service_key_binding_job_actor_spec.rb | 2 +- ...te_service_route_binding_job_actor_spec.rb | 2 +- spec/unit/jobs/v3/delete_binding_job_spec.rb | 4 +- ...delete_service_binding_job_factory_spec.rb | 8 +- .../v3/delete_service_instance_job_spec.rb | 10 +- ...te_service_route_binding_job_actor_spec.rb | 2 +- spec/unit/jobs/v3/droplet_bits_copier_spec.rb | 4 +- spec/unit/jobs/v3/droplet_upload_spec.rb | 2 +- spec/unit/jobs/v3/package_bits_copier_spec.rb | 4 +- .../synchronize_broker_catalog_job_spec.rb | 4 +- .../v3/services/update_broker_job_spec.rb | 20 +- .../space_delete_unmapped_routes_job_spec.rb | 2 +- .../v3/update_service_instance_job_spec.rb | 16 +- spec/unit/lib/app_log_emitter_spec.rb | 12 +- .../process_log_rate_limit_calculator_spec.rb | 6 +- .../process_memory_calculator_spec.rb | 6 +- .../backends/instances_reporters_spec.rb | 2 +- ..._staging_log_rate_limit_calculator_spec.rb | 6 +- ...lidating_staging_memory_calculator_spec.rb | 6 +- .../cloud_controller/backends/stagers_spec.rb | 18 +- .../staging_environment_builder_spec.rb | 18 +- .../cloud_controller/bits_expiration_spec.rb | 93 +- .../internal_url_generator_spec.rb | 6 +- .../url_generator/local_url_generator_spec.rb | 6 +- .../blobstore/url_generator_spec.rb | 2 +- .../lib/cloud_controller/check_stacks_spec.rb | 2 +- .../lib/cloud_controller/db_dataset_spec.rb | 8 +- .../deployment_updater/actions/cancel_spec.rb | 124 ++- .../actions/down_scaler_spec.rb | 54 +- .../actions/finalize_spec.rb | 96 +- .../scale_down_canceled_processes_spec.rb | 48 +- .../actions/scale_down_old_process_spec.rb | 42 +- .../deployment_updater/actions/scale_spec.rb | 272 +++--- .../actions/up_scaler_spec.rb | 56 +- .../deployment_updater/dispatcher_spec.rb | 6 +- .../deployment_updater/updater_spec.rb | 98 +- .../deployment_target_state_spec.rb | 26 +- .../diego/app_recipe_builder_spec.rb | 194 ++-- .../diego/bbs_apps_client_spec.rb | 2 +- .../diego/bbs_stager_client_spec.rb | 2 +- .../buildpack/lifecycle_protocol_spec.rb | 54 +- .../buildpack/staging_action_builder_spec.rb | 2 +- .../staging_completion_handler_spec.rb | 48 +- .../buildpack/task_action_builder_spec.rb | 2 +- .../diego/buildpack_entry_generator_spec.rb | 8 +- .../diego/cnb/lifecycle_protocol_spec.rb | 62 +- .../diego/cnb/staging_action_builder_spec.rb | 2 +- .../cnb/staging_completion_handler_spec.rb | 38 +- .../diego/docker/lifecycle_protocol_spec.rb | 184 ++-- .../docker/staging_completion_handler_spec.rb | 18 +- .../diego/docker/task_action_builder_spec.rb | 2 +- .../diego/egress_rules_spec.rb | 26 +- .../diego/environment_spec.rb | 20 +- .../app_buildpack_lifecycle_spec.rb | 10 +- .../lifecycles/app_cnb_lifecycle_spec.rb | 10 +- .../lifecycles/app_lifecycle_provider_spec.rb | 6 +- .../diego/lifecycles/app_lifecycle_shared.rb | 2 +- .../diego/lifecycles/buildpack_info_spec.rb | 6 +- ...buildpack_lifecycle_data_validator_spec.rb | 6 +- .../lifecycles/buildpack_lifecycle_spec.rb | 32 +- .../diego/lifecycles/cnb_lifecycle_spec.rb | 32 +- .../diego/lifecycles/docker_lifecycle_spec.rb | 8 +- .../lifecycles/lifecycle_provider_spec.rb | 10 +- .../diego/lifecycles/lifecycle_shared.rb | 2 +- .../diego/main_lrp_action_builder_spec.rb | 54 +- .../cloud_controller/diego/messenger_spec.rb | 4 +- .../diego/protocol/app_volume_mounts_spec.rb | 14 +- .../protocol/container_network_info_spec.rb | 10 +- .../diego/protocol/routing_info_spec.rb | 125 ++- .../instances_stats_reporter_spec.rb | 6 +- .../lib/cloud_controller/diego/runner_spec.rb | 4 +- .../service_binding_files_builder_spec.rb | 50 +- .../lib/cloud_controller/diego/stager_spec.rb | 12 +- .../diego/staging_request_spec.rb | 2 +- ...task_completion_callback_generator_spec.rb | 2 +- .../diego/task_completion_handler_spec.rb | 2 +- .../diego/task_environment_spec.rb | 26 +- ...ask_environment_variable_collector_spec.rb | 2 +- .../diego/task_recipe_builder_spec.rb | 66 +- .../cloud_controller/diego/tasks_sync_spec.rb | 26 +- .../diego/windows_environment_sage_spec.rb | 2 +- .../errands/rotate_database_key_spec.rb | 56 +- .../isolation_segment_selector_spec.rb | 6 +- .../lib/cloud_controller/membership_spec.rb | 32 +- .../metrics/periodic_updater_spec.rb | 8 +- ...nization_instance_usage_calculator_spec.rb | 8 +- .../organization_quota_usage_spec.rb | 28 +- .../packager/local_bits_packer_spec.rb | 2 +- .../packager/package_upload_handler_spec.rb | 2 +- .../paging/list_paginator_spec.rb | 4 +- .../paging/sequel_paginator_spec.rb | 56 +- .../lib/cloud_controller/permissions_spec.rb | 112 +-- .../cloud_controller/port_generator_spec.rb | 14 +- .../cloud_controller/process_observer_spec.rb | 4 +- .../cloud_controller/route_validator_spec.rb | 22 +- .../security_context_configurer_spec.rb | 10 +- spec/unit/lib/cloud_controller/seeds_spec.rb | 16 +- .../stack_state_validator_spec.rb | 42 +- .../validate_database_keys_spec.rb | 12 +- spec/unit/lib/database/batch_delete_spec.rb | 2 +- .../lib/database/old_record_cleanup_spec.rb | 6 +- .../rest_controller/object_renderer_spec.rb | 20 +- .../paginated_collection_renderer_spec.rb | 46 +- .../service_broker_registration_spec.rb | 14 +- .../service_broker_remover_spec.rb | 12 +- .../service_client_provider_spec.rb | 6 +- .../service_brokers/service_manager_spec.rb | 136 ++- .../user_provided/client_spec.rb | 14 +- .../v2/catalog_service_spec.rb | 12 +- .../service_brokers/v2/catalog_spec.rb | 40 +- .../service_brokers/v2/client_spec.rb | 154 ++-- .../v2/orphan_mitigator_spec.rb | 8 +- .../v2/response_parser_spec.rb | 6 +- .../sso/dashboard_client_manager_spec.rb | 6 +- spec/unit/lib/vcap/rest_api/query_spec.rb | 4 +- spec/unit/lib/vcap/vars_builder_spec.rb | 10 +- .../messages/app_manifest_message_spec.rb | 32 +- .../manifest_routes_update_message_spec.rb | 4 +- .../messages/package_create_message_spec.rb | 2 +- .../messages/route_create_message_spec.rb | 2 +- .../messages/route_options_message_spec.rb | 2 +- .../messages/route_update_message_spec.rb | 2 +- .../service_broker_rate_limiter_spec.rb | 2 +- .../runtime/app_annotation_model_spec.rb | 4 +- .../models/runtime/app_label_model_spec.rb | 4 +- spec/unit/models/runtime/app_model_spec.rb | 208 ++--- spec/unit/models/runtime/build_model_spec.rb | 58 +- ...uildpack_lifecycle_buildpack_model_spec.rb | 8 +- .../buildpack_lifecycle_data_model_spec.rb | 40 +- spec/unit/models/runtime/buildpack_spec.rb | 50 +- .../runtime/cnb_lifecycle_data_model_spec.rb | 30 +- .../max_app_instances_policy_spec.rb | 2 +- .../constraints/max_app_tasks_policy_spec.rb | 10 +- .../max_instance_memory_policy_spec.rb | 2 +- .../max_log_rate_limit_policy_spec.rb | 2 +- .../constraints/max_memory_policy_spec.rb | 2 +- ...ry_less_than_process_memory_policy_spec.rb | 22 +- .../models/runtime/deployment_model_spec.rb | 202 ++-- spec/unit/models/runtime/domain_spec.rb | 72 +- .../runtime/droplet_annotation_model_spec.rb | 4 +- .../runtime/droplet_label_model_spec.rb | 4 +- .../unit/models/runtime/droplet_model_spec.rb | 62 +- .../environment_variable_group_spec.rb | 8 +- spec/unit/models/runtime/event_spec.rb | 32 +- spec/unit/models/runtime/feature_flag_spec.rb | 10 +- .../helpers/package_state_calculator_spec.rb | 44 +- .../runtime/isolation_segment_model_spec.rb | 42 +- .../organization_annotation_model_spec.rb | 4 +- .../runtime/organization_auditor_spec.rb | 4 +- .../organization_billing_manager_spec.rb | 4 +- .../runtime/organization_label_model_spec.rb | 4 +- .../runtime/organization_manager_spec.rb | 4 +- .../organization_reserved_route_ports_spec.rb | 22 +- .../runtime/organization_routes_spec.rb | 14 +- spec/unit/models/runtime/organization_spec.rb | 260 +++--- .../models/runtime/organization_user_spec.rb | 4 +- .../unit/models/runtime/package_model_spec.rb | 8 +- .../models/runtime/pollable_job_model_spec.rb | 56 +- .../models/runtime/private_domain_spec.rb | 68 +- .../unit/models/runtime/process_model_spec.rb | 292 +++--- .../max_service_instances_policy_spec.rb | 14 +- .../max_service_keys_policy_spec.rb | 14 +- .../paid_service_instance_policy_spec.rb | 12 +- .../models/runtime/quota_definition_spec.rb | 6 +- .../models/runtime/revision_model_spec.rb | 32 +- .../revision_process_command_model_spec.rb | 12 +- .../runtime/revision_sidecar_model_spec.rb | 16 +- spec/unit/models/runtime/role_spec.rb | 24 +- .../runtime/route_mapping_model_spec.rb | 140 ++- spec/unit/models/runtime/route_spec.rb | 604 ++++++------ .../models/runtime/security_group_spec.rb | 24 +- .../unit/models/runtime/shared_domain_spec.rb | 48 +- .../unit/models/runtime/sidecar_model_spec.rb | 20 +- .../unit/models/runtime/space_auditor_spec.rb | 4 +- .../models/runtime/space_developer_spec.rb | 4 +- .../models/runtime/space_label_model_spec.rb | 4 +- .../unit/models/runtime/space_manager_spec.rb | 4 +- .../runtime/space_quota_definition_spec.rb | 12 +- .../space_reserved_route_ports_spec.rb | 16 +- spec/unit/models/runtime/space_routes_spec.rb | 6 +- spec/unit/models/runtime/space_spec.rb | 315 ++++--- .../models/runtime/space_supporter_spec.rb | 4 +- spec/unit/models/runtime/stack_spec.rb | 20 +- spec/unit/models/runtime/task_model_spec.rb | 323 +++---- .../runtime/user_annotation_model_spec.rb | 4 +- .../models/runtime/user_label_model_spec.rb | 4 +- spec/unit/models/runtime/user_spec.rb | 166 ++-- .../services/managed_service_instance_spec.rb | 190 ++-- .../models/services/route_binding_spec.rb | 40 +- .../models/services/service_binding_spec.rb | 112 ++- .../models/services/service_broker_spec.rb | 36 +- .../services/service_dashboard_client_spec.rb | 12 +- .../service_instance_operation_spec.rb | 8 +- .../models/services/service_instance_spec.rb | 66 +- spec/unit/models/services/service_key_spec.rb | 48 +- .../services/service_operation_shared.rb | 2 +- .../unit/models/services/service_plan_spec.rb | 222 +++-- .../services/service_plan_visibility_spec.rb | 56 +- spec/unit/models/services/service_spec.rb | 172 ++-- .../user_provided_service_instance_spec.rb | 36 +- .../api/organization_presenter_spec.rb | 6 +- .../api/quota_definition_presenter_spec.rb | 2 +- .../api/service_broker_presenter_spec.rb | 2 +- .../presenters/api/space_presenter_spec.rb | 2 +- .../presenters/api/user_presenter_spec.rb | 2 +- .../api/user_summary_presenter_spec.rb | 14 +- .../metadata_presentation_helpers_spec.rb | 56 +- .../service_instance_presenter_spec.rb | 8 +- .../service_binding_presenter_spec.rb | 20 +- .../service_instance_presenter_spec.rb | 8 +- .../system_env_presenter_spec.rb | 86 +- .../v2/app_usage_event_presenter_spec.rb | 2 +- .../v2/organization_presenter_spec.rb | 14 +- .../v2/process_model_presenter_spec.rb | 16 +- .../presenters/v2/relations_presenter_spec.rb | 24 +- .../v2/route_mapping_presenter_spec.rb | 14 +- .../presenters/v2/route_presenter_spec.rb | 20 +- .../v2/service_binding_presenter_spec.rb | 22 +- .../v2/service_instance_presenter_spec.rb | 12 +- ...ice_instance_shared_from_presenter_spec.rb | 2 +- ...rvice_instance_shared_to_presenter_spec.rb | 2 +- .../v2/service_key_presenter_spec.rb | 2 +- .../v2/service_plan_presenter_spec.rb | 10 +- .../presenters/v2/service_presenter_spec.rb | 4 +- .../v2/shared_domain_presenter_spec.rb | 6 +- .../presenters/v2/space_presenter_spec.rb | 24 +- .../unit/presenters/v2/user_presenter_spec.rb | 4 +- .../presenters/v3/app_env_presenter_spec.rb | 18 +- ...pp_environment_variables_presenter_spec.rb | 4 +- .../v3/app_feature_presenter_spec.rb | 6 +- .../v3/app_manifest_presenter_spec.rb | 76 +- .../process_properties_presenter_spec.rb | 38 +- spec/unit/presenters/v3/app_presenter_spec.rb | 38 +- .../v3/app_ssh_status_presenter_spec.rb | 2 +- .../v3/app_usage_event_presenter_spec.rb | 12 +- .../presenters/v3/build_presenter_spec.rb | 42 +- .../presenters/v3/buildpack_presenter_spec.rb | 2 +- .../presenters/v3/cache_key_presenter_spec.rb | 6 +- .../v3/deployment_presenter_spec.rb | 52 +- .../presenters/v3/domain_presenter_spec.rb | 84 +- .../v3/domain_shared_orgs_presenter_spec.rb | 22 +- .../presenters/v3/droplet_presenter_spec.rb | 62 +- .../presenters/v3/event_presenter_spec.rb | 2 +- .../v3/feature_flag_presenter_spec.rb | 2 +- .../v3/isolation_segment_presenter_spec.rb | 18 +- spec/unit/presenters/v3/job_presenter_spec.rb | 26 +- .../v3/organization_presenter_spec.rb | 38 +- .../v3/organization_quota_presenter_spec.rb | 6 +- ...ganization_usage_summary_presenter_spec.rb | 2 +- .../presenters/v3/package_presenter_spec.rb | 56 +- .../v3/process_instances_presenter_spec.rb | 2 +- .../presenters/v3/process_presenter_spec.rb | 66 +- ...on_environment_variables_presenter_spec.rb | 4 +- .../presenters/v3/revision_presenter_spec.rb | 90 +- .../unit/presenters/v3/role_presenter_spec.rb | 18 +- .../v3/route_destination_presenter_spec.rb | 18 +- .../v3/route_destinations_presenter_spec.rb | 54 +- .../presenters/v3/route_presenter_spec.rb | 84 +- .../v3/security_group_presenter_spec.rb | 26 +- ...edential_binding_details_presenter_spec.rb | 30 +- ...rvice_credential_binding_presenter_spec.rb | 22 +- .../v3/service_instance_presenter_spec.rb | 116 +-- .../v3/service_offering_presenter_spec.rb | 54 +- .../v3/service_plan_presenter_spec.rb | 58 +- .../service_plan_visibility_presenter_spec.rb | 22 +- .../service_route_binding_presenter_spec.rb | 22 +- .../v3/service_usage_event_presenter_spec.rb | 2 +- ...red_spaces_usage_summary_presenter_spec.rb | 18 +- .../presenters/v3/sidecar_presenter_spec.rb | 12 +- .../presenters/v3/space_presenter_spec.rb | 38 +- .../v3/space_quota_presenter_spec.rb | 56 +- .../v3/space_ssh_feature_presenter_spec.rb | 2 +- .../v3/space_usage_summary_presenter_spec.rb | 28 +- .../presenters/v3/stack_presenter_spec.rb | 48 +- .../unit/presenters/v3/task_presenter_spec.rb | 50 +- .../unit/presenters/v3/user_presenter_spec.rb | 20 +- .../queries/deployment_list_fetcher_spec.rb | 74 +- .../repositories/app_event_repository_spec.rb | 50 +- .../app_usage_event_repository_spec.rb | 78 +- .../build_event_repository_spec.rb | 98 +- .../buildpack_event_repository_spec.rb | 4 +- .../deployment_event_repository_spec.rb | 16 +- .../droplet_event_repository_spec.rb | 8 +- .../organization_event_repository_spec.rb | 4 +- .../package_event_repository_spec.rb | 4 +- .../process_event_repository_spec.rb | 4 +- .../route_event_repository_spec.rb | 16 +- .../service_binding_event_repository_spec.rb | 10 +- .../service_event_repository_spec.rb | 76 +- ...ce_instance_share_event_repository_spec.rb | 2 +- .../service_usage_event_repository_spec.rb | 16 +- .../space_event_repository_spec.rb | 4 +- .../stack_event_repository_spec.rb | 4 +- .../task_event_repository_spec.rb | 2 +- .../user_event_repository_spec.rb | 8 +- 940 files changed, 14886 insertions(+), 15471 deletions(-) create mode 100644 spec/factories_lint_spec.rb create mode 100644 spec/support/factories.rb create mode 100644 spec/support/factory_definitions/app_annotation_model.rb create mode 100644 spec/support/factory_definitions/app_event.rb create mode 100644 spec/support/factory_definitions/app_label_model.rb create mode 100644 spec/support/factory_definitions/app_model.rb create mode 100644 spec/support/factory_definitions/app_usage_event.rb create mode 100644 spec/support/factory_definitions/build_annotation_model.rb create mode 100644 spec/support/factory_definitions/build_label_model.rb create mode 100644 spec/support/factory_definitions/build_model.rb create mode 100644 spec/support/factory_definitions/buildpack.rb create mode 100644 spec/support/factory_definitions/buildpack_annotation_model.rb create mode 100644 spec/support/factory_definitions/buildpack_label_model.rb create mode 100644 spec/support/factory_definitions/buildpack_lifecycle_buildpack_model.rb create mode 100644 spec/support/factory_definitions/buildpack_lifecycle_data_model.rb create mode 100644 spec/support/factory_definitions/cnb_lifecycle_data_model.rb create mode 100644 spec/support/factory_definitions/custom_buildpack.rb create mode 100644 spec/support/factory_definitions/deployment_annotation_model.rb create mode 100644 spec/support/factory_definitions/deployment_label_model.rb create mode 100644 spec/support/factory_definitions/deployment_model.rb create mode 100644 spec/support/factory_definitions/deployment_model_test_factory.rb create mode 100644 spec/support/factory_definitions/deployment_process_model.rb create mode 100644 spec/support/factory_definitions/domain.rb create mode 100644 spec/support/factory_definitions/domain_annotation_model.rb create mode 100644 spec/support/factory_definitions/domain_label_model.rb create mode 100644 spec/support/factory_definitions/droplet_annotation_model.rb create mode 100644 spec/support/factory_definitions/droplet_label_model.rb create mode 100644 spec/support/factory_definitions/droplet_model.rb create mode 100644 spec/support/factory_definitions/environment_variable_group.rb create mode 100644 spec/support/factory_definitions/event.rb create mode 100644 spec/support/factory_definitions/feature_flag.rb create mode 100644 spec/support/factory_definitions/isolation_segment_annotation_model.rb create mode 100644 spec/support/factory_definitions/isolation_segment_label_model.rb create mode 100644 spec/support/factory_definitions/isolation_segment_model.rb create mode 100644 spec/support/factory_definitions/job_warning_model.rb create mode 100644 spec/support/factory_definitions/managed_service_instance.rb create mode 100644 spec/support/factory_definitions/organization.rb create mode 100644 spec/support/factory_definitions/organization_annotation_model.rb create mode 100644 spec/support/factory_definitions/organization_auditor.rb create mode 100644 spec/support/factory_definitions/organization_billing_manager.rb create mode 100644 spec/support/factory_definitions/organization_label_model.rb create mode 100644 spec/support/factory_definitions/organization_manager.rb create mode 100644 spec/support/factory_definitions/organization_user.rb create mode 100644 spec/support/factory_definitions/orphaned_blob.rb create mode 100644 spec/support/factory_definitions/package_annotation_model.rb create mode 100644 spec/support/factory_definitions/package_label_model.rb create mode 100644 spec/support/factory_definitions/package_model.rb create mode 100644 spec/support/factory_definitions/pollable_job_model.rb create mode 100644 spec/support/factory_definitions/private_domain.rb create mode 100644 spec/support/factory_definitions/process_annotation_model.rb create mode 100644 spec/support/factory_definitions/process_label_model.rb create mode 100644 spec/support/factory_definitions/process_model.rb create mode 100644 spec/support/factory_definitions/quota_definition.rb create mode 100644 spec/support/factory_definitions/revision_annotation_model.rb create mode 100644 spec/support/factory_definitions/revision_label_model.rb create mode 100644 spec/support/factory_definitions/revision_model.rb create mode 100644 spec/support/factory_definitions/revision_process_command_model.rb create mode 100644 spec/support/factory_definitions/revision_sidecar_model.rb create mode 100644 spec/support/factory_definitions/revision_sidecar_process_type_model.rb create mode 100644 spec/support/factory_definitions/route.rb create mode 100644 spec/support/factory_definitions/route_annotation_model.rb create mode 100644 spec/support/factory_definitions/route_binding.rb create mode 100644 spec/support/factory_definitions/route_binding_label_model.rb create mode 100644 spec/support/factory_definitions/route_binding_operation.rb create mode 100644 spec/support/factory_definitions/route_label_model.rb create mode 100644 spec/support/factory_definitions/route_mapping_model.rb create mode 100644 spec/support/factory_definitions/security_group.rb create mode 100644 spec/support/factory_definitions/service.rb create mode 100644 spec/support/factory_definitions/service_binding.rb create mode 100644 spec/support/factory_definitions/service_binding_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_binding_label_model.rb create mode 100644 spec/support/factory_definitions/service_binding_operation.rb create mode 100644 spec/support/factory_definitions/service_broker.rb create mode 100644 spec/support/factory_definitions/service_broker_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_broker_label_model.rb create mode 100644 spec/support/factory_definitions/service_broker_update_request.rb create mode 100644 spec/support/factory_definitions/service_dashboard_client.rb create mode 100644 spec/support/factory_definitions/service_instance.rb create mode 100644 spec/support/factory_definitions/service_instance_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_instance_label_model.rb create mode 100644 spec/support/factory_definitions/service_instance_operation.rb create mode 100644 spec/support/factory_definitions/service_key.rb create mode 100644 spec/support/factory_definitions/service_key_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_key_label_model.rb create mode 100644 spec/support/factory_definitions/service_key_operation.rb create mode 100644 spec/support/factory_definitions/service_offering_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_offering_label_model.rb create mode 100644 spec/support/factory_definitions/service_plan.rb create mode 100644 spec/support/factory_definitions/service_plan_annotation_model.rb create mode 100644 spec/support/factory_definitions/service_plan_label_model.rb create mode 100644 spec/support/factory_definitions/service_plan_visibility.rb create mode 100644 spec/support/factory_definitions/service_usage_event.rb create mode 100644 spec/support/factory_definitions/shared_domain.rb create mode 100644 spec/support/factory_definitions/sidecar_model.rb create mode 100644 spec/support/factory_definitions/sidecar_process_type_model.rb create mode 100644 spec/support/factory_definitions/space.rb create mode 100644 spec/support/factory_definitions/space_annotation_model.rb create mode 100644 spec/support/factory_definitions/space_auditor.rb create mode 100644 spec/support/factory_definitions/space_developer.rb create mode 100644 spec/support/factory_definitions/space_label_model.rb create mode 100644 spec/support/factory_definitions/space_manager.rb create mode 100644 spec/support/factory_definitions/space_quota_definition.rb create mode 100644 spec/support/factory_definitions/space_supporter.rb create mode 100644 spec/support/factory_definitions/stack.rb create mode 100644 spec/support/factory_definitions/stack_annotation_model.rb create mode 100644 spec/support/factory_definitions/stack_label_model.rb create mode 100644 spec/support/factory_definitions/task_annotation_model.rb create mode 100644 spec/support/factory_definitions/task_label_model.rb create mode 100644 spec/support/factory_definitions/task_model.rb create mode 100644 spec/support/factory_definitions/test_model.rb create mode 100644 spec/support/factory_definitions/test_model_many_to_many.rb create mode 100644 spec/support/factory_definitions/test_model_many_to_one.rb create mode 100644 spec/support/factory_definitions/test_model_redact.rb create mode 100644 spec/support/factory_definitions/test_model_second_level.rb create mode 100644 spec/support/factory_definitions/user.rb create mode 100644 spec/support/factory_definitions/user_annotation_model.rb create mode 100644 spec/support/factory_definitions/user_label_model.rb create mode 100644 spec/support/factory_definitions/user_provided_service_instance.rb delete mode 100644 spec/support/fakes/blueprints.rb delete mode 100644 spec/support/machinist_monkey_patch.rb create mode 100644 spec/support/sham_shim.rb diff --git a/Gemfile b/Gemfile index 47c7f851917..7028c812172 100644 --- a/Gemfile +++ b/Gemfile @@ -63,7 +63,7 @@ end group :test do gem 'codeclimate-test-reporter', '>= 1.0.8', require: false - gem 'machinist', '~> 1.0.6' + gem 'factory_bot', '~> 6.5' gem 'mock_redis' gem 'parallel_tests' gem 'rack-test' diff --git a/Gemfile.lock b/Gemfile.lock index 7dc6b12fda5..1a51d264dfa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -139,6 +139,8 @@ GEM erubi (1.13.1) excon (1.4.2) logger + factory_bot (6.6.0) + activesupport (>= 6.1.0) faraday (0.17.6) multipart-post (>= 1.2, < 3) faraday-cookie_jar (0.0.8) @@ -286,7 +288,6 @@ GEM loofah (2.25.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) - machinist (1.0.6) method_source (1.1.0) mime-types (3.7.0) logger @@ -622,6 +623,7 @@ DEPENDENCIES concurrent-ruby debug (~> 1.11) digest-xxhash + factory_bot (~> 6.5) fluent-logger fog-aliyun fog-aws @@ -636,7 +638,6 @@ DEPENDENCIES json-diff json-schema listen - machinist (~> 1.0.6) mime-types (~> 3.7) mock_redis multipart-parser diff --git a/lib/cloud_controller/console.rb b/lib/cloud_controller/console.rb index 0eab422f2aa..e72a98562f1 100755 --- a/lib/cloud_controller/console.rb +++ b/lib/cloud_controller/console.rb @@ -36,9 +36,8 @@ if ENV['NEW_RELIC_ENV'] == 'development' $LOAD_PATH.unshift(File.expand_path('../../spec/support', __dir__)) - require 'machinist/sequel' - require 'machinist/object' - require 'fakes/blueprints' + require 'factories' + require 'sham_shim' end module VCAP::CloudController diff --git a/spec/acceptance/async_bindings_spec.rb b/spec/acceptance/async_bindings_spec.rb index e0db690435a..d6c40e27569 100644 --- a/spec/acceptance/async_bindings_spec.rb +++ b/spec/acceptance/async_bindings_spec.rb @@ -33,16 +33,16 @@ module VCAP::CloudController end context 'when a service instance is shared' do - let(:service_instance) { ManagedServiceInstance.make } - let(:target_space) { Space.make } + let(:service_instance) { create(:managed_service_instance) } + let(:target_space) { create(:space) } before do service_instance.add_shared_space(target_space) end context 'when there are bindings in the target space' do - let(:target_app) { AppModel.make(space: target_space) } - let!(:target_binding) { ServiceBinding.make(app: target_app, service_instance: service_instance) } + let(:target_app) { create(:app_model, space: target_space) } + let!(:target_binding) { create(:service_binding, app: target_app, service_instance: service_instance) } it 'issues an unbind and fails the instance deletion if the service instance is deleted recursively and accepts_incomplete is true' do delete("/v2/service_instances/#{service_instance.guid}", 'recursive=true&accepts_incomplete=true', admin_headers) @@ -70,8 +70,8 @@ module VCAP::CloudController context 'and when there are bindings in the source space' do let(:source_space) { service_instance.space } - let(:source_app) { AppModel.make(space: source_space) } - let!(:source_binding) { ServiceBinding.make(app: source_app, service_instance: service_instance) } + let(:source_app) { create(:app_model, space: source_space) } + let!(:source_binding) { create(:service_binding, app: source_app, service_instance: service_instance) } it 'issues unbinds and fails the instance deletion if the service instance is deleted recursively and accepts_incomplete is true' do delete("/v2/service_instances/#{service_instance.guid}", 'recursive=true&accepts_incomplete=true', admin_headers) @@ -121,15 +121,15 @@ module VCAP::CloudController context 'when DELETE /v3/apps/:guid is called' do context 'and multiple service bindings exist' do - let(:space) { Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'app_name', space: space) } - let(:package) { VCAP::CloudController::PackageModel.make(app: app_model) } - let!(:droplet) { VCAP::CloudController::DropletModel.make(package: package, app: app_model) } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app_model) } - let!(:deployment) { VCAP::CloudController::DeploymentModel.make(app: app_model) } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, name: 'app_name', space: space) } + let(:package) { create(:package_model, app: app_model) } + let!(:droplet) { create(:droplet_model, package: package, app: app_model) } + let!(:process) { create(:process_model, app: app_model) } + let!(:deployment) { create(:deployment_model, app: app_model) } - let!(:service_binding1) { ServiceBinding.make(app: app_model, service_instance: ManagedServiceInstance.make(space:)) } - let!(:service_binding2) { ServiceBinding.make(app: app_model, service_instance: ManagedServiceInstance.make(space:)) } + let!(:service_binding1) { create(:service_binding, app: app_model, service_instance: create(:managed_service_instance, space:)) } + let!(:service_binding2) { create(:service_binding, app: app_model, service_instance: create(:managed_service_instance, space:)) } it 'returns a list of errors for the service bindings' do delete("/v3/apps/#{app_model.guid}", nil, admin_headers) @@ -157,8 +157,8 @@ module VCAP::CloudController context 'and multiple service bindings exist' do let(:process) { ProcessModelFactory.make } - let!(:service_binding1) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } - let!(:service_binding2) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } + let!(:service_binding1) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } + let!(:service_binding2) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } it 'returns a concatenated error for the service bindings' do delete("/v2/apps/#{process.app.guid}", 'recursive=true', admin_headers) @@ -180,8 +180,8 @@ module VCAP::CloudController context 'and multiple service bindings exist' do let(:process) { ProcessModelFactory.make } - let!(:service_binding1) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } - let!(:service_binding2) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } + let!(:service_binding1) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } + let!(:service_binding2) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } it 'returns a concatenated error for the service bindings' do delete("/v2/spaces/#{process.space.guid}", 'recursive=true', admin_headers) @@ -203,8 +203,8 @@ module VCAP::CloudController context 'and multiple service bindings exist' do let(:process) { ProcessModelFactory.make } - let!(:service_binding1) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } - let!(:service_binding2) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } + let!(:service_binding1) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } + let!(:service_binding2) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } it 'returns a concatenated error for the service bindings' do delete("/v2/organizations/#{process.organization.guid}", 'recursive=true', admin_headers) @@ -224,8 +224,8 @@ module VCAP::CloudController context 'when PUT /v2/service_instances/:guid is called and when an async binding operation is in progress' do let(:process) { ProcessModelFactory.make } - let(:service_binding) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } - let!(:service_binding_operation) { ServiceBindingOperation.make(state: 'in progress', type: operation_type, service_binding_id: service_binding.id) } + let(:service_binding) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } + let!(:service_binding_operation) { create(:service_binding_operation, state: 'in progress', type: operation_type, service_binding_id: service_binding.id) } let(:body) do { @@ -270,8 +270,8 @@ module VCAP::CloudController context 'when DELETE /v2/service_instances/:guid is called and when an async binding operation is in progress' do let(:process) { ProcessModelFactory.make } - let(:service_binding) { ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) } - let!(:service_binding_operation) { ServiceBindingOperation.make(state: 'in progress', type: operation_type, service_binding_id: service_binding.id) } + let(:service_binding) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } + let!(:service_binding_operation) { create(:service_binding_operation, state: 'in progress', type: operation_type, service_binding_id: service_binding.id) } context 'when the binding operation is create' do let(:operation_type) { 'create' } diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.13_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.13_spec.rb index 3ceee175e36..7b441924071 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.13_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.13_spec.rb @@ -227,7 +227,7 @@ let(:catalog) { default_catalog(plan_updateable: true) } context 'service broker registration' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do setup_broker_with_user(user) @@ -246,7 +246,7 @@ end context 'service provision request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service(user:) @@ -264,7 +264,7 @@ end context 'service deprovision request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service(user:) @@ -283,7 +283,7 @@ end context 'service update request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service(user:) @@ -302,7 +302,7 @@ end context 'service binding request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service @@ -322,7 +322,7 @@ end context 'service unbind request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:async) { false } before do @@ -367,7 +367,7 @@ end context 'create service key request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service @@ -386,7 +386,7 @@ end context 'delete service key request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do provision_service @@ -407,8 +407,8 @@ context 'create route binding' do let(:catalog) { default_catalog(plan_updateable: true, requires: ['route_forwarding']) } - let(:user) { VCAP::CloudController::User.make } - let(:route) { VCAP::CloudController::Route.make(space: @space) } + let(:user) { create(:user) } + let(:route) { create(:route, space: @space) } before do provision_service @@ -428,8 +428,8 @@ context 'delete route binding' do let(:catalog) { default_catalog(plan_updateable: true, requires: ['route_forwarding']) } - let(:user) { VCAP::CloudController::User.make } - let(:route) { VCAP::CloudController::Route.make(space: @space) } + let(:user) { create(:user) } + let(:route) { create(:route, space: @space) } before do provision_service @@ -449,9 +449,9 @@ end context 'when multiple users operate on a service instance' do - let(:user_a) { VCAP::CloudController::User.make } - let(:user_b) { VCAP::CloudController::User.make } - let(:user_c) { VCAP::CloudController::User.make } + let(:user_a) { create(:user) } + let(:user_b) { create(:user) } + let(:user_c) { create(:user) } before do provision_service(user: user_a) @@ -547,7 +547,7 @@ context 'for bind route service' do let(:catalog) { default_catalog(requires: ['route_forwarding']) } - let(:route) { VCAP::CloudController::Route.make(space: @space) } + let(:route) { create(:route, space: @space) } before do provision_service diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.14_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.14_spec.rb index f97c0143955..50cc400e2b3 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.14_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.14_spec.rb @@ -48,7 +48,7 @@ end it 'sends the broker the X-Broker-Api-Originating-Identity header' do - user = VCAP::CloudController::User.make + user = create(:user) get("/v2/service_bindings/#{@binding_guid}/parameters", {}.to_json, @@ -249,7 +249,7 @@ end describe 'update service dashboard url' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } let(:catalog) { default_catalog(plan_updateable: true) } before do diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.15_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.15_spec.rb index 657b42f45cc..5f229f92fa3 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.15_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.15_spec.rb @@ -59,7 +59,7 @@ end context 'when deprovisioning a service instance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -81,7 +81,7 @@ end context 'when updating a service instance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -105,7 +105,7 @@ describe 'service bindings' do context 'when creating a service binding' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -128,7 +128,7 @@ end context 'when removing a service binding' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -182,7 +182,7 @@ end context 'when updating a service instance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -201,7 +201,7 @@ end context 'when deleting a service instance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -222,7 +222,7 @@ describe 'service bindings' do context 'when creating a service binding' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -240,7 +240,7 @@ end context 'when removing a service binding' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -403,7 +403,7 @@ end context 'for bind route service' do - let(:route) { VCAP::CloudController::Route.make(space: @space) } + let(:route) { create(:route, space: @space) } before do create_route_binding(route) @@ -514,11 +514,9 @@ context 'when updating the service with the provided maintenance_info' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - space_guid: @space_guid, - service_plan_guid: @plan_guid, - maintenance_info: { 'version' => '1.0.0' } - ) + create(:managed_service_instance, space_guid: @space_guid, + service_plan_guid: @plan_guid, + maintenance_info: { 'version' => '1.0.0' }) end before do diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.7_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.7_spec.rb index 8aa3f374a59..619efd8f635 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.7_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.7_spec.rb @@ -14,7 +14,7 @@ end context 'update' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid @@ -69,7 +69,7 @@ end context 'delete' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } before do @service_instance_guid = service_instance.guid diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.8_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.8_spec.rb index 960f10f821f..9d9f7eb8255 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.8_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.8_spec.rb @@ -4,7 +4,7 @@ describe 'v2.8' do include VCAP::CloudController::BrokerApiHelper - let(:route) { VCAP::CloudController::Route.make(space: @space) } + let(:route) { create(:route, space: @space) } let(:catalog) { default_catalog(requires: ['route_forwarding']) } let(:service_broker_bind_request) { %r{.*/v2/service_instances/#{@service_instance_guid}/service_bindings/#{guid_pattern}} } diff --git a/spec/acceptance/broker_api_compatibility/broker_api_v2.9_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_v2.9_spec.rb index 98e6cc0ce67..0f87514e0d9 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_v2.9_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_v2.9_spec.rb @@ -33,7 +33,7 @@ describe 'Last Operation for instances that have already been provisioned' do let(:broker_response_status) { 200 } let(:broker_response_body) { { state: 'succeeded' }.to_json } - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space_guid: @space_guid, service_plan_guid: @plan_guid) } + let!(:service_instance) { create(:managed_service_instance, space_guid: @space_guid, service_plan_guid: @plan_guid) } let(:operation_data) { nil } let(:basic_auth) { [stubbed_broker_username, stubbed_broker_password] } diff --git a/spec/acceptance/broker_api_compatibility/broker_api_versions_spec.rb b/spec/acceptance/broker_api_compatibility/broker_api_versions_spec.rb index 29983978f05..d3699784d44 100644 --- a/spec/acceptance/broker_api_compatibility/broker_api_versions_spec.rb +++ b/spec/acceptance/broker_api_compatibility/broker_api_versions_spec.rb @@ -10,15 +10,15 @@ 'broker_api_v2.4_spec.rb' => '637fff704df656d47f4f0e75927d2003', 'broker_api_v2.5_spec.rb' => '4cbc9df341ba86c2f1791b1a4870547c', 'broker_api_v2.6_spec.rb' => 'a1608878f601819c90b44be5f317ec44', - 'broker_api_v2.7_spec.rb' => '2160e3d4985039f8fd2881106c7226ae', - 'broker_api_v2.8_spec.rb' => '4cf48cbdd3db911c2c3a648ecc0475b8', - 'broker_api_v2.9_spec.rb' => '002089c49e4c2db32689be56d48d4a45', + 'broker_api_v2.7_spec.rb' => 'e581d1211811ed266a2f84f18209ea1a', + 'broker_api_v2.8_spec.rb' => 'baf95bd15b38ab79e9b9c4b7982c096a', + 'broker_api_v2.9_spec.rb' => '683eb44dadd6b550469c55bca1e649c4', 'broker_api_v2.10_spec.rb' => '2668e6821e9b45ab6d7c7e9eca9deb68', 'broker_api_v2.11_spec.rb' => '99e61dc50ceb635b09b3bd16901a4fa6', 'broker_api_v2.12_spec.rb' => '6be5f9646bf885498dd88c090fbed7af', - 'broker_api_v2.13_spec.rb' => 'b8423b9f28e68adbc3c767b2185561c5', - 'broker_api_v2.14_spec.rb' => '73b5de4f83d280d959eb9844c19a3018', - 'broker_api_v2.15_spec.rb' => 'c8c910e903636d1a82e5a77fcdc1fbab' + 'broker_api_v2.13_spec.rb' => 'c394d28c2f372a753159228b08a8c7e1', + 'broker_api_v2.14_spec.rb' => 'b0edd04b7ac12010c7eeeda6f2903052', + 'broker_api_v2.15_spec.rb' => '30a8ac049b741c08a45f49dcfff4d475' } end let(:digester) { Digester.new(algorithm: OpenSSL::Digest::MD5) } diff --git a/spec/acceptance/managed_service_instance_spec.rb b/spec/acceptance/managed_service_instance_spec.rb index c874702e4e6..acad4afcba8 100644 --- a/spec/acceptance/managed_service_instance_spec.rb +++ b/spec/acceptance/managed_service_instance_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController include VCAP::CloudController::BrokerApiHelper context 'when updating a service instance' do - let(:space) { Space.make } + let(:space) { create(:space) } context 'when service plan is not public and not active' do - let(:service) { Service.make(plan_updateable: true) } - let(:service_plan) { ServicePlan.make(public: false, active: false, service: service) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service) { create(:service, plan_updateable: true) } + let(:service_plan) { create(:service_plan, public: false, active: false, service: service) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } before do @broker_url = service_instance.service_broker.broker_url @@ -44,7 +44,7 @@ module VCAP::CloudController end context 'when the user is SpaceDeveloper' do - let(:user) { User.make } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -95,7 +95,7 @@ module VCAP::CloudController end context 'when updating to a plan that is not visible' do - let(:new_service_plan) { ServicePlan.make(public: false, active: false, service: service_instance.service) } + let(:new_service_plan) { create(:service_plan, public: false, active: false, service: service_instance.service) } let(:body) do { service_plan_guid: new_service_plan.guid diff --git a/spec/api/documentation/app_bits_api_spec.rb b/spec/api/documentation/app_bits_api_spec.rb index 87caa7e5c67..d6a5f479e8e 100644 --- a/spec/api/documentation/app_bits_api_spec.rb +++ b/spec/api/documentation/app_bits_api_spec.rb @@ -18,7 +18,7 @@ } end - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } authenticated_request diff --git a/spec/api/documentation/app_usage_event_api_spec.rb b/spec/api/documentation/app_usage_event_api_spec.rb index 4c7ff0c07a9..07ae25f2658 100644 --- a/spec/api/documentation/app_usage_event_api_spec.rb +++ b/spec/api/documentation/app_usage_event_api_spec.rb @@ -6,9 +6,9 @@ authenticated_request let(:guid) { VCAP::CloudController::AppUsageEvent.first.guid } - let!(:event1) { VCAP::CloudController::AppUsageEvent.make } - let!(:event2) { VCAP::CloudController::AppUsageEvent.make } - let!(:event3) { VCAP::CloudController::AppUsageEvent.make } + let!(:event1) { FactoryBot.create(:app_usage_event) } + let!(:event2) { FactoryBot.create(:app_usage_event) } + let!(:event3) { FactoryBot.create(:app_usage_event) } describe 'Standard endpoints' do standard_model_get :app_usage_event diff --git a/spec/api/documentation/apps_api_spec.rb b/spec/api/documentation/apps_api_spec.rb index 5176e0cee8d..efc4d793237 100644 --- a/spec/api/documentation/apps_api_spec.rb +++ b/spec/api/documentation/apps_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Apps', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:admin_buildpack) { VCAP::CloudController::Buildpack.make } + let(:admin_buildpack) { FactoryBot.create(:buildpack) } let!(:processes) { 3.times { VCAP::CloudController::ProcessModelFactory.make } } let(:process) { VCAP::CloudController::ProcessModel.first } let(:guid) { process.guid } @@ -138,7 +138,7 @@ def after_standard_model_delete(guid) post '/v2/apps/' do include_context 'fields', required: true example 'Creating an App' do - space_guid = VCAP::CloudController::Space.make.guid + space_guid = create(:space).guid ports = [1024, 2000] client.post '/v2/apps', Oj.dump(required_fields.merge(space_guid: space_guid, diego: true, ports: ports)), headers expect(status).to eq(201) @@ -150,7 +150,7 @@ def after_standard_model_delete(guid) end example 'Creating a Docker App' do - space_guid = VCAP::CloudController::Space.make.guid + space_guid = create(:space).guid data = required_fields.merge(space_guid: space_guid, name: 'docker_app', docker_image: 'cloudfoundry/diego-docker-app', diego: true) client.post '/v2/apps', Oj.dump(data), headers @@ -182,12 +182,12 @@ def after_standard_model_delete(guid) include_context 'guid_parameter' describe 'Service Bindings' do - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: process.space) } - let(:associated_service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: process.space) } + let!(:service_instance) { create(:managed_service_instance, space: process.space) } + let(:associated_service_instance) { create(:managed_service_instance, space: process.space) } - let(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance:) } + let(:service_binding) { create(:service_binding, service_instance:) } let(:service_binding_guid) { service_binding.guid } - let!(:associated_service_binding) { VCAP::CloudController::ServiceBinding.make(app: process.app, service_instance: associated_service_instance) } + let!(:associated_service_binding) { create(:service_binding, app: process.app, service_instance: associated_service_instance) } let(:associated_service_binding_guid) { associated_service_binding.guid } before do @@ -218,12 +218,12 @@ def after_standard_model_delete(guid) describe 'Routes' do before do - VCAP::CloudController::RouteMappingModel.make(app: process.app, route: associated_route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: associated_route, process_type: process.type) end - let!(:route) { VCAP::CloudController::Route.make(space: process.space) } + let!(:route) { create(:route, space: process.space) } let(:route_guid) { route.guid } - let(:associated_route) { VCAP::CloudController::Route.make(space: process.space) } + let(:associated_route) { create(:route, space: process.space) } let(:associated_route_guid) { associated_route.guid } standard_model_list :route, VCAP::CloudController::RoutesController, outer_model: :app, exclude_parameters: ['organization_guid'] diff --git a/spec/api/documentation/apps_restage_api_spec.rb b/spec/api/documentation/apps_restage_api_spec.rb index 2e599f5bdf5..bf9532bd913 100644 --- a/spec/api/documentation/apps_restage_api_spec.rb +++ b/spec/api/documentation/apps_restage_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Apps', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } let(:process) { VCAP::CloudController::ProcessModelFactory.make space: } let(:user) { make_developer_for_space(process.space) } let(:stager) { instance_double(VCAP::CloudController::Diego::Stager, stage: nil) } @@ -11,7 +11,7 @@ before do allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:validate_process) allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:stager_for_build).and_return(stager) - VCAP::CloudController::Buildpack.make + FactoryBot.create(:buildpack) end authenticated_request diff --git a/spec/api/documentation/buildpacks_api_spec.rb b/spec/api/documentation/buildpacks_api_spec.rb index 35f18b9e047..b3d34f64bd5 100644 --- a/spec/api/documentation/buildpacks_api_spec.rb +++ b/spec/api/documentation/buildpacks_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Buildpacks', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:buildpacks) { (1..3).map { |i| VCAP::CloudController::Buildpack.make(name: "name_#{i}", position: i) } } + let!(:buildpacks) { (1..3).map { |i| FactoryBot.create(:buildpack, name: "name_#{i}", position: i) } } let(:guid) { buildpacks.first.guid } authenticated_request diff --git a/spec/api/documentation/domains_api_spec.rb b/spec/api/documentation/domains_api_spec.rb index 7a5ffa9173a..18100a1f7be 100644 --- a/spec/api/documentation/domains_api_spec.rb +++ b/spec/api/documentation/domains_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Domains (deprecated)', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:domain) { VCAP::CloudController::SharedDomain.make } + let!(:domain) { FactoryBot.create(:shared_domain) } let(:guid) { domain.guid } authenticated_request @@ -33,7 +33,7 @@ context 'Creating a domain owned by an organization' do example 'Create a Domain owned by the given Organization' do - org_guid = VCAP::CloudController::Organization.make.guid + org_guid = create(:organization).guid payload = Oj.dump( { name: 'exmaple.com', @@ -59,10 +59,10 @@ field :guid, 'The guid of the Domain', required: true describe 'Spaces' do - let!(:domain) { VCAP::CloudController::PrivateDomain.make } + let!(:domain) { create(:private_domain) } before do - VCAP::CloudController::Space.make(organization: domain.owning_organization) + create(:space, organization: domain.owning_organization) end standard_model_list :space, VCAP::CloudController::SpacesController, outer_model: :domain diff --git a/spec/api/documentation/events_api_spec.rb b/spec/api/documentation/events_api_spec.rb index f3a6cc015d1..e016c0e23a6 100644 --- a/spec/api/documentation/events_api_spec.rb +++ b/spec/api/documentation/events_api_spec.rb @@ -96,9 +96,7 @@ authenticated_request before do - 3.times do - VCAP::CloudController::Event.make - end + FactoryBot.create_list(:event, 3) end let(:guid) { VCAP::CloudController::Event.first.guid } @@ -123,20 +121,20 @@ get '/v2/events' do standard_list_parameters VCAP::CloudController::EventsController - let(:test_app) { VCAP::CloudController::ProcessModel.make } - let(:test_v3app) { VCAP::CloudController::AppModel.make } - let(:test_assignee) { VCAP::CloudController::User.make } - let(:test_user) { VCAP::CloudController::User.make } + let(:test_app) { FactoryBot.create(:process) } + let(:test_v3app) { FactoryBot.create(:app_model) } + let(:test_assignee) { FactoryBot.create(:user) } + let(:test_user) { FactoryBot.create(:user) } let(:test_user_email) { 'user@example.com' } - let(:test_space) { VCAP::CloudController::Space.make } - let(:test_route) { VCAP::CloudController::Route.make } - let(:test_organization) { VCAP::CloudController::Organization.make } + let(:test_space) { FactoryBot.create(:space) } + let(:test_route) { FactoryBot.create(:route) } + let(:test_organization) { FactoryBot.create(:organization) } - let(:test_broker) { VCAP::CloudController::ServiceBroker.make } - let(:test_service) { VCAP::CloudController::Service.make(service_broker: test_broker) } - let(:test_plan) { VCAP::CloudController::ServicePlan.make(service: test_service, public: false) } + let(:test_broker) { FactoryBot.create(:service_broker) } + let(:test_service) { FactoryBot.create(:service, service_broker: test_broker) } + let(:test_plan) { FactoryBot.create(:service_plan, service: test_service, public: false) } let(:test_plan_visibility) do - VCAP::CloudController::ServicePlanVisibility.make(organization_guid: test_organization.guid, service_plan_guid: test_plan.guid) + FactoryBot.create(:service_plan_visibility, organization_guid: test_organization.guid, service_plan_guid: test_plan.guid) end let(:app_request) do @@ -563,7 +561,7 @@ VCAP::CloudController::ServiceDashboardClient.new( uaa_id: client_attrs['id'], - service_broker: VCAP::CloudController::ServiceBroker.make + service_broker: FactoryBot.create(:service_broker) ).save service_event_repository.record_service_dashboard_client_event(:create, client_attrs, test_broker) @@ -592,7 +590,7 @@ VCAP::CloudController::ServiceDashboardClient.new( uaa_id: client_attrs['id'], - service_broker: VCAP::CloudController::ServiceBroker.make + service_broker: FactoryBot.create(:service_broker) ).save service_event_repository.record_service_dashboard_client_event(:delete, client_attrs, test_broker) @@ -860,7 +858,7 @@ auth_username: 'panda', auth_password: 'password' } - broker = VCAP::CloudController::ServiceBroker.make(params) + broker = FactoryBot.create(:service_broker, params) service_event_repository.record_broker_event(:create, broker, params) client.get '/v2/events?q=type:audit.service_broker.create', {}, headers @@ -889,7 +887,7 @@ broker_url: 'http://www.pancakes.com', auth_password: 'password' } - broker = VCAP::CloudController::ServiceBroker.make + broker = FactoryBot.create(:service_broker) service_event_repository.record_broker_event(:update, broker, params) client.get '/v2/events?q=type:audit.service_broker.update', {}, headers @@ -912,7 +910,7 @@ end example 'List Service Broker Delete Events' do - broker = VCAP::CloudController::ServiceBroker.make + broker = FactoryBot.create(:service_broker) service_event_repository.record_broker_event(:delete, broker, {}) client.get '/v2/events?q=type:audit.service_broker.delete', {}, headers @@ -930,7 +928,7 @@ end example 'List Service Instance Create Events' do - instance = VCAP::CloudController::ManagedServiceInstance.make + instance = FactoryBot.create(:managed_service_instance) service_event_repository.record_service_instance_event(:create, instance, { 'name' => instance.name, 'service_plan_guid' => instance.service_plan.guid, @@ -958,7 +956,7 @@ end example 'List Service Instance Update Events' do - instance = VCAP::CloudController::ManagedServiceInstance.make + instance = FactoryBot.create(:managed_service_instance) service_event_repository.record_service_instance_event(:update, instance, { 'service_plan_guid' => instance.service_plan.guid }) @@ -982,7 +980,7 @@ end example 'List Service Instance Delete Events' do - instance = VCAP::CloudController::ManagedServiceInstance.make + instance = FactoryBot.create(:managed_service_instance) service_event_repository.record_service_instance_event(:delete, instance, {}) client.get '/v2/events?q=type:audit.service_instance.delete', {}, headers @@ -1002,9 +1000,9 @@ end example 'List Service Instance Bind Route Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) - route = VCAP::CloudController::Route.make(space:) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) + route = FactoryBot.create(:route, space:) service_event_repository.record_service_instance_event(:bind_route, instance, { route_guid: route.guid }) @@ -1027,9 +1025,9 @@ end example 'List Service Instance Unbind Route Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) - route = VCAP::CloudController::Route.make(space:) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) + route = FactoryBot.create(:route, space:) service_event_repository.record_service_instance_event(:unbind_route, instance, { route_guid: route.guid }) @@ -1052,7 +1050,7 @@ end example 'List User Provided Service Instance Create Events' do - instance = VCAP::CloudController::UserProvidedServiceInstance.make + instance = FactoryBot.create(:user_provided_service_instance) service_event_repository.record_user_provided_service_instance_event(:create, instance, { 'name' => instance.name, 'space_guid' => instance.space_guid @@ -1078,7 +1076,7 @@ end example 'List User Provided Service Instance Update Events' do - instance = VCAP::CloudController::UserProvidedServiceInstance.make + instance = FactoryBot.create(:user_provided_service_instance) service_event_repository.record_user_provided_service_instance_event(:update, instance, { 'credentials' => { 'username' => 'myUser' } }) @@ -1102,7 +1100,7 @@ end example 'List User Provided Service Instance Delete Events' do - instance = VCAP::CloudController::UserProvidedServiceInstance.make + instance = FactoryBot.create(:user_provided_service_instance) service_event_repository.record_user_provided_service_instance_event(:delete, instance, {}) client.get '/v2/events?q=type:audit.user_provided_service_instance.delete', {}, headers @@ -1122,10 +1120,10 @@ end example 'List Service Binding Create Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) process = VCAP::CloudController::ProcessModelFactory.make(space:) - service_binding = VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: process.app) + service_binding = FactoryBot.create(:service_binding, service_instance: instance, app: process.app) VCAP::CloudController::Repositories::ServiceBindingEventRepository.record_create(service_binding, user_audit_info, { foo: 'bar' }) @@ -1148,10 +1146,10 @@ end example 'List Service Binding Delete Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) process = VCAP::CloudController::ProcessModelFactory.make(space:) - service_binding = VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: process.app) + service_binding = FactoryBot.create(:service_binding, service_instance: instance, app: process.app) VCAP::CloudController::Repositories::ServiceBindingEventRepository.record_delete(service_binding, user_audit_info) @@ -1175,9 +1173,9 @@ end example 'List Service Key Create Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) - service_key = VCAP::CloudController::ServiceKey.make(service_instance: instance) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) + service_key = FactoryBot.create(:service_key, service_instance: instance) service_event_repository.record_service_key_event(:create, service_key) @@ -1201,9 +1199,9 @@ end example 'List Service Key Delete Events' do - space = VCAP::CloudController::Space.make - instance = VCAP::CloudController::ManagedServiceInstance.make(space:) - service_key = VCAP::CloudController::ServiceKey.make(service_instance: instance) + space = FactoryBot.create(:space) + instance = FactoryBot.create(:managed_service_instance, space:) + service_key = FactoryBot.create(:service_key, service_instance: instance) service_event_repository.record_service_key_event(:delete, service_key) diff --git a/spec/api/documentation/organizations_api_spec.rb b/spec/api/documentation/organizations_api_spec.rb index 2b04ac259a7..39cec07fd89 100644 --- a/spec/api/documentation/organizations_api_spec.rb +++ b/spec/api/documentation/organizations_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Organizations', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:organization) { VCAP::CloudController::Organization.make } - let(:quota_definition) { VCAP::CloudController::QuotaDefinition.make } + let(:organization) { FactoryBot.create(:organization) } + let(:quota_definition) { FactoryBot.create(:quota_definition) } let(:guid) { organization.guid } authenticated_request @@ -56,8 +56,8 @@ describe 'Nested endpoints' do include_context 'guid_parameter' - let(:everything_user) { VCAP::CloudController::User.make } - let(:user_user) { VCAP::CloudController::User.make } + let(:everything_user) { create(:user) } + let(:user_user) { create(:user) } let(:username_map) do { everything_user.guid => 'everything@example.com', @@ -93,7 +93,7 @@ describe 'Spaces' do before do - VCAP::CloudController::Space.make(organization:) + create(:space, organization:) end standard_model_list :space, VCAP::CloudController::SpacesController, outer_model: :organization @@ -101,7 +101,7 @@ describe 'Space Quota Definitions' do before do - VCAP::CloudController::SpaceQuotaDefinition.make(organization:) + create(:space_quota_definition, organization:) end standard_model_list :space_quota_definition, VCAP::CloudController::SpaceQuotaDefinitionsController, outer_model: :organization @@ -113,7 +113,7 @@ describe 'Private Domains' do before do - VCAP::CloudController::PrivateDomain.make(owning_organization: organization) + create(:private_domain, owning_organization: organization) end standard_model_list :private_domain, VCAP::CloudController::PrivateDomainsController, outer_model: :organization @@ -126,9 +126,9 @@ parameter :private_domain_guid, 'The guid of the private domain' - let!(:associated_private_domain) { VCAP::CloudController::PrivateDomain.make } + let!(:associated_private_domain) { create(:private_domain) } let(:associated_private_domain_guid) { associated_private_domain.guid } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make } + let(:private_domain) { create(:private_domain) } let(:private_domain_guid) { private_domain.guid } nested_model_associate :private_domain, :organization @@ -141,11 +141,11 @@ allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_user.guid => 'user@example.com' }) end - let!(:associated_user) { VCAP::CloudController::User.make } + let!(:associated_user) { create(:user) } context 'by user guid' do let(:associated_user_guid) { associated_user.guid } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_guid) { user.guid } standard_model_list :user, VCAP::CloudController::UsersController, outer_model: :organization @@ -194,11 +194,11 @@ make_manager_for_org(organization) end - let!(:associated_manager) { VCAP::CloudController::User.make } + let!(:associated_manager) { create(:user) } let(:associated_manager_guid) { associated_manager.guid } context 'by user guid' do - let(:manager) { VCAP::CloudController::User.make } + let(:manager) { create(:user) } let(:manager_guid) { manager.guid } standard_model_list :user, VCAP::CloudController::UsersController, outer_model: :organization, path: :managers @@ -246,11 +246,11 @@ allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_billing_manager.guid => 'billing_manager@example.com' }) end - let!(:associated_billing_manager) { VCAP::CloudController::User.make } + let!(:associated_billing_manager) { create(:user) } let(:associated_billing_manager_guid) { associated_billing_manager.guid } context 'by user guid' do - let(:billing_manager) { VCAP::CloudController::User.make } + let(:billing_manager) { create(:user) } let(:billing_manager_guid) { billing_manager.guid } standard_model_list :user, VCAP::CloudController::UsersController, outer_model: :organization, path: :billing_managers @@ -298,11 +298,11 @@ allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_auditor.guid => 'auditor@example.com' }) end - let!(:associated_auditor) { VCAP::CloudController::User.make } + let!(:associated_auditor) { create(:user) } let(:associated_auditor_guid) { associated_auditor.guid } context 'by user guid' do - let(:auditor) { VCAP::CloudController::User.make } + let(:auditor) { create(:user) } let(:auditor_guid) { auditor.guid } standard_model_list :user, VCAP::CloudController::UsersController, outer_model: :organization, path: :auditors @@ -346,10 +346,10 @@ describe 'Services' do before do - some_service = VCAP::CloudController::Service.make(active: true) - VCAP::CloudController::ServicePlan.make(service: some_service, public: false) - space = VCAP::CloudController::Space.make(organization:) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: some_service.service_plans.first, organization: space.organization) + some_service = create(:service, active: true) + create(:service_plan, service: some_service, public: false) + space = create(:space, organization:) + create(:service_plan_visibility, service_plan: some_service.service_plans.first, organization: space.organization) end standard_model_list :service, VCAP::CloudController::ServicesController, outer_model: :organization, path: :service, exclude_parameters: ['provider'] @@ -372,7 +372,7 @@ explanation "This endpoint returns a count of started app instances under an organization. Note that crashing apps are included in this count." - space = VCAP::CloudController::Space.make(organization:) + space = create(:space, organization:) VCAP::CloudController::ProcessModelFactory.make(space: space, state: 'STARTED', instances: 3) client.get "/v2/organizations/#{guid}/instance_usage", {}, headers @@ -385,7 +385,7 @@ describe 'Isolation Segments (Experimental)' do delete '/v2/organizations/:guid/default_isolation_segment' do - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } before do diff --git a/spec/api/documentation/private_domains_api_spec.rb b/spec/api/documentation/private_domains_api_spec.rb index 59a165f4047..1b357df65f0 100644 --- a/spec/api/documentation/private_domains_api_spec.rb +++ b/spec/api/documentation/private_domains_api_spec.rb @@ -4,7 +4,7 @@ RSpec.resource 'Private Domains', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } let(:guid) { VCAP::CloudController::PrivateDomain.first.guid } - let!(:domains) { 3.times { VCAP::CloudController::PrivateDomain.make } } + let!(:domains) { FactoryBot.create_list(:private_domain, 3) } authenticated_request @@ -25,7 +25,7 @@ post '/v2/private_domains' do include_context 'updatable_fields' example 'Create a Private Domain owned by the given Organization' do - org_guid = VCAP::CloudController::Organization.make.guid + org_guid = create(:organization).guid payload = Oj.dump( { name: 'exmaple.com', @@ -51,7 +51,7 @@ let(:q) { 'name:my-domain.com' } before do - VCAP::CloudController::PrivateDomain.make name: 'my-domain.com' + create(:private_domain, name: 'my-domain.com') end example 'Filtering Private Domains by name' do @@ -79,7 +79,7 @@ describe 'Shared Organizations' do before do pd = VCAP::CloudController::PrivateDomain[guid:] - org = VCAP::CloudController::Organization.make + org = create(:organization) org.add_private_domain(pd) end diff --git a/spec/api/documentation/quota_definitions_api_spec.rb b/spec/api/documentation/quota_definitions_api_spec.rb index 75874bc3e15..d285c0f42e8 100644 --- a/spec/api/documentation/quota_definitions_api_spec.rb +++ b/spec/api/documentation/quota_definitions_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Organization Quota Definitions', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:guid) { VCAP::CloudController::QuotaDefinition.make.guid } + let(:guid) { FactoryBot.create(:quota_definition).guid } authenticated_request diff --git a/spec/api/documentation/routes_api_spec.rb b/spec/api/documentation/routes_api_spec.rb index f36964be90f..24fda7b2cb3 100644 --- a/spec/api/documentation/routes_api_spec.rb +++ b/spec/api/documentation/routes_api_spec.rb @@ -3,12 +3,12 @@ RSpec.resource 'Routes', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make } - let(:space) { VCAP::CloudController::Space.make(organization: space_quota.organization, space_quota_definition: space_quota) } - let(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'tcp-group') } + let(:space_quota) { FactoryBot.create(:space_quota_definition) } + let(:space) { FactoryBot.create(:space, organization: space_quota.organization, space_quota_definition: space_quota) } + let(:domain) { FactoryBot.create(:shared_domain, router_group_guid: 'tcp-group') } let(:route_path) { '/apps/v1/path' } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(:routing, space:) } - let(:route) { VCAP::CloudController::Route.make(domain:, space:) } + let(:service_instance) { FactoryBot.create(:managed_service_instance, :routing, space:) } + let(:route) { FactoryBot.create(:route, domain:, space:) } let(:guid) { route.guid } let(:routing_api_client) { double('routing_api_client', enabled?: true) } @@ -50,7 +50,7 @@ context 'with a route binding' do before do - route_binding = VCAP::CloudController::RouteBinding.make(service_instance:, route:) + route_binding = create(:route_binding, service_instance:, route:) stub_unbind(route_binding) end @@ -121,7 +121,7 @@ def after_standard_model_delete(guid) let(:app_guid) { process.guid } before do - VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route) + create(:route_mapping_model, app: process.app, process_type: process.type, route: route) end parameter :app_guid, 'The guid of the app' @@ -133,7 +133,7 @@ def after_standard_model_delete(guid) end describe 'Reserved Routes' do - let(:route) { VCAP::CloudController::Route.make(domain: domain, port: 61_000, host: '', space: space) } + let(:route) { create(:route, domain: domain, port: 61_000, host: '', space: space) } get '/v2/routes/reserved/domain/:domain_guid?host=:host&path=:path&port=:port' do request_parameter :host, 'The host portion of the route. Required for shared-domains.', required: false diff --git a/spec/api/documentation/security_group_running_defaults_api_spec.rb b/spec/api/documentation/security_group_running_defaults_api_spec.rb index 81ce0663439..c1efe2c3816 100644 --- a/spec/api/documentation/security_group_running_defaults_api_spec.rb +++ b/spec/api/documentation/security_group_running_defaults_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Security Group Running Defaults', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:sec_group) { VCAP::CloudController::SecurityGroup.make } - let!(:running_default_sec_group) { VCAP::CloudController::SecurityGroup.make(running_default: true) } + let!(:sec_group) { FactoryBot.create(:security_group) } + let!(:running_default_sec_group) { FactoryBot.create(:security_group, running_default: true) } authenticated_request diff --git a/spec/api/documentation/security_group_staging_defaults_api_spec.rb b/spec/api/documentation/security_group_staging_defaults_api_spec.rb index a56895eeb36..056d58b02b4 100644 --- a/spec/api/documentation/security_group_staging_defaults_api_spec.rb +++ b/spec/api/documentation/security_group_staging_defaults_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Security Group Staging Defaults', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:sec_group) { VCAP::CloudController::SecurityGroup.make } - let!(:staging_default_sec_group) { VCAP::CloudController::SecurityGroup.make(staging_default: true) } + let!(:sec_group) { FactoryBot.create(:security_group) } + let!(:staging_default_sec_group) { FactoryBot.create(:security_group, staging_default: true) } authenticated_request diff --git a/spec/api/documentation/security_groups_api_spec.rb b/spec/api/documentation/security_groups_api_spec.rb index 12f7e495cb3..365b0df7d3c 100644 --- a/spec/api/documentation/security_groups_api_spec.rb +++ b/spec/api/documentation/security_groups_api_spec.rb @@ -6,7 +6,7 @@ let(:security_group) { VCAP::CloudController::SecurityGroup.first } let(:guid) { security_group.guid } before do - 3.times { VCAP::CloudController::SecurityGroup.make } + FactoryBot.create_list(:security_group, 3) end authenticated_request @@ -72,9 +72,9 @@ security_group.add_space associated_space end - let!(:associated_space) { VCAP::CloudController::Space.make } + let!(:associated_space) { create(:space) } let(:associated_space_guid) { associated_space.guid } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:space_guid) { space.guid } parameter :space_guid, 'The guid of the space' diff --git a/spec/api/documentation/service_bindings_api_spec.rb b/spec/api/documentation/service_bindings_api_spec.rb index 5fbc4fe7780..70fbd8359a5 100644 --- a/spec/api/documentation/service_bindings_api_spec.rb +++ b/spec/api/documentation/service_bindings_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Service Bindings', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make } - let!(:v2_app) { VCAP::CloudController::ProcessModel.make(app: service_binding.app, type: 'web') } + let!(:service_binding) { FactoryBot.create(:service_binding) } + let!(:v2_app) { FactoryBot.create(:process, app: service_binding.app, type: 'web') } let(:guid) { service_binding.guid } authenticated_request @@ -34,8 +34,8 @@ field :parameters, 'Arbitrary parameters to pass along to the service broker. Must be a JSON object', required: false example 'Create a Service Binding' do - space = VCAP::CloudController::Space.make - service_instance_guid = VCAP::CloudController::ServiceInstance.make(space:).guid + space = FactoryBot.create(:space) + service_instance_guid = FactoryBot.create(:service_instance, space:).guid process_guid = VCAP::CloudController::ProcessModelFactory.make(space:).guid request_json = Oj.dump({ service_instance_guid: service_instance_guid, app_guid: process_guid, parameters: { the_service_broker: 'wants this object' } }) diff --git a/spec/api/documentation/service_brokers_api_spec.rb b/spec/api/documentation/service_brokers_api_spec.rb index 396924cd238..600f49c98e5 100644 --- a/spec/api/documentation/service_brokers_api_spec.rb +++ b/spec/api/documentation/service_brokers_api_spec.rb @@ -3,10 +3,10 @@ RSpec.resource 'Service Brokers', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:service_brokers) { 3.times { VCAP::CloudController::ServiceBroker.make } } + let!(:service_brokers) { FactoryBot.create_list(:service_broker, 3) } let(:service_broker) { VCAP::CloudController::ServiceBroker.first } let(:guid) { service_broker.guid } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } let(:broker_catalog) do { 'services' => [ diff --git a/spec/api/documentation/service_instances_api_spec.rb b/spec/api/documentation/service_instances_api_spec.rb index a683a0809b0..2ed812ed79b 100644 --- a/spec/api/documentation/service_instances_api_spec.rb +++ b/spec/api/documentation/service_instances_api_spec.rb @@ -5,17 +5,15 @@ RSpec.resource 'Service Instances', type: %i[api legacy_api] do tags = %w[accounting mongodb] let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker:) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, public: true) } + let(:service_broker) { FactoryBot.create(:service_broker) } + let(:service) { FactoryBot.create(:service, service_broker:) } + let(:service_plan) { FactoryBot.create(:service_plan, service: service, public: true) } let!(:service_instance) do - service_instance = VCAP::CloudController::ManagedServiceInstance.make( - service_plan:, tags: - ) - service_instance.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make( - state: 'succeeded', - description: 'service broker-provided description' - ) + service_instance = FactoryBot.create(:managed_service_instance, + service_plan:, tags:) + service_instance.service_instance_operation = FactoryBot.create(:service_instance_operation, + state: 'succeeded', + description: 'service broker-provided description') service_instance end let(:guid) { service_instance.guid } @@ -93,7 +91,7 @@ parameter :accepts_incomplete, param_description, valid_values: [true, false] example 'Creating a Service Instance' do - space_guid = VCAP::CloudController::Space.make.guid + space_guid = create(:space).guid request_hash = { space_guid: space_guid, name: 'my-service-instance', @@ -110,11 +108,11 @@ end put '/v2/service_instances/:guid' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: service_broker, plan_updateable: true) } - let(:new_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:old_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan: old_plan) } + let(:service_broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: service_broker, plan_updateable: true) } + let(:new_plan) { create(:service_plan, service:) } + let(:old_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, service_plan: old_plan) } field :name, 'The new name for the service instance', required: false, example_values: ['my-new-service-instance'] field :service_plan_guid, 'The new plan guid for the service instance', required: false, example_values: ['6c4bd80f-4593-41d1-a2c9-b20cb65ec76e'] @@ -174,7 +172,7 @@ describe 'Nested endpoints' do describe 'Service Bindings' do before do - VCAP::CloudController::ServiceBinding.make(service_instance:) + create(:service_binding, service_instance:) end standard_model_list :service_binding, @@ -184,9 +182,9 @@ end describe 'Routes' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(:routing) } - let(:route) { VCAP::CloudController::Route.make(space: service_instance.space) } - let!(:route_binding) { VCAP::CloudController::RouteBinding.make(service_instance:) } + let(:service_instance) { create(:managed_service_instance, :routing) } + let(:route) { create(:route, space: service_instance.space) } + let!(:route_binding) { create(:route_binding, service_instance:) } put '/v2/service_instances/:service_instance_guid/routes/:route_guid' do before do # rubocop:disable RSpec/ScatteredSetup @@ -213,7 +211,7 @@ delete '/v2/service_instances/:service_instance_guid/routes/:route_guid' do before do # rubocop:disable RSpec/ScatteredSetup - binding = VCAP::CloudController::RouteBinding.make(service_instance:, route:) + binding = create(:route_binding, service_instance:, route:) stub_unbind(binding) end @@ -230,7 +228,7 @@ describe 'Service Keys' do before do - VCAP::CloudController::ServiceKey.make(name: 'a-service-key', service_instance: service_instance) + create(:service_key, name: 'a-service-key', service_instance: service_instance) end standard_model_list :service_key, VCAP::CloudController::ServiceInstancesController, outer_model: :service_instance diff --git a/spec/api/documentation/service_keys_api_spec.rb b/spec/api/documentation/service_keys_api_spec.rb index 40db54c1764..69dc627b141 100644 --- a/spec/api/documentation/service_keys_api_spec.rb +++ b/spec/api/documentation/service_keys_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Service Keys', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } - let(:service_key) { VCAP::CloudController::ServiceKey.make } + let(:service_instance) { FactoryBot.create(:managed_service_instance) } + let(:service_key) { FactoryBot.create(:service_key) } let(:guid) { service_key.guid } authenticated_request diff --git a/spec/api/documentation/service_plan_visibilities_api_spec.rb b/spec/api/documentation/service_plan_visibilities_api_spec.rb index 9d2cb5ea905..07cf35220dd 100644 --- a/spec/api/documentation/service_plan_visibilities_api_spec.rb +++ b/spec/api/documentation/service_plan_visibilities_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Service Plan Visibilities', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:service_plan_visibility) { VCAP::CloudController::ServicePlanVisibility.make } + let!(:service_plan_visibility) { FactoryBot.create(:service_plan_visibility) } let(:guid) { service_plan_visibility.guid } authenticated_request @@ -16,8 +16,8 @@ field :organization_guid, 'The guid of the organization the plan will be visible to', required: true example 'Creating a Service Plan Visibility' do - org_guid = VCAP::CloudController::Organization.make.guid - service_plan_guid = VCAP::CloudController::ServicePlan.make(public: false).guid + org_guid = FactoryBot.create(:organization).guid + service_plan_guid = FactoryBot.create(:service_plan, public: false).guid request_json = Oj.dump({ service_plan_guid: service_plan_guid, organization_guid: org_guid }) client.post '/v2/service_plan_visibilities', request_json, headers @@ -30,9 +30,9 @@ field :organization_guid, 'The guid of the organization the plan will be visible to', required: true example 'Updating a Service Plan Visibility' do - service_plan_visibility_guid = VCAP::CloudController::ServicePlanVisibility.make.guid - org_guid = VCAP::CloudController::Organization.make.guid - service_plan_guid = VCAP::CloudController::ServicePlan.make(public: false).guid + service_plan_visibility_guid = FactoryBot.create(:service_plan_visibility).guid + org_guid = FactoryBot.create(:organization).guid + service_plan_guid = FactoryBot.create(:service_plan, public: false).guid request_json = Oj.dump({ service_plan_guid: service_plan_guid, organization_guid: org_guid }) client.put "/v2/service_plan_visibilities/#{service_plan_visibility_guid}", request_json, headers diff --git a/spec/api/documentation/service_plans_api_spec.rb b/spec/api/documentation/service_plans_api_spec.rb index 9de71966b89..b85311d90b1 100644 --- a/spec/api/documentation/service_plans_api_spec.rb +++ b/spec/api/documentation/service_plans_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Service Plans', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make } + let!(:service_plan) { FactoryBot.create(:service_plan) } let(:guid) { service_plan.guid } authenticated_request @@ -32,7 +32,7 @@ describe 'Service Instances' do before do - VCAP::CloudController::ManagedServiceInstance.make(service_plan:) + create(:managed_service_instance, service_plan:) end standard_model_list :managed_service_instance, diff --git a/spec/api/documentation/service_usage_events_api_spec.rb b/spec/api/documentation/service_usage_events_api_spec.rb index 4d3e5dc3cda..c8526942f8b 100644 --- a/spec/api/documentation/service_usage_events_api_spec.rb +++ b/spec/api/documentation/service_usage_events_api_spec.rb @@ -5,9 +5,9 @@ let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } authenticated_request let(:guid) { VCAP::CloudController::ServiceUsageEvent.first.guid } - let!(:event1) { VCAP::CloudController::ServiceUsageEvent.make } - let!(:event2) { VCAP::CloudController::ServiceUsageEvent.make } - let!(:event3) { VCAP::CloudController::ServiceUsageEvent.make } + let!(:event1) { FactoryBot.create(:service_usage_event) } + let!(:event2) { FactoryBot.create(:service_usage_event) } + let!(:event3) { FactoryBot.create(:service_usage_event) } standard_model_get :service_usage_event diff --git a/spec/api/documentation/services_api_spec.rb b/spec/api/documentation/services_api_spec.rb index f8afbc86321..5c9fcda14b0 100644 --- a/spec/api/documentation/services_api_spec.rb +++ b/spec/api/documentation/services_api_spec.rb @@ -3,8 +3,8 @@ RSpec.resource 'Services', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } - let!(:service) { VCAP::CloudController::Service.make(service_broker:) } + let(:service_broker) { FactoryBot.create(:service_broker) } + let!(:service) { FactoryBot.create(:service, service_broker:) } let(:guid) { service.guid } authenticated_request @@ -69,7 +69,7 @@ describe 'Service Plans' do before do - VCAP::CloudController::ServicePlan.make(service:) + create(:service_plan, service:) end expected_attributes = VCAP::CloudController::ServicePlan.new.export_attrs - [:create_instance_schema] - [:update_instance_schema] - [:create_binding_schema] + [:schemas] diff --git a/spec/api/documentation/shared_domain_api_spec.rb b/spec/api/documentation/shared_domain_api_spec.rb index d871d565204..90ea81c133f 100644 --- a/spec/api/documentation/shared_domain_api_spec.rb +++ b/spec/api/documentation/shared_domain_api_spec.rb @@ -4,8 +4,8 @@ RSpec.resource 'Shared Domains', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } let(:guid) { VCAP::CloudController::SharedDomain.first.guid } - let!(:domains) { 3.times { VCAP::CloudController::SharedDomain.make } } - let!(:tcp_domains) { VCAP::CloudController::SharedDomain.make router_group_guid: 'my-random-guid' } + let!(:domains) { FactoryBot.create_list(:shared_domain, 3) } + let!(:tcp_domains) { FactoryBot.create(:shared_domain, router_group_guid: 'my-random-guid') } authenticated_request @@ -57,7 +57,7 @@ let(:q) { 'name:shared-domain.com' } before do - VCAP::CloudController::SharedDomain.make name: 'shared-domain.com', router_group_guid: 'my-random-guid' + create(:shared_domain, name: 'shared-domain.com', router_group_guid: 'my-random-guid') end example 'Filtering Shared Domains by name' do diff --git a/spec/api/documentation/space_quota_definitions_api_spec.rb b/spec/api/documentation/space_quota_definitions_api_spec.rb index c4b4ff99d11..186328f94c2 100644 --- a/spec/api/documentation/space_quota_definitions_api_spec.rb +++ b/spec/api/documentation/space_quota_definitions_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Space Quota Definitions', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:space_quota_definition) { VCAP::CloudController::SpaceQuotaDefinition.make } + let(:space_quota_definition) { FactoryBot.create(:space_quota_definition) } let!(:guid) { space_quota_definition.guid } authenticated_request @@ -46,7 +46,7 @@ post '/v2/space_quota_definitions' do include_context 'updatable_fields', required: true example 'Creating a Space Quota Definition' do - organization_guid = VCAP::CloudController::Organization.make.guid + organization_guid = FactoryBot.create(:organization).guid client.post '/v2/space_quota_definitions', Oj.dump( required_fields.merge(organization_guid: organization_guid, total_reserved_route_ports: 5, @@ -78,7 +78,7 @@ include_context 'guid_parameter' describe 'Spaces' do - let(:associated_space) { VCAP::CloudController::Space.make(organization_guid: space_quota_definition.organization_guid) } + let(:associated_space) { create(:space, organization: space_quota_definition.organization) } let(:associated_space_guid) { associated_space.guid } before do @@ -89,7 +89,7 @@ nested_model_remove :space, :space_quota_definition describe 'Associate Spaces' do - let!(:space) { VCAP::CloudController::Space.make(organization_guid: space_quota_definition.organization_guid) } + let!(:space) { create(:space, organization: space_quota_definition.organization) } let(:space_guid) { space.guid } parameter :space_guid, 'The guid of the space' diff --git a/spec/api/documentation/spaces_api_spec.rb b/spec/api/documentation/spaces_api_spec.rb index 963838c1bd3..db42e0524ba 100644 --- a/spec/api/documentation/spaces_api_spec.rb +++ b/spec/api/documentation/spaces_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'Spaces', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:space) { VCAP::CloudController::Space.make } + let!(:space) { FactoryBot.create(:space) } let(:guid) { space.guid } authenticated_request @@ -54,7 +54,7 @@ def after_standard_model_delete(guid) post '/v2/spaces/' do include_context 'createable_fields', required: true example 'Creating a Space' do - organization_guid = VCAP::CloudController::Organization.make.guid + organization_guid = create(:organization).guid client.post '/v2/spaces', Oj.dump(required_fields.merge(organization_guid:)), headers expect(status).to eq(201) @@ -86,7 +86,7 @@ def after_standard_model_delete(guid) describe 'Nested endpoints' do include_context 'guid_parameter' - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do VCAP::CloudController::SecurityContext.set(user, 'valid_token') @@ -98,8 +98,8 @@ def after_standard_model_delete(guid) describe 'Routes' do before do - domain = VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) - VCAP::CloudController::Route.make(domain:, space:) + domain = create(:private_domain, owning_organization: space.organization) + create(:route, domain:, space:) end standard_model_list :route, VCAP::CloudController::RoutesController, outer_model: :space, exclude_parameters: ['organization_guid'] @@ -113,8 +113,8 @@ def after_standard_model_delete(guid) allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_developer.guid => 'developer@example.com' }) end - let!(:associated_developer) { VCAP::CloudController::User.make } - let(:developer) { VCAP::CloudController::User.make } + let!(:associated_developer) { create(:user) } + let(:developer) { create(:user) } context 'by user guid' do let(:associated_developer_guid) { associated_developer.guid } @@ -169,8 +169,8 @@ def after_standard_model_delete(guid) allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_manager.guid => 'manager@example.com' }) end - let!(:associated_manager) { VCAP::CloudController::User.make } - let(:manager) { VCAP::CloudController::User.make } + let!(:associated_manager) { create(:user) } + let(:manager) { create(:user) } context 'by user guid' do let(:associated_manager_guid) { associated_manager.guid } @@ -225,8 +225,8 @@ def after_standard_model_delete(guid) allow_any_instance_of(VCAP::CloudController::UaaClient).to receive(:usernames_for_ids).and_return({ associated_auditor.guid => 'auditor@example.com' }) end - let!(:associated_auditor) { VCAP::CloudController::User.make } - let(:auditor) { VCAP::CloudController::User.make } + let!(:associated_auditor) { create(:user) } + let(:auditor) { create(:user) } context 'by user guid' do let(:associated_auditor_guid) { associated_auditor.guid } @@ -274,7 +274,7 @@ def after_standard_model_delete(guid) end describe 'User Roles' do - let(:everything_user) { VCAP::CloudController::User.make } + let(:everything_user) { create(:user) } before do space.organization.add_user(everything_user) @@ -313,7 +313,7 @@ def after_standard_model_delete(guid) describe 'Service Instances' do before do - VCAP::CloudController::ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end request_parameter :return_user_provided_service_instances, "When 'true', include user provided service instances." @@ -323,9 +323,9 @@ def after_standard_model_delete(guid) describe 'Services' do before do - some_service = VCAP::CloudController::Service.make(active: true) - VCAP::CloudController::ServicePlan.make(service: some_service, public: false) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: some_service.service_plans.first, organization: space.organization) + some_service = create(:service, active: true) + create(:service_plan, service: some_service, public: false) + create(:service_plan_visibility, service_plan: some_service.service_plans.first, organization: space.organization) end standard_model_list :service, VCAP::CloudController::ServicesController, outer_model: :space, path: :service, exclude_parameters: ['provider'] @@ -333,7 +333,7 @@ def after_standard_model_delete(guid) describe 'Events' do before do - user = VCAP::CloudController::User.make + user = create(:user) space_event_repository = VCAP::CloudController::Repositories::SpaceEventRepository.new space_event_repository.record_space_update(space, VCAP::CloudController::UserAuditInfo.new(user_guid: user.guid, user_email: 'user@example.com'), { 'name' => 'new_name' }) end @@ -342,9 +342,9 @@ def after_standard_model_delete(guid) end describe 'Security Groups' do - let!(:associated_security_group) { VCAP::CloudController::SecurityGroup.make(space_guids: [space.guid]) } + let!(:associated_security_group) { create(:security_group, space_guids: [space.guid]) } let(:associated_security_group_guid) { associated_security_group.guid } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:security_group_guid) { security_group.guid } standard_model_list :security_group, VCAP::CloudController::SecurityGroupsController, outer_model: :space @@ -358,9 +358,9 @@ def after_standard_model_delete(guid) end describe 'Isolation Segments (experimental)' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:isolation_segment_model2) { VCAP::CloudController::IsolationSegmentModel.make } - let(:org_manager) { VCAP::CloudController::User.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model2) { create(:isolation_segment_model) } + let(:org_manager) { create(:user) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } before do diff --git a/spec/api/documentation/summary_api_spec.rb b/spec/api/documentation/summary_api_spec.rb index 8ccf3e58394..f8f5893a784 100644 --- a/spec/api/documentation/summary_api_spec.rb +++ b/spec/api/documentation/summary_api_spec.rb @@ -3,13 +3,13 @@ RSpec.resource 'Apps', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } let(:process) { VCAP::CloudController::ProcessModelFactory.make space: } let(:user) { make_developer_for_space(process.space) } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:service_binding) { VCAP::CloudController::ServiceBinding.make(app: process.app, service_instance: service_instance) } + let(:shared_domain) { FactoryBot.create(:shared_domain) } + let(:route1) { FactoryBot.create(:route, space:) } + let(:service_instance) { FactoryBot.create(:managed_service_instance, space:) } + let(:service_binding) { FactoryBot.create(:service_binding, app: process.app, service_instance: service_instance) } let(:bbs_instances_client) { instance_double(VCAP::CloudController::Diego::BbsInstancesClient) } before do @@ -53,7 +53,7 @@ field :services, 'List of services that are bound to the app' example 'Get App summary' do - VCAP::CloudController::RouteMappingModel.make(app: process.app, route: route1, process_type: process.type) + FactoryBot.create(:route_mapping_model, app: process.app, route: route1, process_type: process.type) service_binding.save client.get "/v2/apps/#{process.guid}/summary", {}, headers @@ -72,20 +72,20 @@ RSpec.resource 'Spaces', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(diego: false, space: space) } let(:user) { make_developer_for_space(process.space) } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:service_binding) { VCAP::CloudController::ServiceBinding.make(app: process.app, service_instance: service_instance) } + let(:shared_domain) { FactoryBot.create(:shared_domain) } + let(:route1) { FactoryBot.create(:route, space:) } + let(:service_instance) { FactoryBot.create(:managed_service_instance, space:) } + let(:service_binding) { FactoryBot.create(:service_binding, app: process.app, service_instance: service_instance) } let(:instances_reporters) { double(:instances_reporters) } let(:running_instances) { { process.guid => 1 } } before do allow(CloudController::DependencyLocator.instance).to receive(:instances_reporters).and_return(instances_reporters) allow(instances_reporters).to receive(:number_of_starting_and_running_instances_for_processes).and_return(running_instances) - service_instance.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_instance.service_instance_operation = FactoryBot.create(:service_instance_operation, type: 'create', state: 'succeeded') end authenticated_request @@ -97,7 +97,7 @@ field :services, 'List of services that are associated with the space' example 'Get Space summary' do - VCAP::CloudController::RouteMappingModel.make(app: process.app, route: route1, process_type: process.type) + FactoryBot.create(:route_mapping_model, app: process.app, route: route1, process_type: process.type) service_binding.save client.get "/v2/spaces/#{space.guid}/summary", {}, headers @@ -114,8 +114,8 @@ RSpec.resource 'Organizations', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:organization) { VCAP::CloudController::Organization.make } - let!(:space) { VCAP::CloudController::Space.make(organization:) } + let(:organization) { FactoryBot.create(:organization) } + let!(:space) { FactoryBot.create(:space, organization:) } authenticated_request @@ -138,7 +138,7 @@ RSpec.resource 'Users', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let(:user) { VCAP::CloudController::User.make } + let(:user) { FactoryBot.create(:user) } authenticated_request @@ -153,8 +153,8 @@ field :organizations, 'List of organizations that the user is a member of.' example 'Get User summary' do - organization = VCAP::CloudController::Organization.make - space = VCAP::CloudController::Space.make(organization:) + organization = FactoryBot.create(:organization) + space = FactoryBot.create(:space, organization:) user.add_organization organization organization.add_manager user organization.add_billing_manager user diff --git a/spec/api/documentation/user_provided_service_instances_api_spec.rb b/spec/api/documentation/user_provided_service_instances_api_spec.rb index d56bfa63c2b..a537b4a5be1 100644 --- a/spec/api/documentation/user_provided_service_instances_api_spec.rb +++ b/spec/api/documentation/user_provided_service_instances_api_spec.rb @@ -3,7 +3,7 @@ RSpec.resource 'User Provided Service Instances', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let!(:service_instance) { FactoryBot.create(:user_provided_service_instance) } let(:guid) { service_instance.guid } authenticated_request @@ -21,7 +21,7 @@ field :route_service_url, 'URL to which requests for bound routes will be forwarded.', required: false, example_values: ['https://logger.example.com'] example 'Creating a User Provided Service Instance' do - space_guid = VCAP::CloudController::Space.make.guid + space_guid = create(:space).guid request_hash = { space_guid: space_guid, name: 'my-user-provided-instance', @@ -56,7 +56,7 @@ describe 'Nested endpoints' do describe 'Service Bindings' do before do - VCAP::CloudController::ServiceBinding.make(service_instance:) + create(:service_binding, service_instance:) end field :guid, 'The guid of the Service Instance.', required: true @@ -68,15 +68,15 @@ end describe 'Routes' do - let(:route) { VCAP::CloudController::Route.make(space: service_instance.space) } + let(:route) { create(:route, space: service_instance.space) } let(:route_guid) { route.guid } - let(:associated_route) { VCAP::CloudController::Route.make(space: service_instance.space) } + let(:associated_route) { create(:route, space: service_instance.space) } let(:associated_route_guid) { associated_route.guid } - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing) } + let(:service_instance) { create(:user_provided_service_instance, :routing) } let(:guid) { service_instance.guid } before do - binding = VCAP::CloudController::RouteBinding.make(route: associated_route, service_instance: service_instance) + binding = create(:route_binding, route: associated_route, service_instance: service_instance) associated_route.route_binding = binding associated_route.save end diff --git a/spec/api/documentation/users_api_spec.rb b/spec/api/documentation/users_api_spec.rb index ba49eff7552..50092a4d14a 100644 --- a/spec/api/documentation/users_api_spec.rb +++ b/spec/api/documentation/users_api_spec.rb @@ -3,9 +3,9 @@ RSpec.resource 'Users', type: %i[api legacy_api] do let(:admin_auth_header) { admin_headers['HTTP_AUTHORIZATION'] } - let!(:user) { VCAP::CloudController::User.make(default_space: space) } + let!(:user) { FactoryBot.create(:user, default_space: space) } let(:guid) { user.guid } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { FactoryBot.create(:space) } authenticated_request @@ -44,7 +44,7 @@ include_context 'updatable_fields' example 'Updating a User' do - new_space = VCAP::CloudController::Space.make + new_space = create(:space) client.put "/v2/users/#{guid}", Oj.dump({ default_space_guid: new_space.guid }), headers expect(status).to eq 201 @@ -64,9 +64,9 @@ space.organization.add_user(user) end - let!(:associated_space) { VCAP::CloudController::Space.make } + let!(:associated_space) { create(:space) } let(:associated_space_guid) { associated_space.guid } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:space_guid) { space.guid } standard_model_list :space, VCAP::CloudController::SpacesController, outer_model: :user @@ -87,9 +87,9 @@ managed_space.organization.add_user(user) end - let!(:associated_managed_space) { VCAP::CloudController::Space.make } + let!(:associated_managed_space) { create(:space) } let(:associated_managed_space_guid) { associated_managed_space.guid } - let(:managed_space) { VCAP::CloudController::Space.make } + let(:managed_space) { create(:space) } let(:managed_space_guid) { managed_space.guid } standard_model_list :space, VCAP::CloudController::SpacesController, outer_model: :user, path: :managed_spaces @@ -110,9 +110,9 @@ audited_space.organization.add_user(user) end - let!(:associated_audited_space) { VCAP::CloudController::Space.make } + let!(:associated_audited_space) { create(:space) } let(:associated_audited_space_guid) { associated_audited_space.guid } - let(:audited_space) { VCAP::CloudController::Space.make } + let(:audited_space) { create(:space) } let(:audited_space_guid) { audited_space.guid } standard_model_list :space, VCAP::CloudController::SpacesController, outer_model: :user, path: :audited_spaces @@ -130,9 +130,9 @@ associated_organization.add_user(user) end - let!(:associated_organization) { VCAP::CloudController::Organization.make } + let!(:associated_organization) { create(:organization) } let(:associated_organization_guid) { associated_organization.guid } - let(:organization) { VCAP::CloudController::Organization.make } + let(:organization) { create(:organization) } let(:organization_guid) { organization.guid } standard_model_list :organization, VCAP::CloudController::OrganizationsController, outer_model: :user @@ -153,9 +153,9 @@ associated_managed_organization.add_manager(user) end - let!(:associated_managed_organization) { VCAP::CloudController::Organization.make } + let!(:associated_managed_organization) { create(:organization) } let(:associated_managed_organization_guid) { associated_managed_organization.guid } - let(:managed_organization) { VCAP::CloudController::Organization.make } + let(:managed_organization) { create(:organization) } let(:managed_organization_guid) { managed_organization.guid } standard_model_list :organization, VCAP::CloudController::OrganizationsController, outer_model: :user, path: :managed_organizations @@ -175,9 +175,9 @@ associated_billing_managed_organization.add_billing_manager(user) end - let!(:associated_billing_managed_organization) { VCAP::CloudController::Organization.make } + let!(:associated_billing_managed_organization) { create(:organization) } let(:associated_billing_managed_organization_guid) { associated_billing_managed_organization.guid } - let(:billing_managed_organization) { VCAP::CloudController::Organization.make } + let(:billing_managed_organization) { create(:organization) } let(:billing_managed_organization_guid) { billing_managed_organization.guid } standard_model_list :organization, VCAP::CloudController::OrganizationsController, outer_model: :user, path: :billing_managed_organizations @@ -197,9 +197,9 @@ associated_audited_organization.add_auditor(user) end - let!(:associated_audited_organization) { VCAP::CloudController::Organization.make } + let!(:associated_audited_organization) { create(:organization) } let(:associated_audited_organization_guid) { associated_audited_organization.guid } - let(:audited_organization) { VCAP::CloudController::Organization.make } + let(:audited_organization) { create(:organization) } let(:audited_organization_guid) { audited_organization.guid } standard_model_list :organization, VCAP::CloudController::OrganizationsController, outer_model: :user, path: :audited_organizations diff --git a/spec/api/internal/log_access_api_spec.rb b/spec/api/internal/log_access_api_spec.rb index a524cd07c0b..6f1c8d90d1d 100644 --- a/spec/api/internal/log_access_api_spec.rb +++ b/spec/api/internal/log_access_api_spec.rb @@ -4,7 +4,7 @@ include RequestSpecHelper context 'when the guid is for a v3 app' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } it 'queries the proper v3 app' do get "/internal/v4/log_access/#{app_model.guid}", {}, admin_headers @@ -13,7 +13,7 @@ end context 'when the guid is for a v2 app' do - let(:process_model) { VCAP::CloudController::ProcessModel.make } + let(:process_model) { create(:process_model) } it 'queries the proper v2 app' do get "/internal/v4/log_access/#{process_model.guid}", {}, admin_headers diff --git a/spec/db_spec_helper.rb b/spec/db_spec_helper.rb index 426fa2a8c89..d0e170402f5 100644 --- a/spec/db_spec_helper.rb +++ b/spec/db_spec_helper.rb @@ -8,9 +8,6 @@ require 'support/database_isolation' require 'sequel_plugins/sequel_plugins' - require 'machinist/sequel' - require 'machinist/object' - VCAP::CloudController::SpecBootstrap.init(recreate_test_tables: false) require 'delayed_job_plugins/deserialization_retry' @@ -18,7 +15,8 @@ require 'delayed_job_plugins/before_enqueue_hook' require 'delayed_job_plugins/delayed_jobs_metrics' - require 'support/fakes/blueprints' + require 'support/factories' + require 'support/sham_shim' RSpec.configure do |rspec_config| rspec_config.before :suite do diff --git a/spec/factories_lint_spec.rb b/spec/factories_lint_spec.rb new file mode 100644 index 00000000000..4c9525f4dab --- /dev/null +++ b/spec/factories_lint_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' + +RSpec.describe FactoryBot do + describe '.lint' do + before do + UAARequests.stub_all + routing_api_client = instance_double( + VCAP::CloudController::RoutingApi::Client, + router_group: VCAP::CloudController::RoutingApi::RouterGroup.new( + 'guid' => 'tcp-router-group', + 'type' => 'tcp', + 'reservable_ports' => '1024-65535' + ), + enabled?: true + ) + allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) + end + + it 'succeeds for every factory and trait combination' do + FactoryBot.lint(traits: true) + end + end +end diff --git a/spec/integration/parallel_route_creation_spec.rb b/spec/integration/parallel_route_creation_spec.rb index 4230f922cce..43b490519bf 100644 --- a/spec/integration/parallel_route_creation_spec.rb +++ b/spec/integration/parallel_route_creation_spec.rb @@ -12,8 +12,8 @@ module VCAP::CloudController threads << Thread.new do user_audit_info = UserAuditInfo.new(user_email: Sham.email, user_guid: Sham.guid) message = RouteCreateMessage.new(host: Sham.host) - space = Space.make - domain = SharedDomain.make(internal: true) + space = create(:space) + domain = create(:shared_domain, internal: true) route = nil expect do diff --git a/spec/isolated_specs/processes_sync_spec.rb b/spec/isolated_specs/processes_sync_spec.rb index 87c2e16fd50..2ed21bbb9bf 100644 --- a/spec/isolated_specs/processes_sync_spec.rb +++ b/spec/isolated_specs/processes_sync_spec.rb @@ -42,7 +42,7 @@ module Diego ) end let(:good_lrp) { ::Diego::Bbs::Models::DesiredLRP.new(process_guid: 'good-lrp') } - let!(:good_process) { ProcessModel.make(:diego_runnable) } + let!(:good_process) { create(:process_model, :diego_runnable) } it 'does not touch lrps that are up to date and correct' do allow(bbs_apps_client).to receive(:desire_app) @@ -58,8 +58,8 @@ module Diego end context 'when the process is a docker app' do - let(:app) { AppModel.make(:docker, droplet: DropletModel.make(:docker)) } - let(:good_process) { ProcessModel.make(:docker, state: 'STARTED', app: app) } + let(:app) { create(:app_model, :docker, droplet: create(:droplet_model, :docker)) } + let(:good_process) { create(:process_model, :docker, state: 'STARTED', app: app) } context 'when diego_docker is enabled' do before do @@ -112,7 +112,7 @@ module Diego routes: ::Diego::Bbs::Models::ProtoRoutes.new(routes: []) ) end - let!(:stale_process) { ProcessModel.make(:diego_runnable) } + let!(:stale_process) { create(:process_model, :diego_runnable) } it 'updates stale lrps' do allow(bbs_apps_client).to receive(:update_app) @@ -138,8 +138,8 @@ module Diego end context 'when the process is a cnb app' do - let(:app) { AppModel.make(:cnb, droplet: DropletModel.make(:cnb)) } - let!(:stale_process) { ProcessModel.make(:cnb, state: 'STARTED', app: app) } + let(:app) { create(:app_model, :cnb, droplet: create(:droplet_model, :cnb)) } + let!(:stale_process) { create(:process_model, :cnb, state: 'STARTED', app: app) } before do FeatureFlag.create(name: 'diego_cnb', enabled: true) @@ -173,8 +173,8 @@ module Diego end context 'when the process is a docker app' do - let(:app) { AppModel.make(:docker, droplet: DropletModel.make(:docker)) } - let!(:stale_process) { ProcessModel.make(:docker, state: 'STARTED', app: app) } + let(:app) { create(:app_model, :docker, droplet: create(:droplet_model, :docker)) } + let!(:stale_process) { create(:process_model, :docker, state: 'STARTED', app: app) } context 'when diego_docker is enabled' do before do @@ -260,7 +260,7 @@ module Diego context 'when diego does not contain the LRP' do let(:scheduling_infos) { [] } - let!(:missing_process) { ProcessModel.make(:diego_runnable) } + let!(:missing_process) { create(:process_model, :diego_runnable) } it 'creates missing lrps' do allow(bbs_apps_client).to receive(:desire_app).with(missing_process) @@ -320,7 +320,7 @@ module Diego end context 'when diego already contains the LRP' do - let(:good_process) { ProcessModel.make(:diego_runnable) } + let(:good_process) { create(:process_model, :diego_runnable) } let(:error) { CloudController::Errors::ApiError.new_from_details('RunnerError', 'the requested resource already exists') } let(:indexed_by_thing) { instance_double(Hash) } let(:existing_lrp) { ::Diego::Bbs::Models::DesiredLRP.new(process_guid: "#{good_process.guid}-#{good_process.version}") } @@ -442,8 +442,8 @@ module Diego context 'when updating LRP state on diego fails multiple times with ignorable errors' do let(:scheduling_infos) { [] } - let!(:missing_process1) { ProcessModel.make(:diego_runnable) } - let!(:missing_process2) { ProcessModel.make(:diego_runnable) } + let!(:missing_process1) { create(:process_model, :diego_runnable) } + let!(:missing_process2) { create(:process_model, :diego_runnable) } let(:ignorable_error) { CloudController::Errors::ApiError.new_from_details('RunnerInvalidRequest', 'invalid thing') } let(:fake_app_recipe) { instance_double(AppRecipeBuilder, build_app_lrp: double(:app_lrp_recipe)) } @@ -460,10 +460,10 @@ module Diego context 'when updating LRP state on diego fails multiple times with some non-ignorable errors' do let(:scheduling_infos) { [] } - let!(:missing_process1) { ProcessModel.make(:diego_runnable) } - let!(:missing_process2) { ProcessModel.make(:diego_runnable) } - let!(:missing_process3) { ProcessModel.make(:diego_runnable) } - let!(:missing_process4) { ProcessModel.make(:diego_runnable) } + let!(:missing_process1) { create(:process_model, :diego_runnable) } + let!(:missing_process2) { create(:process_model, :diego_runnable) } + let!(:missing_process3) { create(:process_model, :diego_runnable) } + let!(:missing_process4) { create(:process_model, :diego_runnable) } let(:ignorable_error) { CloudController::Errors::ApiError.new_from_details('RunnerInvalidRequest', 'invalid thing') } let(:non_ignorable_error) { CloudController::Errors::ApiError.new_from_details('RunnerError', 'some error') } let(:non_api_error) { StandardError.new('something went wrong') } @@ -526,9 +526,9 @@ module Diego end context 'when logging invalid-lrp-request count to statsd' do - let!(:missing_process) { ProcessModel.make(:diego_runnable) } - let!(:missing_process2) { ProcessModel.make(:diego_runnable) } - let!(:missing_process3) { ProcessModel.make(:diego_runnable) } + let!(:missing_process) { create(:process_model, :diego_runnable) } + let!(:missing_process2) { create(:process_model, :diego_runnable) } + let!(:missing_process3) { create(:process_model, :diego_runnable) } let(:invalid_request_error) { CloudController::Errors::ApiError.new_from_details('RunnerInvalidRequest', 'invalid thing') } let(:other_error) { CloudController::Errors::ApiError.new_from_details('RunnerError', 'bad error!') } diff --git a/spec/logcache/client_spec.rb b/spec/logcache/client_spec.rb index 443d56bafd7..2567e75bf21 100644 --- a/spec/logcache/client_spec.rb +++ b/spec/logcache/client_spec.rb @@ -30,7 +30,7 @@ module Logcache describe '#container_metrics' do let(:instance_count) { 2 } - let!(:process) { VCAP::CloudController::ProcessModel.make(instances: instance_count) } + let!(:process) { create(:process_model, instances: instance_count) } before do expect(GRPC::Core::ChannelCredentials).to receive(:new). @@ -74,7 +74,7 @@ module Logcache describe 'when logcache is unavailable' do let(:instance_count) { 0 } let(:bad_status) { GRPC::BadStatus.new(14) } - let!(:process) { VCAP::CloudController::ProcessModel.make(instances: instance_count) } + let!(:process) { create(:process_model, instances: instance_count) } before do expect(GRPC::Core::ChannelCredentials).to receive(:new). @@ -105,7 +105,7 @@ module Logcache describe 'when logcache does not respond in a reasonable amount of time' do let(:instance_count) { 0 } let(:timeout_status) { GRPC::DeadlineExceeded.new } - let!(:process) { VCAP::CloudController::ProcessModel.make(instances: instance_count) } + let!(:process) { create(:process_model, instances: instance_count) } before do expect(GRPC::Core::ChannelCredentials).to receive(:new). @@ -135,7 +135,7 @@ module Logcache describe 'when the logcache service has any other error' do let(:bad_status) { GRPC::BadStatus.new(13) } - let!(:process) { VCAP::CloudController::ProcessModel.make(instances: instance_count) } + let!(:process) { create(:process_model, instances: instance_count) } let(:instance_count) { 2 } before do @@ -172,7 +172,7 @@ module Logcache describe '#container_metrics' do let(:instance_count) { 2 } - let!(:process) { VCAP::CloudController::ProcessModel.make(instances: instance_count) } + let!(:process) { create(:process_model, instances: instance_count) } before do expect(GRPC::Core::ChannelCredentials).not_to receive(:new) diff --git a/spec/logcache/container_metric_batcher_spec.rb b/spec/logcache/container_metric_batcher_spec.rb index 6a40a6e9390..f80e9f36251 100644 --- a/spec/logcache/container_metric_batcher_spec.rb +++ b/spec/logcache/container_metric_batcher_spec.rb @@ -8,7 +8,7 @@ let(:wrapped_logcache_client) { instance_double(Logcache::Client, container_metrics: logcache_response) } let(:num_instances) { 11 } - let(:process) { VCAP::CloudController::ProcessModel.make(instances: num_instances) } + let(:process) { create(:process_model, instances: num_instances) } let(:process_guid) { process.guid } let(:logcache_response) { Logcache::V1::ReadResponse.new(envelopes:) } let(:envelopes) { Loggregator::V2::EnvelopeBatch.new } diff --git a/spec/migrations/20190712210940_backfill_status_for_deployments_spec.rb b/spec/migrations/20190712210940_backfill_status_for_deployments_spec.rb index 99224af9022..6263038b80f 100644 --- a/spec/migrations/20190712210940_backfill_status_for_deployments_spec.rb +++ b/spec/migrations/20190712210940_backfill_status_for_deployments_spec.rb @@ -10,7 +10,7 @@ ) end - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } it 'backfills status_value based on deployment state' do # Create all deployment variations diff --git a/spec/migrations/20191014212939_add_guid_and_timestamps_to_roles_join_tables_spec.rb b/spec/migrations/20191014212939_add_guid_and_timestamps_to_roles_join_tables_spec.rb index 912c49faae8..85744c6af9d 100644 --- a/spec/migrations/20191014212939_add_guid_and_timestamps_to_roles_join_tables_spec.rb +++ b/spec/migrations/20191014212939_add_guid_and_timestamps_to_roles_join_tables_spec.rb @@ -2,8 +2,8 @@ RSpec.describe 'add role_guid and timestamps to roles join tables', isolation: :truncation, type: :migration do let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } org_roles = %w[ organizations_auditors diff --git a/spec/migrations/20191218001006_fill_guid_and_timestamps_for_spaces_auditors_spec.rb b/spec/migrations/20191218001006_fill_guid_and_timestamps_for_spaces_auditors_spec.rb index bea167dd3e3..dcaa10d7c52 100644 --- a/spec/migrations/20191218001006_fill_guid_and_timestamps_for_spaces_auditors_spec.rb +++ b/spec/migrations/20191218001006_fill_guid_and_timestamps_for_spaces_auditors_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001006_fill_guid_and_timestamps_for_spaces_auditors.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:space) { create(:space) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001010_fill_guid_and_timestamps_for_spaces_managers_spec.rb b/spec/migrations/20191218001010_fill_guid_and_timestamps_for_spaces_managers_spec.rb index 9ffa3efbcff..7a663f496b7 100644 --- a/spec/migrations/20191218001010_fill_guid_and_timestamps_for_spaces_managers_spec.rb +++ b/spec/migrations/20191218001010_fill_guid_and_timestamps_for_spaces_managers_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001010_fill_guid_and_timestamps_for_spaces_managers.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:space) { create(:space) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001015_fill_guid_and_timestamps_for_spaces_developers_spec.rb b/spec/migrations/20191218001015_fill_guid_and_timestamps_for_spaces_developers_spec.rb index 71016504e1d..5d6d7011b6a 100644 --- a/spec/migrations/20191218001015_fill_guid_and_timestamps_for_spaces_developers_spec.rb +++ b/spec/migrations/20191218001015_fill_guid_and_timestamps_for_spaces_developers_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001015_fill_guid_and_timestamps_for_spaces_developers.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:space) { create(:space) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001019_fill_guid_and_timestamps_for_organizations_auditors_spec.rb b/spec/migrations/20191218001019_fill_guid_and_timestamps_for_organizations_auditors_spec.rb index cd559d704e5..14a33572f67 100644 --- a/spec/migrations/20191218001019_fill_guid_and_timestamps_for_organizations_auditors_spec.rb +++ b/spec/migrations/20191218001019_fill_guid_and_timestamps_for_organizations_auditors_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001019_fill_guid_and_timestamps_for_organizations_auditors.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:organization) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:organization) { create(:organization) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001024_fill_guid_and_timestamps_for_organizations_billing_managers_spec.rb b/spec/migrations/20191218001024_fill_guid_and_timestamps_for_organizations_billing_managers_spec.rb index 71cba39e000..bded86d358f 100644 --- a/spec/migrations/20191218001024_fill_guid_and_timestamps_for_organizations_billing_managers_spec.rb +++ b/spec/migrations/20191218001024_fill_guid_and_timestamps_for_organizations_billing_managers_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001024_fill_guid_and_timestamps_for_organizations_billing_managers.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:organization) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:organization) { create(:organization) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001028_fill_guid_and_timestamps_for_organizations_managers_spec.rb b/spec/migrations/20191218001028_fill_guid_and_timestamps_for_organizations_managers_spec.rb index d65d2b1263f..5a3ad3496ef 100644 --- a/spec/migrations/20191218001028_fill_guid_and_timestamps_for_organizations_managers_spec.rb +++ b/spec/migrations/20191218001028_fill_guid_and_timestamps_for_organizations_managers_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001028_fill_guid_and_timestamps_for_organizations_managers.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:organization) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:organization) { create(:organization) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20191218001034_fill_guid_and_timestamps_for_organizations_users_spec.rb b/spec/migrations/20191218001034_fill_guid_and_timestamps_for_organizations_users_spec.rb index 0eb4b411a1e..d2a17858482 100644 --- a/spec/migrations/20191218001034_fill_guid_and_timestamps_for_organizations_users_spec.rb +++ b/spec/migrations/20191218001034_fill_guid_and_timestamps_for_organizations_users_spec.rb @@ -5,10 +5,10 @@ let(:filename) { '20191218001034_fill_guid_and_timestamps_for_organizations_users.rb' } let(:db) { Sequel::Model.db } - let(:user) { VCAP::CloudController::User.make } - let(:user_2) { VCAP::CloudController::User.make } - let(:user_3) { VCAP::CloudController::User.make } - let(:organization) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:user_2) { create(:user) } + let(:user_3) { create(:user) } + let(:organization) { create(:organization) } let(:tmp_migrations_dir) { Dir.mktmpdir } before do diff --git a/spec/migrations/20220818142407_add_unique_index_to_service_instance_operations_service_instance_id_spec.rb b/spec/migrations/20220818142407_add_unique_index_to_service_instance_operations_service_instance_id_spec.rb index 9d5c92b2a17..b4f8e34e624 100644 --- a/spec/migrations/20220818142407_add_unique_index_to_service_instance_operations_service_instance_id_spec.rb +++ b/spec/migrations/20220818142407_add_unique_index_to_service_instance_operations_service_instance_id_spec.rb @@ -4,7 +4,7 @@ let(:filename) { '20220818142407_add_unique_index_to_service_instance_operations_service_instance_id.rb' } let(:tmp_migrations_dir) { Dir.mktmpdir } let(:db) { Sequel::Model.db } - let(:service_instance) { VCAP::CloudController::ServiceInstance.make } + let(:service_instance) { create(:service_instance) } before do FileUtils.cp(File.join(DBMigrator::SEQUEL_MIGRATIONS, filename), tmp_migrations_dir) @@ -21,31 +21,31 @@ it 'removes duplicate service instance operations' do # Two operations that do not reference a service instance (i.e. service_instance_id is nil); # none of them should be removed. - VCAP::CloudController::ServiceInstanceOperation.make - VCAP::CloudController::ServiceInstanceOperation.make + create(:service_instance_operation) + create(:service_instance_operation) # Two operations that each reference a different service instance (the 'normal' situation); # none of them should be removed. - si1 = VCAP::CloudController::ServiceInstance.make - VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si1.id) - si2 = VCAP::CloudController::ServiceInstance.make - VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si2.id) + si1 = create(:service_instance) + create(:service_instance_operation, service_instance_id: si1.id) + si2 = create(:service_instance) + create(:service_instance_operation, service_instance_id: si2.id) # Three operations that reference the same service instance and have the same 'updated_at' value; # the one with the highest 'id' should be kept (o3). - si3 = VCAP::CloudController::ServiceInstance.make - o1 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si3.id) - o2 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si3.id) - o3 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si3.id) + si3 = create(:service_instance) + o1 = create(:service_instance_operation, service_instance_id: si3.id) + o2 = create(:service_instance_operation, service_instance_id: si3.id) + o3 = create(:service_instance_operation, service_instance_id: si3.id) o2.update({ updated_at: o1.updated_at }) o3.update({ updated_at: o1.updated_at }) # Three operations that reference the same service instance and have different 'updated_at' values; # the one with the newest 'updated_at' value should be kept (o5). - si4 = VCAP::CloudController::ServiceInstance.make - o4 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si4.id) - o5 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si4.id) - o6 = VCAP::CloudController::ServiceInstanceOperation.make(service_instance_id: si4.id) + si4 = create(:service_instance) + o4 = create(:service_instance_operation, service_instance_id: si4.id) + o5 = create(:service_instance_operation, service_instance_id: si4.id) + o6 = create(:service_instance_operation, service_instance_id: si4.id) o5.update({ updated_at: o4.updated_at + 1 }) o6.update({ updated_at: o4.updated_at - 1 }) diff --git a/spec/migrations/20251016120006_security_groups_spaces_unique_index_spec.rb b/spec/migrations/20251016120006_security_groups_spaces_unique_index_spec.rb index 2a0d4a378f4..0528a5dd2f2 100644 --- a/spec/migrations/20251016120006_security_groups_spaces_unique_index_spec.rb +++ b/spec/migrations/20251016120006_security_groups_spaces_unique_index_spec.rb @@ -6,10 +6,10 @@ let(:migration_filename) { '20251016120006_security_groups_spaces_unique_index_spec.rb' } end - let(:space_1) { VCAP::CloudController::Space.make } - let(:space_2) { VCAP::CloudController::Space.make } - let(:sec_group_1) { VCAP::CloudController::SecurityGroup.make } - let(:sec_group_2) { VCAP::CloudController::SecurityGroup.make } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } + let(:sec_group_1) { create(:security_group) } + let(:sec_group_2) { create(:security_group) } describe 'security_groups_spaces table' do it 'removes duplicates, updates indexes, and handles idempotency' do diff --git a/spec/migrations/20251028135214_route_bindings_unique_index_spec.rb b/spec/migrations/20251028135214_route_bindings_unique_index_spec.rb index 9cbc119a0f0..dc6dedef54b 100644 --- a/spec/migrations/20251028135214_route_bindings_unique_index_spec.rb +++ b/spec/migrations/20251028135214_route_bindings_unique_index_spec.rb @@ -6,11 +6,11 @@ let(:migration_filename) { '20251028135214_route_bindings_unique_index.rb' } end - let(:space) { VCAP::CloudController::Space.make } - let(:service_instance_1) { VCAP::CloudController::ServiceInstance.make(space:) } - let(:service_instance_2) { VCAP::CloudController::ServiceInstance.make(space:) } - let(:route_1) { VCAP::CloudController::Route.make(space:) } - let(:route_2) { VCAP::CloudController::Route.make(space:) } + let(:space) { create(:space) } + let(:service_instance_1) { create(:service_instance, space:) } + let(:service_instance_2) { create(:service_instance, space:) } + let(:route_1) { create(:route, space:) } + let(:route_2) { create(:route, space:) } describe 'route_bindings table' do it 'removes duplicates, manages unique index, and handles idempotency' do diff --git a/spec/migrations/20251121174647_add_broker_provided_metadata_to_service_instances_spec.rb b/spec/migrations/20251121174647_add_broker_provided_metadata_to_service_instances_spec.rb index 0be03ed1fbd..da70615cb4d 100644 --- a/spec/migrations/20251121174647_add_broker_provided_metadata_to_service_instances_spec.rb +++ b/spec/migrations/20251121174647_add_broker_provided_metadata_to_service_instances_spec.rb @@ -12,7 +12,7 @@ end describe 'service_instances table' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } it 'adds broker_provided_metadata column with correct properties' do # Insert a service instance before migration to test preservation diff --git a/spec/migrations/20260323130619_add_unique_constraint_to_security_groups_spec.rb b/spec/migrations/20260323130619_add_unique_constraint_to_security_groups_spec.rb index 0f75d2e1366..6385ef80ba0 100644 --- a/spec/migrations/20260323130619_add_unique_constraint_to_security_groups_spec.rb +++ b/spec/migrations/20260323130619_add_unique_constraint_to_security_groups_spec.rb @@ -6,7 +6,7 @@ end it 'removes duplicates, adds constraint and reverts migration' do - space = VCAP::CloudController::Space.make + space = create(:space) # create duplicate entries with join table references surviving_id = db[:security_groups].insert(guid: SecureRandom.uuid, name: 'sec1') diff --git a/spec/models/services/service_credential_binding_view_spec.rb b/spec/models/services/service_credential_binding_view_spec.rb index 99bc79e1b8f..93f74c82e56 100644 --- a/spec/models/services/service_credential_binding_view_spec.rb +++ b/spec/models/services/service_credential_binding_view_spec.rb @@ -6,10 +6,10 @@ module ServiceCredentialBinding describe 'Associations' do describe 'service_instance_sti_eager_load' do it 'eager loads successfully' do - instance1 = UserProvidedServiceInstance.make - instance2 = ManagedServiceInstance.make - binding = ServiceBinding.make(service_instance: instance1) - key = ServiceKey.make(service_instance: instance2) + instance1 = create(:user_provided_service_instance) + instance2 = create(:managed_service_instance) + binding = create(:service_binding, service_instance: instance1) + key = create(:service_key, service_instance: instance2) eager_loaded_service_credential_bindings = nil expect do eager_loaded_service_credential_bindings = View.eager(:service_instance_sti_eager_load).all.to_a @@ -28,12 +28,12 @@ module ServiceCredentialBinding describe 'labels_sti_eager_load' do it 'eager loads successfully' do - binding = ServiceBinding.make - lb1 = ServiceBindingLabelModel.make(service_binding: binding, key_name: 'test1', value: 'bommel') - lb2 = ServiceBindingLabelModel.make(service_binding: binding, key_name: 'test2', value: 'bommel') - key = ServiceKey.make - lk1 = ServiceKeyLabelModel.make(service_key: key, key_name: 'test1', value: 'bommel') - lk2 = ServiceKeyLabelModel.make(service_key: key, key_name: 'test2', value: 'bommel') + binding = create(:service_binding) + lb1 = create(:service_binding_label_model, service_binding: binding, key_name: 'test1', value: 'bommel') + lb2 = create(:service_binding_label_model, service_binding: binding, key_name: 'test2', value: 'bommel') + key = create(:service_key) + lk1 = create(:service_key_label_model, service_key: key, key_name: 'test1', value: 'bommel') + lk2 = create(:service_key_label_model, service_key: key, key_name: 'test2', value: 'bommel') eager_loaded_service_credential_bindings = nil expect do @@ -53,12 +53,12 @@ module ServiceCredentialBinding describe 'annotations_sti_eager_load' do it 'eager loads successfully' do - binding = ServiceBinding.make - lb1 = ServiceBindingAnnotationModel.make(service_binding: binding, key_name: 'test1', value: 'bommel') - lb2 = ServiceBindingAnnotationModel.make(service_binding: binding, key_name: 'test2', value: 'bommel') - key = ServiceKey.make - lk1 = ServiceKeyAnnotationModel.make(service_key: key, key_name: 'test1', value: 'bommel') - lk2 = ServiceKeyAnnotationModel.make(service_key: key, key_name: 'test2', value: 'bommel') + binding = create(:service_binding) + lb1 = create(:service_binding_annotation_model, service_binding: binding, key_name: 'test1', value: 'bommel') + lb2 = create(:service_binding_annotation_model, service_binding: binding, key_name: 'test2', value: 'bommel') + key = create(:service_key) + lk1 = create(:service_key_annotation_model, service_key: key, key_name: 'test1', value: 'bommel') + lk2 = create(:service_key_annotation_model, service_key: key, key_name: 'test2', value: 'bommel') eager_loaded_service_credential_bindings = nil expect do @@ -78,10 +78,10 @@ module ServiceCredentialBinding describe 'operation_sti_eager_load' do it 'eager loads successfully' do - binding = ServiceBinding.make.save - bo = ServiceBindingOperation.make(service_binding_id: binding.id) - key = ServiceKey.make - ko = ServiceKeyOperation.make(service_key_id: key.id) + binding = create(:service_binding).save + bo = create(:service_binding_operation, service_binding_id: binding.id) + key = create(:service_key) + ko = create(:service_key_operation, service_key_id: key.id) eager_loaded_service_credential_bindings = nil expect do diff --git a/spec/performance/packages_controller_index_spec.rb b/spec/performance/packages_controller_index_spec.rb index e23d86f3b0c..b62af745549 100644 --- a/spec/performance/packages_controller_index_spec.rb +++ b/spec/performance/packages_controller_index_spec.rb @@ -3,16 +3,16 @@ RSpec.describe PackagesController, type: :controller do describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:user) { set_current_user(create(:user)) } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } - let(:space3) { VCAP::CloudController::Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:user_spaces) { [space, space1, space2, space3] } - let!(:user_package_1) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let!(:user_package_2) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let!(:admin_package) { VCAP::CloudController::PackageModel.make } + let!(:user_package_1) { create(:package_model, app_guid: app_model.guid) } + let!(:user_package_2) { create(:package_model, app_guid: app_model.guid) } + let!(:admin_package) { create(:package_model) } let(:n) { 10 } @@ -25,9 +25,9 @@ ) allow_user_read_access_for(user, spaces: user_spaces) n.times do |i| - app = VCAP::CloudController::AppModel.make(space: user_spaces.sample, guid: "app-guid-#{i}") + app = create(:app_model, space: user_spaces.sample, guid: "app-guid-#{i}") 3.times do |j| - VCAP::CloudController::PackageModel.make(app_guid: app.guid, guid: "package-guid-#{i}-#{j}") + create(:package_model, app_guid: app.guid, guid: "package-guid-#{i}-#{j}") end end end diff --git a/spec/request/admin_actions_spec.rb b/spec/request/admin_actions_spec.rb index 270e45ae617..b2b6f1af7bd 100644 --- a/spec/request/admin_actions_spec.rb +++ b/spec/request/admin_actions_spec.rb @@ -2,9 +2,9 @@ require 'request_spec_shared_examples' RSpec.describe 'admin actions' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:admin_header) { admin_headers_for(user) } describe 'POST /v3/admin/actions/clear_buildpack_cache' do diff --git a/spec/request/api_version_interoperability/app_visibility_spec.rb b/spec/request/api_version_interoperability/app_visibility_spec.rb index e9708927e6d..d7f4bad68e7 100644 --- a/spec/request/api_version_interoperability/app_visibility_spec.rb +++ b/spec/request/api_version_interoperability/app_visibility_spec.rb @@ -1,9 +1,9 @@ require 'spec_helper' RSpec.describe 'App visibility between API versions' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } before do space.organization.add_user(user) diff --git a/spec/request/app_features_spec.rb b/spec/request/app_features_spec.rb index e475dade2ef..e9fa7d817fd 100644 --- a/spec/request/app_features_spec.rb +++ b/spec/request/app_features_spec.rb @@ -2,21 +2,20 @@ require 'request_spec_shared_examples' RSpec.describe 'App Features' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } let(:admin_header) { admin_headers_for(user) } - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } let(:service_binding_k8s_enabled) { true } let(:file_based_vcap_services_enabled) { false } let(:request_body_enabled) { { body: { enabled: true } } } let(:app_model) do - VCAP::CloudController::AppModel.make( - space: space, - enable_ssh: true, - service_binding_k8s_enabled: service_binding_k8s_enabled, - file_based_vcap_services_enabled: file_based_vcap_services_enabled - ) + create(:app_model, + space: space, + enable_ssh: true, + service_binding_k8s_enabled: service_binding_k8s_enabled, + file_based_vcap_services_enabled: file_based_vcap_services_enabled) end describe 'GET /v3/apps/:guid/features' do diff --git a/spec/request/app_manifests_spec.rb b/spec/request/app_manifests_spec.rb index 66a614ca2b1..d504446d7e2 100644 --- a/spec/request/app_manifests_spec.rb +++ b/spec/request/app_manifests_spec.rb @@ -2,17 +2,17 @@ require 'request_spec_shared_examples' RSpec.describe 'App Manifests' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route) { VCAP::CloudController::Route.make(domain: shared_domain, space: space, host: 'a_host') } + let(:shared_domain) { create(:shared_domain) } + let(:route) { create(:route, domain: shared_domain, space: space, host: 'a_host') } let(:second_route) do - VCAP::CloudController::Route.make(domain: shared_domain, space: space, path: '/path', host: 'b_host') + create(:route, domain: shared_domain, space: space, path: '/path', host: 'b_host') end - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app_model) } + let(:app_model) { create(:app_model, space:) } + let!(:process) { create(:process, app: app_model) } before do space.organization.add_user(user) @@ -21,15 +21,15 @@ end describe 'GET /v3/apps/:guid/manifest' do - let(:app_model) { VCAP::CloudController::AppModel.make(space: space, environment_variables: { 'one' => 'tomato', 'two' => 'potato' }) } + let(:app_model) { create(:app_model, space: space, environment_variables: { 'one' => 'tomato', 'two' => 'potato' }) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(app: app_model, service_instance: service_instance) } - let!(:service_binding2) { VCAP::CloudController::ServiceBinding.make(app: app_model, service_instance: service_instance2) } - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, name: 'si-1') } - let!(:service_instance2) { VCAP::CloudController::ManagedServiceInstance.make(space: space, name: 'si-2') } + let!(:service_binding) { create(:service_binding, app: app_model, service_instance: service_instance) } + let!(:service_binding2) { create(:service_binding, app: app_model, service_instance: service_instance2) } + let!(:service_instance) { create(:managed_service_instance, space: space, name: 'si-1') } + let!(:service_instance2) { create(:managed_service_instance, space: space, name: 'si-2') } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route, protocol: nil) } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: second_route, protocol: nil) } + let!(:route_mapping) { create(:route_mapping_model, app: app_model, route: route, protocol: nil) } + let!(:route_mapping2) { create(:route_mapping_model, app: app_model, route: second_route, protocol: nil) } let!(:worker_process) do VCAP::CloudController::ProcessModelFactory.make( @@ -45,15 +45,15 @@ ) end - let!(:app_label) { VCAP::CloudController::AppLabelModel.make(resource_guid: app_model.guid, key_name: 'potato', value: 'idaho') } - let!(:app_annotation) { VCAP::CloudController::AppAnnotationModel.make(resource_guid: app_model.guid, key_name: 'style', value: 'mashed') } + let!(:app_label) { create(:app_label_model, resource_guid: app_model.guid, key_name: 'potato', value: 'idaho') } + let!(:app_annotation) { create(:app_annotation_model, resource_guid: app_model.guid, key_name: 'style', value: 'mashed') } - let!(:sidecar1) { VCAP::CloudController::SidecarModel.make(name: 'authenticator', command: './authenticator', app: app_model) } - let!(:sidecar2) { VCAP::CloudController::SidecarModel.make(name: 'my_sidecar', command: 'rackup', app: app_model) } + let!(:sidecar1) { create(:sidecar_model, name: 'authenticator', command: './authenticator', app: app_model) } + let!(:sidecar2) { create(:sidecar_model, name: 'my_sidecar', command: 'rackup', app: app_model) } - let!(:sidecar_process_type1) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'worker', sidecar: sidecar1, app_guid: app_model.guid) } - let!(:sidecar_process_type2) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'web', sidecar: sidecar1, app_guid: app_model.guid) } - let!(:sidecar_process_type3) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'other_worker', sidecar: sidecar2, app_guid: app_model.guid) } + let!(:sidecar_process_type1) { create(:sidecar_process_type_model, type: 'worker', sidecar: sidecar1, app_guid: app_model.guid) } + let!(:sidecar_process_type2) { create(:sidecar_process_type_model, type: 'web', sidecar: sidecar1, app_guid: app_model.guid) } + let!(:sidecar_process_type3) { create(:sidecar_process_type_model, type: 'other_worker', sidecar: sidecar2, app_guid: app_model.guid) } context 'permissions' do let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/manifest", nil, user_headers } } @@ -78,8 +78,8 @@ end context 'for a buildpack' do - let!(:buildpack) { VCAP::CloudController::Buildpack.make } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make } + let!(:buildpack) { create(:buildpack) } + let!(:buildpack2) { create(:buildpack) } let(:expected_yml_manifest) do { @@ -171,19 +171,18 @@ context 'for a docker app' do let(:docker_package) do - VCAP::CloudController::PackageModel.make( - :docker, - app: app_model, - docker_username: 'xXxMyL1ttlePwnyxXx' - ) + create(:package_model, + :docker, + app: app_model, + docker_username: 'xXxMyL1ttlePwnyxXx') end let(:droplet) do - VCAP::CloudController::DropletModel.make app: app_model, package: docker_package + create(:droplet_model, app: app_model, package: docker_package) end let(:app_model) do - VCAP::CloudController::AppModel.make(:docker, space: space, environment_variables: { 'one' => 'tomato', 'two' => 'potato' }) + create(:app_model, :docker, space: space, environment_variables: { 'one' => 'tomato', 'two' => 'potato' }) end before do @@ -275,9 +274,9 @@ end context 'for a protocol' do - let(:simple_app) { VCAP::CloudController::AppModel.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: simple_app, route: route, protocol: 'http2') } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: simple_app, route: second_route, protocol: nil) } + let(:simple_app) { create(:app_model, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: simple_app, route: route, protocol: 'http2') } + let!(:route_mapping2) { create(:route_mapping_model, app: simple_app, route: second_route, protocol: nil) } let(:expected_yml_manifest) do { diff --git a/spec/request/app_usage_events_spec.rb b/spec/request/app_usage_events_spec.rb index 5886c1c90db..b867161af63 100644 --- a/spec/request/app_usage_events_spec.rb +++ b/spec/request/app_usage_events_spec.rb @@ -4,13 +4,13 @@ RSpec.describe 'App Usage Events' do let(:user) { make_user } let(:admin_header) { admin_headers_for(user) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } describe 'GET /v3/app_usage_events/:guid' do let(:api_call) { ->(user_headers) { get "/v3/app_usage_events/#{usage_event.guid}", nil, user_headers } } - let(:usage_event) { VCAP::CloudController::AppUsageEvent.make } + let(:usage_event) { create(:app_usage_event) } let(:usage_event_json) { build_usage_event_json(usage_event) } @@ -55,8 +55,8 @@ describe 'GET /v3/app_usage_events' do let(:api_call) { ->(user_headers) { get '/v3/app_usage_events', nil, user_headers } } - let!(:app_usage_event) { VCAP::CloudController::AppUsageEvent.make(created_at: Time.now - 5.minutes) } - let!(:app_usage_event_2) { VCAP::CloudController::AppUsageEvent.make(created_at: Time.now - 5.minutes) } + let!(:app_usage_event) { create(:app_usage_event, created_at: Time.now - 5.minutes) } + let!(:app_usage_event_2) { create(:app_usage_event, created_at: Time.now - 5.minutes) } let(:app_usage_event_json) { build_usage_event_json(app_usage_event) } let(:app_usage_event_2_json) { build_usage_event_json(app_usage_event_2) } @@ -109,10 +109,10 @@ end context 'filtering by timestamps' do - let!(:event_1) { VCAP::CloudController::AppUsageEvent.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:event_2) { VCAP::CloudController::AppUsageEvent.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:event_3) { VCAP::CloudController::AppUsageEvent.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:event_4) { VCAP::CloudController::AppUsageEvent.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:event_1) { create(:app_usage_event, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:event_2) { create(:app_usage_event, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:event_3) { create(:app_usage_event, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:event_4) { create(:app_usage_event, guid: '4', created_at: '2020-05-26T18:47:04Z') } it 'filters by the created at' do get "/v3/app_usage_events?created_ats[lt]=#{event_3.created_at.iso8601}", nil, admin_header @@ -140,14 +140,14 @@ describe 'POST /v3/app_usage_events/actions/destructively_purge_all_and_reseed', isolation: :truncation do let(:api_call) { ->(user_headers) { post '/v3/app_usage_events/actions/destructively_purge_all_and_reseed', nil, user_headers } } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } let!(:app_process) do - VCAP::CloudController::ProcessModel.make(state: 'STARTED', app_guid: app_model.guid) + create(:process, state: 'STARTED', app: app_model) end let!(:usage_event) do - VCAP::CloudController::AppUsageEvent.make(guid: 'some-guid') + create(:app_usage_event, guid: 'some-guid') end let(:expected_codes_and_responses) do diff --git a/spec/request/apps_spec.rb b/spec/request/apps_spec.rb index 7e90a7d013c..34ef87cd4ad 100644 --- a/spec/request/apps_spec.rb +++ b/spec/request/apps_spec.rb @@ -3,17 +3,17 @@ require 'request_spec_shared_examples' RSpec.describe 'Apps' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: user_email, user_name: user_name) } let(:admin_header) { admin_headers_for(user) } - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:stack) { VCAP::CloudController::Stack.make } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } + let(:stack) { create(:stack) } let(:user_email) { Sham.email } let(:user_name) { 'some-username' } describe 'POST /v3/apps' do - let(:buildpack) { VCAP::CloudController::Buildpack.make(stack: stack.name) } + let(:buildpack) { create(:buildpack, stack: stack.name) } let(:create_request) do { name: 'my_app', @@ -253,7 +253,7 @@ context 'Docker app' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'create a docker app' do @@ -370,7 +370,7 @@ end context 'when stack is DISABLED' do - let(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'disabled-stack', state: 'DISABLED') } + let(:disabled_stack) { create(:stack, name: 'disabled-stack', state: 'DISABLED') } let(:create_request) do { name: 'my_app', @@ -388,7 +388,7 @@ end context 'when stack is RESTRICTED' do - let(:restricted_stack) { VCAP::CloudController::Stack.make(name: 'restricted-stack', state: 'RESTRICTED') } + let(:restricted_stack) { create(:stack, name: 'restricted-stack', state: 'RESTRICTED') } let(:create_request) do { name: 'my_app', @@ -406,7 +406,7 @@ end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'deprecated-stack', state: 'DEPRECATED') } + let(:deprecated_stack) { create(:stack, name: 'deprecated-stack', state: 'DEPRECATED') } let(:create_request) do { name: 'my_app', @@ -433,7 +433,7 @@ end context 'when stack is ACTIVE' do - let(:active_stack) { VCAP::CloudController::Stack.make(name: 'active-stack', state: 'ACTIVE') } + let(:active_stack) { create(:stack, name: 'active-stack', state: 'ACTIVE') } let(:create_request) do { name: 'my_app', @@ -460,10 +460,10 @@ context 'listing all apps' do let(:api_call) { ->(user_headers) { get '/v3/apps', nil, user_headers } } - let(:space2) { VCAP::CloudController::Space.make(organization: org) } - let(:buildpack_lifecycle) { VCAP::CloudController::BuildpackLifecycleDataModel.make(stack: 'cool-stack', app: app_model1) } - let(:app_model1) { VCAP::CloudController::AppModel.make(guid: 'app1_guid', name: 'name1', space: space) } - let(:app_model2) { VCAP::CloudController::AppModel.make(guid: 'app2_guid', name: 'name2', space: space2) } + let(:space2) { create(:space, organization: org) } + let(:buildpack_lifecycle) { create(:buildpack_lifecycle_data_model, stack: 'cool-stack', app: app_model1) } + let(:app_model1) { create(:app_model, guid: 'app1_guid', name: 'name1', space: space) } + let(:app_model2) { create(:app_model, guid: 'app2_guid', name: 'name2', space: space2) } let(:app_model1_response_object) do { @@ -613,7 +613,7 @@ } end - let!(:app_model) { VCAP::CloudController::AppModel.make } + let!(:app_model) { create(:app_model) } end end @@ -623,23 +623,22 @@ end it 'returns a paginated list of apps the user has access to' do - buildpack = VCAP::CloudController::Buildpack.make(name: 'bp-name') - stack = VCAP::CloudController::Stack.make(name: 'stack-name') + buildpack = create(:buildpack, name: 'bp-name') + stack = create(:stack, name: 'stack-name') - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1', space: space, desired_state: 'STOPPED') + app_model1 = create(:app_model, name: 'name1', space: space, desired_state: 'STOPPED') app_model1.lifecycle_data.update( buildpacks: [buildpack.name], stack: stack.name ) - app_model2 = VCAP::CloudController::AppModel.make( - :docker, - name: 'name2', - space: space, - desired_state: 'STARTED' - ) - VCAP::CloudController::AppModel.make(space:) - VCAP::CloudController::AppModel.make + app_model2 = create(:app_model, + :docker, + name: 'name2', + space: space, + desired_state: 'STARTED') + create(:app_model, space:) + create(:app_model) get '/v3/apps?per_page=2&include=space', nil, user_header expect(last_response.status).to eq(200) @@ -792,9 +791,9 @@ let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } it 'filters by guids' do - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1') - VCAP::CloudController::AppModel.make(name: 'name2') - app_model3 = VCAP::CloudController::AppModel.make(name: 'name3') + app_model1 = create(:app_model, name: 'name1') + create(:app_model, name: 'name2') + app_model3 = create(:app_model, name: 'name3') get "/v3/apps?guids=#{app_model1.guid}%2C#{app_model3.guid}", nil, admin_header @@ -815,9 +814,9 @@ end it 'filters by names' do - VCAP::CloudController::AppModel.make(name: 'name1') - VCAP::CloudController::AppModel.make(name: 'name2') - VCAP::CloudController::AppModel.make(name: 'name3') + create(:app_model, name: 'name1') + create(:app_model, name: 'name2') + create(:app_model, name: 'name3') get '/v3/apps?names=name1%2Cname2', nil, admin_header @@ -838,9 +837,9 @@ end it 'filters by organizations' do - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1') - VCAP::CloudController::AppModel.make(name: 'name2') - app_model3 = VCAP::CloudController::AppModel.make(name: 'name3') + app_model1 = create(:app_model, name: 'name1') + create(:app_model, name: 'name2') + app_model3 = create(:app_model, name: 'name3') get "/v3/apps?organization_guids=#{app_model1.organization.guid}%2C#{app_model3.organization.guid}", nil, admin_header @@ -861,9 +860,9 @@ end it 'filters by spaces' do - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1') - VCAP::CloudController::AppModel.make(name: 'name2') - app_model3 = VCAP::CloudController::AppModel.make(name: 'name3') + app_model1 = create(:app_model, name: 'name1') + create(:app_model, name: 'name2') + app_model3 = create(:app_model, name: 'name3') get "/v3/apps?space_guids=#{app_model1.space.guid}%2C#{app_model3.space.guid}", nil, admin_header @@ -884,12 +883,12 @@ end it 'filters by stack names' do - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1') - app_model2 = VCAP::CloudController::AppModel.make(name: 'name2') - app_model3 = VCAP::CloudController::AppModel.make(name: 'name3') + app_model1 = create(:app_model, name: 'name1') + app_model2 = create(:app_model, name: 'name2') + app_model3 = create(:app_model, name: 'name3') - stack2 = VCAP::CloudController::Stack.make(name: 'name2') - stack3 = VCAP::CloudController::Stack.make(name: 'name3') + stack2 = create(:stack, name: 'name2') + stack3 = create(:stack, name: 'name3') app_model1.lifecycle_data.stack = stack2.name app_model1.lifecycle_data.save @@ -919,12 +918,12 @@ end it 'filters by null stacks' do - app_model1 = VCAP::CloudController::AppModel.make(name: 'name1') - app_model2 = VCAP::CloudController::AppModel.make(name: 'name2') - app_model3 = VCAP::CloudController::AppModel.make(name: 'name3') + app_model1 = create(:app_model, name: 'name1') + app_model2 = create(:app_model, name: 'name2') + app_model3 = create(:app_model, name: 'name3') - stack2 = VCAP::CloudController::Stack.make(name: 'name2') - stack3 = VCAP::CloudController::Stack.make(name: 'name3') + stack2 = create(:stack, name: 'name2') + stack3 = create(:stack, name: 'name3') app_model1.lifecycle_data.stack = nil app_model1.lifecycle_data.save @@ -954,9 +953,9 @@ end it 'filters by lifecycle_type' do - VCAP::CloudController::AppModel.make(name: 'name1') - docker_app_model = VCAP::CloudController::AppModel.make(name: 'name2') - VCAP::CloudController::AppModel.make(name: 'name3') + create(:app_model, name: 'name1') + docker_app_model = create(:app_model, name: 'name2') + create(:app_model, name: 'name3') docker_app_model.buildpack_lifecycle_data = nil docker_app_model.save @@ -986,11 +985,11 @@ end it 'can order by name' do - VCAP::CloudController::AppModel.make(space: space, name: 'zed') - VCAP::CloudController::AppModel.make(space: space, name: 'alpha') - VCAP::CloudController::AppModel.make(space: space, name: 'gamma') - VCAP::CloudController::AppModel.make(space: space, name: 'delta') - VCAP::CloudController::AppModel.make(space: space, name: 'theta') + create(:app_model, space: space, name: 'zed') + create(:app_model, space: space, name: 'alpha') + create(:app_model, space: space, name: 'gamma') + create(:app_model, space: space, name: 'delta') + create(:app_model, space: space, name: 'theta') ascending = %w[alpha delta gamma theta zed] descending = ascending.reverse @@ -1013,10 +1012,10 @@ end it 'can order by state' do - VCAP::CloudController::AppModel.make(space: space, desired_state: 'STARTED') - VCAP::CloudController::AppModel.make(space: space, desired_state: 'STOPPED') - VCAP::CloudController::AppModel.make(space: space, desired_state: 'STARTED') - VCAP::CloudController::AppModel.make(space: space, desired_state: 'STOPPED') + create(:app_model, space: space, desired_state: 'STARTED') + create(:app_model, space: space, desired_state: 'STOPPED') + create(:app_model, space: space, desired_state: 'STARTED') + create(:app_model, space: space, desired_state: 'STOPPED') ascending = %w[STARTED STARTED STOPPED STOPPED] descending = ascending.reverse @@ -1039,12 +1038,12 @@ end context 'labels' do - let!(:app1) { VCAP::CloudController::AppModel.make(name: 'name1') } - let!(:app1_label) { VCAP::CloudController::AppLabelModel.make(resource_guid: app1.guid, key_name: 'foo', value: 'bar') } + let!(:app1) { create(:app_model, name: 'name1') } + let!(:app1_label) { create(:app_label_model, resource_guid: app1.guid, key_name: 'foo', value: 'bar') } - let!(:app2) { VCAP::CloudController::AppModel.make(name: 'name2') } - let!(:app2_label) { VCAP::CloudController::AppLabelModel.make(resource_guid: app2.guid, key_name: 'foo', value: 'funky') } - let!(:app2__exclusive_label) { VCAP::CloudController::AppLabelModel.make(resource_guid: app2.guid, key_name: 'santa', value: 'claus') } + let!(:app2) { create(:app_model, name: 'name2') } + let!(:app2_label) { create(:app_label_model, resource_guid: app2.guid, key_name: 'foo', value: 'funky') } + let!(:app2__exclusive_label) { create(:app_label_model, resource_guid: app2.guid, key_name: 'santa', value: 'claus') } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } @@ -1202,15 +1201,15 @@ end context 'labels and existing filters' do - let!(:space1) { VCAP::CloudController::Space.make } - let!(:space2) { VCAP::CloudController::Space.make } - let!(:app1) { VCAP::CloudController::AppModel.make(name: 'name1', space: space1) } - let!(:app2) { VCAP::CloudController::AppModel.make(name: 'name2', space: space2) } - let!(:app3) { VCAP::CloudController::AppModel.make(name: 'name3', space: space2) } - let!(:app1_label1) { VCAP::CloudController::AppLabelModel.make(resource_guid: app1.guid, key_name: 'foo', value: 'funky') } - let!(:app2_label1) { VCAP::CloudController::AppLabelModel.make(resource_guid: app2.guid, key_name: 'foo', value: 'funky') } - let!(:app2_label2) { VCAP::CloudController::AppLabelModel.make(resource_guid: app2.guid, key_name: 'fruit', value: 'strawberry') } - let!(:app3_label1) { VCAP::CloudController::AppLabelModel.make(resource_guid: app3.guid, key_name: 'fruit', value: 'strawberry') } + let!(:space1) { create(:space) } + let!(:space2) { create(:space) } + let!(:app1) { create(:app_model, name: 'name1', space: space1) } + let!(:app2) { create(:app_model, name: 'name2', space: space2) } + let!(:app3) { create(:app_model, name: 'name3', space: space2) } + let!(:app1_label1) { create(:app_label_model, resource_guid: app1.guid, key_name: 'foo', value: 'funky') } + let!(:app2_label1) { create(:app_label_model, resource_guid: app2.guid, key_name: 'foo', value: 'funky') } + let!(:app2_label2) { create(:app_label_model, resource_guid: app2.guid, key_name: 'fruit', value: 'strawberry') } + let!(:app3_label1) { create(:app_label_model, resource_guid: app3.guid, key_name: 'fruit', value: 'strawberry') } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } @@ -1255,22 +1254,21 @@ context 'including orgs and spaces' do it 'presents the apps listed with the orgs and spaces included' do - VCAP::CloudController::AppModel.make(:docker, name: 'name1', guid: 'app1-guid', space: space) + create(:app_model, :docker, name: 'name1', guid: 'app1-guid', space: space) org1 = space.organization - org2 = VCAP::CloudController::Organization.make(name: 'org2', guid: 'org2-guid', created_at: 1.day.ago) - space2 = VCAP::CloudController::Space.make(name: 'space2', guid: 'space2-guid', organization: org2) + org2 = create(:organization, name: 'org2', guid: 'org2-guid', created_at: 1.day.ago) + space2 = create(:space, name: 'space2', guid: 'space2-guid', organization: org2) - unused_org = VCAP::CloudController::Organization.make(name: 'unused_org', guid: 'unused_org-guid') + unused_org = create(:organization, name: 'unused_org', guid: 'unused_org-guid') - VCAP::CloudController::Space.make(name: 'unused_space', guid: 'unused_space-guid', organization: unused_org) + create(:space, name: 'unused_space', guid: 'unused_space-guid', organization: unused_org) - VCAP::CloudController::AppModel.make( - :docker, - name: 'name2', - guid: 'app2-guid', - space: space2 - ) + create(:app_model, + :docker, + name: 'name2', + guid: 'app2-guid', + space: space2) get '/v3/apps?per_page=2&include=space,space.organization', nil, admin_header expect(last_response.status).to eq(200) @@ -1345,7 +1343,7 @@ context 'when including orgs' do before do - VCAP::CloudController::AppModel.make + create(:app_model) end it 'eagerly loads spaces to efficiently access space.organization_id' do @@ -1361,16 +1359,15 @@ end describe 'GET /v3/apps/:guid' do - let!(:buildpack) { VCAP::CloudController::Buildpack.make(name: 'bp-name') } - let!(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } + let!(:buildpack) { create(:buildpack, name: 'bp-name') } + let!(:stack) { create(:stack, name: 'stack-name') } let!(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'my_app', - guid: 'app1_guid', - space: space, - desired_state: 'STARTED', - environment_variables: { 'unicorn' => 'horn' } - ) + create(:app_model, + name: 'my_app', + guid: 'app1_guid', + space: space, + desired_state: 'STARTED', + environment_variables: { 'unicorn' => 'horn' }) end before do @@ -1378,8 +1375,8 @@ app_model.lifecycle_data.buildpacks = [buildpack.name] app_model.lifecycle_data.stack = stack.name app_model.lifecycle_data.save - app_model.add_process(VCAP::CloudController::ProcessModel.make(instances: 1)) - app_model.add_process(VCAP::CloudController::ProcessModel.make(instances: 2)) + app_model.add_process(create(:process, instances: 1)) + app_model.add_process(create(:process, instances: 2)) end context 'when getting an app' do @@ -1627,12 +1624,11 @@ context 'when getting an apps environment variables' do let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/env", nil, user_headers } } let!(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'my_app', - guid: 'app1_guid', - space: space, - environment_variables: { 'unicorn' => 'horn' } - ) + create(:app_model, + name: 'my_app', + guid: 'app1_guid', + space: space, + environment_variables: { 'unicorn' => 'horn' }) end let(:app_model_response_object) do @@ -1708,26 +1704,23 @@ let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/env", nil, user_headers } } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'my_app', - space: space, - environment_variables: { 'unicorn' => 'horn' } - ) + create(:app_model, + name: 'my_app', + space: space, + environment_variables: { 'unicorn' => 'horn' }) end let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - space: space, - name: 'si-name', - tags: ['50% off'] - ) + create(:managed_service_instance, + space: space, + name: 'si-name', + tags: ['50% off']) end let(:service_binding) do - VCAP::CloudController::ServiceBinding.make( - service_instance: service_instance, - app: app_model, - syslog_drain_url: 'https://syslog.example.com/drain', - credentials: { password: 'top-secret' } - ) + create(:service_binding, + service_instance: service_instance, + app: app_model, + syslog_drain_url: 'https://syslog.example.com/drain', + credentials: { password: 'top-secret' }) end let(:expected_response) do { @@ -1828,7 +1821,7 @@ context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do @@ -1844,46 +1837,42 @@ end describe 'GET /v3/apps/:guid/builds' do - let(:app_model) { VCAP::CloudController::AppModel.make(space: space, name: 'my-app') } + let(:app_model) { create(:app_model, space: space, name: 'my-app') } let(:build) do - VCAP::CloudController::BuildModel.make( - package: package, - app: app_model, - staging_memory_in_mb: 123, - staging_disk_in_mb: 456, - staging_log_rate_limit: 789, - created_by_user_name: 'bob the builder', - created_by_user_guid: user.guid, - created_by_user_email: 'bob@loblaw.com' - ) + create(:build_model, + package: package, + app: app_model, + staging_memory_in_mb: 123, + staging_disk_in_mb: 456, + staging_log_rate_limit: 789, + created_by_user_name: 'bob the builder', + created_by_user_guid: user.guid, + created_by_user_email: 'bob@loblaw.com') end let!(:second_build) do - VCAP::CloudController::BuildModel.make( - package: package, - app: app_model, - staging_memory_in_mb: 123, - staging_disk_in_mb: 456, - staging_log_rate_limit: 789, - created_at: build.created_at - 1.day, - created_by_user_name: 'bob the builder', - created_by_user_guid: user.guid, - created_by_user_email: 'bob@loblaw.com' - ) - end - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + create(:build_model, + package: package, + app: app_model, + staging_memory_in_mb: 123, + staging_disk_in_mb: 456, + staging_log_rate_limit: 789, + created_at: build.created_at - 1.day, + created_by_user_name: 'bob the builder', + created_by_user_guid: user.guid, + created_by_user_email: 'bob@loblaw.com') + end + let(:package) { create(:package_model, app: app_model) } let(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: build) end let(:second_droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: second_build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: second_build) end let(:body) do { @@ -2016,7 +2005,7 @@ end it 'filters on label_selector' do - VCAP::CloudController::BuildLabelModel.make(key_name: 'fruit', value: 'strawberry', build: build) + create(:build_label_model, key_name: 'fruit', value: 'strawberry', build: build) get "/v3/apps/#{app_model.guid}/builds?label_selector=fruit=strawberry", {}, user_header @@ -2035,11 +2024,10 @@ context 'when getting an apps ssh_enabled value' do let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/ssh_enabled", nil, user_headers } } let!(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'my_app', - guid: 'app1_guid', - space: space - ) + create(:app_model, + name: 'my_app', + guid: 'app1_guid', + space: space) end let(:expected_codes_and_responses) do @@ -2055,11 +2043,11 @@ end describe 'DELETE /v3/apps/guid' do - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'app_name', space: space) } - let!(:package) { VCAP::CloudController::PackageModel.make(app: app_model) } - let!(:droplet) { VCAP::CloudController::DropletModel.make(package: package, app: app_model) } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app_model) } - let!(:deployment) { VCAP::CloudController::DeploymentModel.make(app: app_model) } + let!(:app_model) { create(:app_model, name: 'app_name', space: space) } + let!(:package) { create(:package_model, app: app_model) } + let!(:droplet) { create(:droplet_model, package: package, app: app_model) } + let!(:process) { create(:process, app: app_model) } + let!(:deployment) { create(:deployment_model, app: app_model) } let(:user_email) { nil } it 'deletes an App' do @@ -2140,15 +2128,14 @@ describe 'PATCH /v3/apps/:guid' do let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'original_name', - space: space, - environment_variables: { 'ORIGINAL' => 'ENVAR' }, - desired_state: 'STOPPED' - ) + create(:app_model, + name: 'original_name', + space: space, + environment_variables: { 'ORIGINAL' => 'ENVAR' }, + desired_state: 'STOPPED') end - let!(:web_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } - let(:stack) { VCAP::CloudController::Stack.make(name: 'redhat') } + let!(:web_process) { create(:process, app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } + let(:stack) { create(:stack, name: 'redhat') } let(:update_request) do { @@ -2231,23 +2218,20 @@ end before do - VCAP::CloudController::AppLabelModel.make( - resource_guid: app_model.guid, - key_name: 'delete-me', - value: 'yes' - ) + create(:app_label_model, + resource_guid: app_model.guid, + key_name: 'delete-me', + value: 'yes') - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app_model.guid, - key_name: 'anno1', - value: 'original-value' - ) + create(:app_annotation_model, + resource_guid: app_model.guid, + key_name: 'anno1', + value: 'original-value') - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app_model.guid, - key_name: 'please', - value: 'delete this' - ) + create(:app_annotation_model, + resource_guid: app_model.guid, + key_name: 'please', + value: 'delete this') end it 'updates an app' do @@ -2301,7 +2285,7 @@ end context 'when the app has a process that is started' do - let!(:web_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } + let!(:web_process) { create(:process, app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } before do app_model.desired_state = VCAP::CloudController::ProcessModel::STARTED @@ -2373,21 +2357,19 @@ end describe 'POST /v3/apps/:guid/actions/start' do - let(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } + let(:stack) { create(:stack, name: 'stack-name') } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'app-name', - space: space, - desired_state: 'STOPPED' - ) + create(:app_model, + name: 'app-name', + space: space, + desired_state: 'STOPPED') end context 'app lifecycle is buildpack' do let!(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end before do @@ -2490,19 +2472,18 @@ let(:log_rate_limit) { -1 } let(:space_log_rate_limit) { -1 } let(:org_log_rate_limit) { -1 } - let(:org_quota_definition) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: org_log_rate_limit) } - let(:org) { VCAP::CloudController::Organization.make(quota_definition: org_quota_definition) } - let(:space_quota_definition) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, log_rate_limit: space_log_rate_limit) } - let(:space) { VCAP::CloudController::Space.make(organization: org, space_quota_definition: space_quota_definition) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: log_rate_limit) } + let(:org_quota_definition) { create(:quota_definition, log_rate_limit: org_log_rate_limit) } + let(:org) { create(:organization, quota_definition: org_quota_definition) } + let(:space_quota_definition) { create(:space_quota_definition, organization: org, log_rate_limit: space_log_rate_limit) } + let(:space) { create(:space, organization: org, space_quota_definition: space_quota_definition) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: log_rate_limit) } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'app-name', - space: space, - desired_state: 'STOPPED' - ) + create(:app_model, + name: 'app-name', + space: space, + desired_state: 'STOPPED') end - let(:droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'webby' }) } + let(:droplet) { create(:droplet_model, app: app_model, process_types: { web: 'webby' }) } before do app_model.update(droplet_guid: droplet.guid) @@ -2685,12 +2666,11 @@ describe 'when there is a new desired droplet and revision feature is turned on' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - process_types: { web: 'rackup' }, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package: VCAP::CloudController::PackageModel.make - ) + create(:droplet_model, + app: app_model, + process_types: { web: 'rackup' }, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package: create(:package_model)) end before do @@ -2714,19 +2694,17 @@ end describe 'POST /v3/apps/:guid/actions/stop' do - let(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } + let(:stack) { create(:stack, name: 'stack-name') } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'app-name', - space: space, - desired_state: 'STARTED' - ) + create(:app_model, + name: 'app-name', + space: space, + desired_state: 'STARTED') end let!(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end before do @@ -2879,21 +2857,19 @@ end describe 'POST /v3/apps/:guid/actions/restart' do - let(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } + let(:stack) { create(:stack, name: 'stack-name') } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'app-name', - space: space, - desired_state: 'STARTED' - ) + create(:app_model, + name: 'app-name', + space: space, + desired_state: 'STARTED') end context 'app lifecycle is buildpack' do let!(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end before do @@ -3023,8 +2999,8 @@ describe 'GET /v3/apps/:guid/relationships/current_droplet' do let(:api_call) { ->(user_headers) { get "/v3/apps/#{droplet_model.app_guid}/relationships/current_droplet", nil, user_headers } } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } - let!(:droplet_model) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } + let(:app_model) { create(:app_model, space: space) } + let!(:droplet_model) { create(:droplet_model, app: app_model) } let(:expected_response) do { 'data' => { @@ -3055,19 +3031,18 @@ describe 'GET /v3/apps/:guid/droplets/current' do let(:api_call) { ->(user_headers) { get "/v3/apps/#{droplet_model.app_guid}/droplets/current", nil, user_headers } } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } - let(:package_model) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + let(:app_model) { create(:app_model, space: space) } + let(:package_model) { create(:package_model, app: app_model) } let!(:droplet_model) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - package_guid: package_model.guid, - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - error_description: 'example error', - execution_metadata: 'some-data', - droplet_hash: 'shalalala', - sha256_checksum: 'droplet-sha256-checksum', - process_types: { 'web' => 'start-command' } - ) + create(:droplet_model, + app_guid: app_model.guid, + package_guid: package_model.guid, + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + error_description: 'example error', + execution_metadata: 'some-data', + droplet_hash: 'shalalala', + sha256_checksum: 'droplet-sha256-checksum', + process_types: { 'web' => 'start-command' }) end let(:expected_response) do { @@ -3118,22 +3093,20 @@ end describe 'PATCH /v3/apps/:guid/relationships/current_droplet' do - let(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } + let(:stack) { create(:stack, name: 'stack-name') } let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'my_app', - space: space, - desired_state: 'STOPPED' - ) + create(:app_model, + name: 'my_app', + space: space, + desired_state: 'STOPPED') end let(:droplet) do - VCAP::CloudController::DropletModel.make( - :docker, - app: app_model, - process_types: { web: 'rackup' }, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package: VCAP::CloudController::PackageModel.make - ) + create(:droplet_model, + :docker, + app: app_model, + process_types: { web: 'rackup' }, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package: create(:package_model)) end let(:request_body) { { data: { guid: droplet.guid } } } @@ -3229,11 +3202,10 @@ context 'with two process types' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - process_types: { web: 'rackup', other: 'cron' }, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app_model, + process_types: { web: 'rackup', other: 'cron' }, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end it 'creates audit.app.process.create events for each process' do @@ -3284,22 +3256,21 @@ context 'sidecars' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - :docker, - app: app_model, - process_types: { web: 'rackup' }, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package: VCAP::CloudController::PackageModel.make, - sidecars: - [ - { - name: 'sidecar_one', - command: 'bundle exec rackup', - process_types: ['web'], - memory: 300 - } - ] - ) + create(:droplet_model, + :docker, + app: app_model, + process_types: { web: 'rackup' }, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package: create(:package_model), + sidecars: + [ + { + name: 'sidecar_one', + command: 'bundle exec rackup', + process_types: ['web'], + memory: 300 + } + ]) end before do @@ -3353,15 +3324,14 @@ } end let(:app_model) do - VCAP::CloudController::AppModel.make( - name: 'name1', - space: space, - desired_state: 'STOPPED', - environment_variables: { - override: 'original', - preserve: 'keep' - } - ) + create(:app_model, + name: 'name1', + space: space, + desired_state: 'STOPPED', + environment_variables: { + override: 'original', + preserve: 'keep' + }) end let(:api_call) { ->(user_headers) { patch "/v3/apps/#{app_model.guid}/environment_variables", update_request.to_json, user_headers } } let(:app_model_response_object) do @@ -3407,7 +3377,7 @@ end describe 'GET /v3/apps/:guid/environment_variables' do - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'my_app', space: space, desired_state: 'STARTED', environment_variables: { meep: 'moop' }) } + let(:app_model) { create(:app_model, name: 'my_app', space: space, desired_state: 'STARTED', environment_variables: { meep: 'moop' }) } let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/environment_variables", nil, user_headers } } let(:app_model_response_object) do { @@ -3439,7 +3409,7 @@ context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do @@ -3472,9 +3442,9 @@ end describe 'GET /v3/apps/:guid/permissions' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space, desired_state: 'STOPPED') } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app_model) { create(:app_model, name: 'name1', space: space, desired_state: 'STOPPED') } let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/permissions", nil, user_headers } } let(:read_all_response) do diff --git a/spec/request/buildpacks_spec.rb b/spec/request/buildpacks_spec.rb index 81b07353d88..d7fe5512ead 100644 --- a/spec/request/buildpacks_spec.rb +++ b/spec/request/buildpacks_spec.rb @@ -46,24 +46,24 @@ end context 'when filtered by label_selector' do - let!(:buildpackA) { VCAP::CloudController::Buildpack.make(name: 'A') } - let!(:buildpackAFruit) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'fruit', value: 'strawberry', buildpack: buildpackA) } - let!(:buildpackAAnimal) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'animal', value: 'horse', buildpack: buildpackA) } + let!(:buildpackA) { create(:buildpack, name: 'A') } + let!(:buildpackAFruit) { create(:buildpack_label_model, key_name: 'fruit', value: 'strawberry', buildpack: buildpackA) } + let!(:buildpackAAnimal) { create(:buildpack_label_model, key_name: 'animal', value: 'horse', buildpack: buildpackA) } - let!(:buildpackB) { VCAP::CloudController::Buildpack.make(name: 'B') } - let!(:buildpackBEnv) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'env', value: 'prod', buildpack: buildpackB) } - let!(:buildpackBAnimal) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'animal', value: 'dog', buildpack: buildpackB) } + let!(:buildpackB) { create(:buildpack, name: 'B') } + let!(:buildpackBEnv) { create(:buildpack_label_model, key_name: 'env', value: 'prod', buildpack: buildpackB) } + let!(:buildpackBAnimal) { create(:buildpack_label_model, key_name: 'animal', value: 'dog', buildpack: buildpackB) } - let!(:buildpackC) { VCAP::CloudController::Buildpack.make(name: 'C') } - let!(:buildpackCEnv) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'env', value: 'prod', buildpack: buildpackC) } - let!(:buildpackCAnimal) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'animal', value: 'horse', buildpack: buildpackC) } + let!(:buildpackC) { create(:buildpack, name: 'C') } + let!(:buildpackCEnv) { create(:buildpack_label_model, key_name: 'env', value: 'prod', buildpack: buildpackC) } + let!(:buildpackCAnimal) { create(:buildpack_label_model, key_name: 'animal', value: 'horse', buildpack: buildpackC) } - let!(:buildpackD) { VCAP::CloudController::Buildpack.make(name: 'D') } - let!(:buildpackDEnv) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'env', value: 'prod', buildpack: buildpackD) } + let!(:buildpackD) { create(:buildpack, name: 'D') } + let!(:buildpackDEnv) { create(:buildpack_label_model, key_name: 'env', value: 'prod', buildpack: buildpackD) } - let!(:buildpackE) { VCAP::CloudController::Buildpack.make(name: 'E') } - let!(:buildpackEEnv) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'env', value: 'staging', buildpack: buildpackE) } - let!(:buildpackEAnimal) { VCAP::CloudController::BuildpackLabelModel.make(key_name: 'animal', value: 'dog', buildpack: buildpackE) } + let!(:buildpackE) { create(:buildpack, name: 'E') } + let!(:buildpackEEnv) { create(:buildpack_label_model, key_name: 'env', value: 'staging', buildpack: buildpackE) } + let!(:buildpackEAnimal) { create(:buildpack_label_model, key_name: 'animal', value: 'dog', buildpack: buildpackE) } it 'returns the matching buildpacks' do get '/v3/buildpacks?label_selector=!fruit,env=prod,animal in (dog,horse)', nil, admin_headers @@ -75,9 +75,9 @@ end context 'when filtered by null stack' do - let!(:stack) { VCAP::CloudController::Stack.make } - let!(:buildpack_without_stack) { VCAP::CloudController::Buildpack.make(stack: nil) } - let!(:buildpack_with_stack) { VCAP::CloudController::Buildpack.make(stack: stack.name) } + let!(:stack) { create(:stack) } + let!(:buildpack_without_stack) { create(:buildpack, stack: nil) } + let!(:buildpack_with_stack) { create(:buildpack, stack: stack.name) } it 'returns the matching buildpacks' do get '/v3/buildpacks?stacks=', nil, admin_headers @@ -89,16 +89,16 @@ end context 'When buildpacks exist' do - let!(:stack1) { VCAP::CloudController::Stack.make } - let!(:stack2) { VCAP::CloudController::Stack.make } - let!(:stack3) { VCAP::CloudController::Stack.make } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack) } + let!(:stack3) { create(:stack) } - let!(:buildpack4) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 2, lifecycle: 'cnb') } - let!(:buildpack5) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 1, lifecycle: 'cnb') } + let!(:buildpack4) { create(:buildpack, stack: stack1.name, position: 2, lifecycle: 'cnb') } + let!(:buildpack5) { create(:buildpack, stack: stack1.name, position: 1, lifecycle: 'cnb') } - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 1) } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(stack: stack2.name, position: 3) } - let!(:buildpack3) { VCAP::CloudController::Buildpack.make(stack: stack3.name, position: 2) } + let!(:buildpack1) { create(:buildpack, stack: stack1.name, position: 1) } + let!(:buildpack2) { create(:buildpack, stack: stack2.name, position: 3) } + let!(:buildpack3) { create(:buildpack, stack: stack3.name, position: 2) } it 'returns a paginated list of buildpacks, sorted by lifecycle and position' do get '/v3/buildpacks?page=1&per_page=2', nil, headers @@ -705,8 +705,8 @@ end context 'permissions' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { get '/v3/buildpacks', nil, user_headers } } let(:expected_codes_and_responses) { Hash.new({ code: 200 }.freeze) } @@ -730,7 +730,7 @@ end context 'when authenticated but not admin' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:headers) { headers_for(user) } it 'returns 403' do @@ -743,11 +743,11 @@ end context 'when authenticated and admin' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:headers) { admin_headers_for(user) } context 'when successful' do - let(:stack) { VCAP::CloudController::Stack.make } + let(:stack) { create(:stack) } let(:params) do { name: 'the-r3al_Name', @@ -812,9 +812,9 @@ end describe 'position' do - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(position: 1) } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(position: 2) } - let!(:buildpack3) { VCAP::CloudController::Buildpack.make(position: 3) } + let!(:buildpack1) { create(:buildpack, position: 1) } + let!(:buildpack2) { create(:buildpack, position: 2) } + let!(:buildpack3) { create(:buildpack, position: 3) } context 'the position is not provided' do it 'defaults the position value to 1' do @@ -863,7 +863,7 @@ describe 'GET /v3/buildpacks/:guid' do let(:params) { {} } - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } context 'when not authenticated' do it 'returns 401' do @@ -876,9 +876,9 @@ end context 'when authenticated' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -928,7 +928,7 @@ end describe 'DELETE /v3/buildpacks/:guid' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'deletes a buildpack asynchronously' do delete "/v3/buildpacks/#{buildpack.guid}", nil, admin_headers @@ -952,7 +952,7 @@ end describe 'POST /v3/buildpacks/:guid/upload' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } before do allow_any_instance_of(VCAP::CloudController::BuildpackUploadMessage).to receive(:valid?).and_return(true) @@ -979,7 +979,7 @@ end describe 'PATCH /v3/buildpacks/:guid' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'updates a buildpack' do params = { enabled: false } diff --git a/spec/request/builds_spec.rb b/spec/request/builds_spec.rb index 89b3fa2bc70..656f9e61ff3 100644 --- a/spec/request/builds_spec.rb +++ b/spec/request/builds_spec.rb @@ -3,23 +3,22 @@ RSpec.describe 'Builds' do let(:bbs_stager_client) { instance_double(VCAP::CloudController::Diego::BbsStagerClient) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } let(:developer_headers) { headers_for(developer, user_name: user_name, email: 'bob@loblaw.com') } let(:user_name) { 'bob the builder' } let(:parsed_response) { Oj.load(last_response.body) } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: 'my-app') } - let(:second_app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: 'my-second-app') } + let(:app_model) { create(:app_model, space: space, name: 'my-app') } + let(:second_app_model) { create(:app_model, space: space, name: 'my-second-app') } let(:rails_logger) { double('rails_logger', info: nil) } describe 'POST /v3/builds' do let(:package) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::PackageModel::READY_STATE, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + state: VCAP::CloudController::PackageModel::READY_STATE, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let(:diego_staging_response) do { @@ -123,7 +122,7 @@ context 'permissions' do let(:api_call) { ->(user_headers) { post '/v3/builds', create_request.to_json, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new( @@ -201,7 +200,7 @@ end context 'when stack is DISABLED' do - let(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'DISABLED', description: 'cflinuxfs3 stack is now disabled') } + let(:disabled_stack) { create(:stack, name: 'cflinuxfs3', state: 'DISABLED', description: 'cflinuxfs3 stack is now disabled') } let(:create_request) do { lifecycle: { @@ -228,7 +227,7 @@ end context 'when stack is RESTRICTED' do - let(:restricted_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } + let(:restricted_stack) { create(:stack, name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } let(:create_request) do { lifecycle: { @@ -259,7 +258,7 @@ context 'app has previous builds' do before do - VCAP::CloudController::BuildModel.make(app: app_model, state: VCAP::CloudController::BuildModel::STAGED_STATE) + create(:build_model, app: app_model, state: VCAP::CloudController::BuildModel::STAGED_STATE) end it 'returns 201 and creates build' do @@ -275,7 +274,9 @@ end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'DEPRECATED', description: 'cflinuxfs3 stack is deprecated. Please migrate your application to cflinuxfs4') } + let(:deprecated_stack) do + create(:stack, name: 'cflinuxfs3', state: 'DEPRECATED', description: 'cflinuxfs3 stack is deprecated. Please migrate your application to cflinuxfs4') + end let(:create_request) do { lifecycle: { @@ -315,7 +316,7 @@ context 'app has previous builds' do before do - VCAP::CloudController::BuildModel.make(app: app_model, state: VCAP::CloudController::BuildModel::STAGED_STATE) + create(:build_model, app: app_model, state: VCAP::CloudController::BuildModel::STAGED_STATE) end it 'returns 201 and stages the app' do @@ -344,45 +345,41 @@ describe 'GET /v3/builds' do let(:build) do - VCAP::CloudController::BuildModel.make( - package: package, - app: app_model, - created_by_user_name: 'bob the builder', - created_by_user_guid: developer.guid, - created_by_user_email: 'bob@loblaw.com', - staging_memory_in_mb: 123, - staging_disk_in_mb: 456, - staging_log_rate_limit: 234 - ) + create(:build_model, + package: package, + app: app_model, + created_by_user_name: 'bob the builder', + created_by_user_guid: developer.guid, + created_by_user_email: 'bob@loblaw.com', + staging_memory_in_mb: 123, + staging_disk_in_mb: 456, + staging_log_rate_limit: 234) end let!(:second_build) do - VCAP::CloudController::BuildModel.make( - package: second_package, - app: app_model, - created_at: build.created_at - 1.day, - created_by_user_name: 'bob the builder', - created_by_user_guid: developer.guid, - created_by_user_email: 'bob@loblaw.com', - staging_memory_in_mb: 789, - staging_disk_in_mb: 12, - staging_log_rate_limit: 345 - ) + create(:build_model, + package: second_package, + app: app_model, + created_at: build.created_at - 1.day, + created_by_user_name: 'bob the builder', + created_by_user_guid: developer.guid, + created_by_user_email: 'bob@loblaw.com', + staging_memory_in_mb: 789, + staging_disk_in_mb: 12, + staging_log_rate_limit: 345) end - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:second_package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + let(:package) { create(:package_model, app: app_model) } + let(:second_package) { create(:package_model, app: app_model) } let(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: build) end let(:second_droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: second_package.guid, - build: second_build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: second_package.guid, + build: second_build) end let(:body) do { lifecycle: { type: 'buildpack', data: { buildpacks: ['http://github.com/myorg/awesome-buildpack'], @@ -429,7 +426,7 @@ it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get '/v3/builds', nil, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new( @@ -445,9 +442,9 @@ end context 'when there are other spaces the developer cannot see' do - let(:non_accessible_space) { VCAP::CloudController::Space.make } - let(:non_accessible_app_model) { VCAP::CloudController::AppModel.make(space_guid: non_accessible_space.guid, name: 'other-app') } - let!(:non_accessible_build) { VCAP::CloudController::BuildModel.make(app: non_accessible_app_model) } + let(:non_accessible_space) { create(:space) } + let(:non_accessible_app_model) { create(:app_model, space: non_accessible_space, name: 'other-app') } + let!(:non_accessible_build) { create(:build_model, app: non_accessible_app_model) } let(:per_page) { 2 } let(:order_by) { '-created_at' } @@ -533,7 +530,7 @@ end it 'filters on label_selector' do - VCAP::CloudController::BuildLabelModel.make(key_name: 'fruit', value: 'strawberry', build: build) + create(:build_label_model, key_name: 'fruit', value: 'strawberry', build: build) get '/v3/builds?label_selector=fruit=strawberry', {}, developer_headers @@ -563,24 +560,22 @@ describe 'GET /v3/builds/:guid' do let(:build) do - VCAP::CloudController::BuildModel.make( - package: package, - app: app_model, - staging_memory_in_mb: 123, - staging_disk_in_mb: 456, - staging_log_rate_limit: 789, - created_by_user_name: 'bob the builder', - created_by_user_guid: developer.guid, - created_by_user_email: 'bob@loblaw.com' - ) + create(:build_model, + package: package, + app: app_model, + staging_memory_in_mb: 123, + staging_disk_in_mb: 456, + staging_log_rate_limit: 789, + created_by_user_name: 'bob the builder', + created_by_user_guid: developer.guid, + created_by_user_email: 'bob@loblaw.com') end - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + let(:package) { create(:package_model, app: app_model) } let(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: build) end let(:body) do { lifecycle: { type: 'buildpack', data: { buildpacks: ['http://github.com/myorg/awesome-buildpack'], @@ -648,7 +643,7 @@ describe 'permissions' do it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:api_call) { ->(user_headers) { get "v3/builds/#{build.guid}", nil, user_headers } } let(:expected_codes_and_responses) do @@ -663,8 +658,8 @@ end describe 'PATCH /v3/builds/:guid' do - let(:package_model) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:build_model) { VCAP::CloudController::BuildModel.make(app: app_model, package: package_model) } + let(:package_model) { create(:package_model, app: app_model) } + let(:build_model) { create(:build_model, app: app_model, package: package_model) } let(:metadata) do { labels: { @@ -719,7 +714,7 @@ describe 'permissions' do let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:api_call) { ->(user_headers) { patch "/v3/builds/#{build_model.guid}", { metadata: }.to_json, user_headers } } let(:expected_codes_and_responses) do diff --git a/spec/request/deployments_spec.rb b/spec/request/deployments_spec.rb index 88db57c603f..a9340738295 100644 --- a/spec/request/deployments_spec.rb +++ b/spec/request/deployments_spec.rb @@ -2,12 +2,12 @@ require 'request_spec_shared_examples' RSpec.describe 'Deployments' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:space) { app_model.space } let(:org) { space.organization } - let(:app_model) { VCAP::CloudController::AppModel.make(desired_state: VCAP::CloudController::ProcessModel::STARTED) } - let(:droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'webby' }) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model) } + let(:app_model) { create(:app_model, desired_state: VCAP::CloudController::ProcessModel::STARTED) } + let(:droplet) { create(:droplet_model, app: app_model, process_types: { web: 'webby' }) } + let!(:process_model) { create(:process, app: app_model) } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } let(:user_header) { headers_for(user, email: user_email, user_name: user_name) } let(:user_email) { Sham.email } @@ -111,7 +111,7 @@ context 'when a droplet is supplied with the request' do let(:user) { make_developer_for_space(space) } - let(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'start-me-up' }) } + let(:other_droplet) { create(:droplet_model, app: app_model, process_types: { web: 'start-me-up' }, set_as_current_droplet: false) } let(:create_request) do { droplet: { @@ -190,9 +190,9 @@ context 'when a revision is supplied with the request' do let(:user) { make_developer_for_space(space) } - let(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'webby' }) } - let!(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, droplet: other_droplet, created_at: 5.days.ago) } - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, droplet: droplet) } + let(:other_droplet) { create(:droplet_model, app: app_model, process_types: { web: 'webby' }, set_as_current_droplet: false) } + let!(:revision) { create(:revision_model, app: app_model, droplet: other_droplet, created_at: 5.days.ago) } + let!(:revision2) { create(:revision_model, app: app_model, droplet: droplet) } let(:create_request) do { @@ -399,7 +399,7 @@ context 'when revisions are enabled' do let(:user) { make_developer_for_space(space) } - let(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'start-me-up' }) } + let(:other_droplet) { create(:droplet_model, app: app_model, process_types: { web: 'start-me-up' }, set_as_current_droplet: false) } let(:create_request) do { droplet: { @@ -480,7 +480,7 @@ context 'when the app is stopped' do let(:user) { make_developer_for_space(space) } - let(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'start-me-up' }) } + let(:other_droplet) { create(:droplet_model, app: app_model, process_types: { web: 'start-me-up' }, set_as_current_droplet: false) } let(:create_request) do { droplet: { @@ -572,9 +572,9 @@ end context 'telemetry' do - let!(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'webboo' }) } - let!(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, droplet: other_droplet, created_at: 5.days.ago) } - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, droplet: droplet) } + let!(:other_droplet) { create(:droplet_model, app: app_model, process_types: { web: 'webboo' }, set_as_current_droplet: false) } + let!(:revision) { create(:revision_model, app: app_model, droplet: other_droplet, created_at: 5.days.ago) } + let!(:revision2) { create(:revision_model, app: app_model, droplet: droplet) } let(:user) { make_developer_for_space(space) } let(:create_request) do @@ -1183,7 +1183,7 @@ end context 'memory_in_mb' do - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, instances: 10) } + let!(:process_model) { create(:process, app: app_model, instances: 10) } let(:user) { make_developer_for_space(space) } let(:memory_in_mb) { 500 } let(:create_request) do @@ -1212,7 +1212,7 @@ context 'when memory_in_mb violates a quota' do let(:memory_in_mb) { 1001 } - let(:quota) { VCAP::CloudController::QuotaDefinition.make(memory_limit: 10_000) } + let(:quota) { create(:quota_definition, memory_limit: 10_000) } before do org.quota_definition = quota @@ -1249,7 +1249,7 @@ end context 'disk_in_mb' do - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, instances: 10) } + let!(:process_model) { create(:process, app: app_model, instances: 10) } let(:user) { make_developer_for_space(space) } let(:disk_in_mb) { 500 } let(:create_request) do @@ -1313,7 +1313,7 @@ end context 'log_rate_limit_in_bytes_per_second' do - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, instances: 10) } + let!(:process_model) { create(:process, app: app_model, instances: 10) } let(:user) { make_developer_for_space(space) } let(:log_rate_limit_in_bytes_per_second) { 500 } let(:create_request) do @@ -1342,7 +1342,7 @@ context 'when log_rate_limit_in_bytes_per_second violates a quota' do let(:log_rate_limit_in_bytes_per_second) { 1001 } - let(:quota) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: 1000) } + let(:quota) { create(:quota_definition, log_rate_limit: 1000) } before do org.quota_definition = quota @@ -1379,7 +1379,7 @@ end context 'web_instances' do - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, instances: 10) } + let!(:process_model) { create(:process, app: app_model, instances: 10) } let(:user) { make_developer_for_space(space) } let(:web_instances) { 5 } let(:create_request) do @@ -1408,7 +1408,7 @@ context 'when web_instances violates a quota' do let(:web_instances) { 100_000 } - let(:quota) { VCAP::CloudController::QuotaDefinition.make(memory_limit: 1000) } + let(:quota) { create(:quota_definition, memory_limit: 1000) } before do org.quota_definition = quota @@ -1446,7 +1446,7 @@ context 'validation failures' do let(:user) { make_developer_for_space(space) } - let(:smol_quota) { VCAP::CloudController::QuotaDefinition.make(memory_limit: 1) } + let(:smol_quota) { create(:quota_definition, memory_limit: 1) } let(:create_request) do { relationships: { @@ -1476,10 +1476,9 @@ describe 'PATCH /v3/deployments/:guid' do let(:user) { make_developer_for_space(space) } let(:deployment) do - VCAP::CloudController::DeploymentModel.make( - app: app_model, - droplet: droplet - ) + create(:deployment_model, + app: app_model, + droplet: droplet) end let(:update_request) do { @@ -1584,13 +1583,12 @@ describe 'GET /v3/deployments/:guid' do let(:api_call) { ->(user_headers) { get "/v3/deployments/#{deployment.guid}", nil, user_headers } } - let(:old_droplet) { VCAP::CloudController::DropletModel.make } + let(:old_droplet) { create(:droplet_model) } let(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: droplet, - previous_droplet: old_droplet - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: droplet, + previous_droplet: old_droplet) end let(:expected_response) do { @@ -1651,15 +1649,14 @@ context 'PAUSED deployment' do let(:user) { make_developer_for_space(space) } let(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: droplet, - previous_droplet: old_droplet, - strategy: 'canary', - state: VCAP::CloudController::DeploymentModel::PAUSED_STATE, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::PAUSED_STATUS_REASON - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: droplet, + previous_droplet: old_droplet, + strategy: 'canary', + state: VCAP::CloudController::DeploymentModel::PAUSED_STATE, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::PAUSED_STATUS_REASON) end it 'includes the continue action in the links' do @@ -1684,12 +1681,11 @@ context 'when a deployment has had an error' do let(:user) { make_developer_for_space(space) } let(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: droplet, - previous_droplet: old_droplet, - error: 'Quota error' - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: droplet, + previous_droplet: old_droplet, + error: 'Quota error') end it 'includes the error as part of the status details' do @@ -1703,28 +1699,27 @@ end describe 'GET /v3/deployments/' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:space) { app_model.space } let(:app_model) { droplet.app } - let(:droplet) { VCAP::CloudController::DropletModel.make(guid: 'droplet1') } + let(:droplet) { create(:droplet_model, guid: 'droplet1') } let!(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: app_model.droplet, - previous_droplet: app_model.droplet, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: app_model.droplet, + previous_droplet: app_model.droplet, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) end context 'with an admin who can see all deployments' do let(:admin_user_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } - let(:droplet2) { VCAP::CloudController::DropletModel.make(guid: 'droplet2') } - let(:droplet3) { VCAP::CloudController::DropletModel.make(guid: 'droplet3') } - let(:droplet4) { VCAP::CloudController::DropletModel.make(guid: 'droplet4') } - let(:droplet5) { VCAP::CloudController::DropletModel.make(guid: 'droplet5') } + let(:droplet2) { create(:droplet_model, guid: 'droplet2') } + let(:droplet3) { create(:droplet_model, guid: 'droplet3') } + let(:droplet4) { create(:droplet_model, guid: 'droplet4') } + let(:droplet5) { create(:droplet_model, guid: 'droplet5') } let(:app2) { droplet2.app } let(:app3) { droplet3.app } let(:app4) { droplet4.app } @@ -1738,44 +1733,44 @@ end let!(:deployment2) do - VCAP::CloudController::DeploymentModelTestFactory.make(app: app2, droplet: droplet2, - previous_droplet: droplet2, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::CANCELING_STATE, - status_reason: VCAP::CloudController::DeploymentModel::CANCELING_STATUS_REASON) + create(:deployment_model_test_factory, app: app2, droplet: droplet2, + previous_droplet: droplet2, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::CANCELING_STATE, + status_reason: VCAP::CloudController::DeploymentModel::CANCELING_STATUS_REASON) end let!(:deployment3) do - VCAP::CloudController::DeploymentModelTestFactory.make(app: app3, droplet: droplet3, - previous_droplet: droplet3, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYED_STATUS_REASON) + create(:deployment_model_test_factory, app: app3, droplet: droplet3, + previous_droplet: droplet3, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYED_STATUS_REASON) end let!(:deployment4) do - VCAP::CloudController::DeploymentModelTestFactory.make(app: app4, droplet: droplet4, - previous_droplet: droplet4, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::CANCELED_STATE, - status_reason: VCAP::CloudController::DeploymentModel::CANCELED_STATUS_REASON) + create(:deployment_model_test_factory, app: app4, droplet: droplet4, + previous_droplet: droplet4, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::CANCELED_STATE, + status_reason: VCAP::CloudController::DeploymentModel::CANCELED_STATUS_REASON) end let!(:deployment5) do - VCAP::CloudController::DeploymentModelTestFactory.make(app: app5, droplet: droplet5, - previous_droplet: droplet5, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, - status_reason: VCAP::CloudController::DeploymentModel::SUPERSEDED_STATUS_REASON) + create(:deployment_model_test_factory, app: app5, droplet: droplet5, + previous_droplet: droplet5, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, + status_reason: VCAP::CloudController::DeploymentModel::SUPERSEDED_STATUS_REASON) end let!(:deployment6) do - VCAP::CloudController::DeploymentModelTestFactory.make(app: app5, droplet: droplet5, - previous_droplet: droplet5, - strategy: 'canary', - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) + create(:deployment_model_test_factory, app: app5, droplet: droplet5, + previous_droplet: droplet5, + strategy: 'canary', + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) end def json_for_deployment(deployment, app_model, droplet, status_value, status_reason, cancel_link=true) @@ -2036,16 +2031,14 @@ def json_for_options(deployment) end it 'returns a list of label filtered deployments' do - VCAP::CloudController::DeploymentLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: deployment2.guid - ) - VCAP::CloudController::DeploymentLabelModel.make( - key_name: 'release', - value: 'unstable', - resource_guid: deployment3.guid - ) + create(:deployment_label_model, + key_name: 'release', + value: 'stable', + resource_guid: deployment2.guid) + create(:deployment_label_model, + key_name: 'release', + value: 'unstable', + resource_guid: deployment3.guid) get '/v3/deployments?label_selector=release=stable', nil, admin_user_header expect(last_response.status).to eq(200) @@ -2059,9 +2052,9 @@ def json_for_options(deployment) context 'when there are other spaces the developer cannot see' do let(:user) { make_developer_for_space(space) } let(:another_app) { another_droplet.app } - let(:another_droplet) { VCAP::CloudController::DropletModel.make } + let(:another_droplet) { create(:droplet_model) } let!(:another_space) { another_app.space } - let!(:another_deployment) { VCAP::CloudController::DeploymentModelTestFactory.make(app: another_app, droplet: another_droplet) } + let!(:another_deployment) { create(:deployment_model_test_factory, app: another_app, droplet: another_droplet) } let(:user_header) { headers_for(user) } @@ -2167,13 +2160,12 @@ def json_for_options(deployment) end describe 'POST /v3/deployments/:guid/actions/cancel' do - let(:old_droplet) { VCAP::CloudController::DropletModel.make(app: app_model, process_types: { 'web' => 'run' }) } + let(:old_droplet) { create(:droplet_model, app: app_model, process_types: { 'web' => 'run' }) } let(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: droplet, - previous_droplet: old_droplet - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: droplet, + previous_droplet: old_droplet) end context 'with a running deployment' do @@ -2227,11 +2219,10 @@ def json_for_options(deployment) describe 'POST /v3/deployments/:guid/actions/continue' do let(:state) {} let(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app_model, - droplet: droplet, - state: state - ) + create(:deployment_model_test_factory, + app: app_model, + droplet: droplet, + state: state) end context 'when the deployment is in paused state' do diff --git a/spec/request/domains_spec.rb b/spec/request/domains_spec.rb index 024b7792086..0107b6a3c2c 100644 --- a/spec/request/domains_spec.rb +++ b/spec/request/domains_spec.rb @@ -2,8 +2,8 @@ require 'request_spec_shared_examples' RSpec.describe 'Domains Request' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:org) { space.organization } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } let(:user_header) { headers_for(user, scopes: []) } @@ -46,8 +46,8 @@ end describe 'when the user is logged in' do - let!(:non_visible_org) { VCAP::CloudController::Organization.make(guid: 'non-visible') } - let!(:user_visible_org) { VCAP::CloudController::Organization.make(guid: 'visible') } + let!(:non_visible_org) { create(:organization, guid: 'non-visible') } + let!(:user_visible_org) { create(:organization, guid: 'visible') } # (domain) | (owning org) | (visible orgs shared to) # (visible_owned_private_domain) | (org) | (non_visible_org, user_visible_org) @@ -55,16 +55,16 @@ # (not_visible_private_domain) | (non_visible_org) | () # (shared_domain) | () | () let!(:visible_owned_private_domain) do - VCAP::CloudController::PrivateDomain.make(guid: 'domain1', name: 'domain1.com', owning_organization: org) + create(:private_domain, guid: 'domain1', name: 'domain1.com', owning_organization: org) end let!(:visible_shared_private_domain) do - VCAP::CloudController::PrivateDomain.make(guid: 'domain2', name: 'domain2.com', owning_organization: non_visible_org) + create(:private_domain, guid: 'domain2', name: 'domain2.com', owning_organization: non_visible_org) end let!(:not_visible_private_domain) do - VCAP::CloudController::PrivateDomain.make(guid: 'domain3', name: 'domain3.com', owning_organization: non_visible_org) + create(:private_domain, guid: 'domain3', name: 'domain3.com', owning_organization: non_visible_org) end let!(:shared_domain) do - VCAP::CloudController::SharedDomain.make(guid: 'domain4', name: 'domain4.com') + create(:shared_domain, guid: 'domain4', name: 'domain4.com') end let(:visible_owned_private_domain_json) do @@ -450,12 +450,12 @@ end describe 'labels' do - let!(:domain1) { VCAP::CloudController::PrivateDomain.make(name: 'dom1.com', owning_organization: org) } - let!(:domain1_label) { VCAP::CloudController::DomainLabelModel.make(resource_guid: domain1.guid, key_name: 'animal', value: 'dog') } + let!(:domain1) { create(:private_domain, name: 'dom1.com', owning_organization: org) } + let!(:domain1_label) { create(:domain_label_model, resource_guid: domain1.guid, key_name: 'animal', value: 'dog') } - let!(:domain2) { VCAP::CloudController::PrivateDomain.make(name: 'dom2.com', owning_organization: org) } - let!(:domain2_label) { VCAP::CloudController::DomainLabelModel.make(resource_guid: domain2.guid, key_name: 'animal', value: 'cow') } - let!(:domain2__exclusive_label) { VCAP::CloudController::DomainLabelModel.make(resource_guid: domain2.guid, key_name: 'santa', value: 'claus') } + let!(:domain2) { create(:private_domain, name: 'dom2.com', owning_organization: org) } + let!(:domain2_label) { create(:domain_label_model, resource_guid: domain2.guid, key_name: 'animal', value: 'cow') } + let!(:domain2__exclusive_label) { create(:domain_label_model, resource_guid: domain2.guid, key_name: 'santa', value: 'claus') } it 'returns a 200 and the filtered domains for "in" label selector' do get '/v3/domains?label_selector=animal in (dog)', nil, admin_header @@ -620,12 +620,12 @@ end describe 'GET /v3/domains/:domain_guid/route_reservations' do - let!(:non_visible_org) { VCAP::CloudController::Organization.make(guid: 'non-visible') } + let!(:non_visible_org) { create(:organization, guid: 'non-visible') } let!(:non_visible_domain) do - VCAP::CloudController::PrivateDomain.make(guid: 'non-visible', name: 'non-visible-domain.com', owning_organization: non_visible_org) + create(:private_domain, guid: 'non-visible', name: 'non-visible-domain.com', owning_organization: non_visible_org) end let!(:domain) do - VCAP::CloudController::PrivateDomain.make(guid: 'visible', name: 'visibledomain.com', owning_organization: org) + create(:private_domain, guid: 'visible', name: 'visibledomain.com', owning_organization: org) end context 'no route matches' do @@ -656,7 +656,7 @@ context 'there are route matches' do context 'when querying with both host and path' do - let!(:matching_route) { VCAP::CloudController::Route.make(space: space, domain: domain, host: 'my-host', path: '/somepath') } + let!(:matching_route) { create(:route, space: space, domain: domain, host: 'my-host', path: '/somepath') } let(:api_call) { ->(user_headers) { get "/v3/domains/#{domain.guid}/route_reservations?host=my-host&path=/somepath", nil, user_headers } } let(:matching_route_json) do @@ -683,7 +683,7 @@ end context 'when querying with only host' do - let!(:other_route) { VCAP::CloudController::Route.make(space: space, domain: domain, host: 'my-host', path: '/path/to/something') } + let!(:other_route) { create(:route, space: space, domain: domain, host: 'my-host', path: '/path/to/something') } let(:api_call) { ->(user_headers) { get "/v3/domains/#{domain.guid}/route_reservations?host=my-host", nil, user_headers } } let(:matching_route_json) do @@ -711,7 +711,7 @@ context 'when querying with only port' do let(:router_group) { VCAP::CloudController::RoutingApi::RouterGroup.new({ 'type' => 'tcp', 'reservable_ports' => '123' }) } - let(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'some-router-group', name: 'my.domain') } + let(:domain) { create(:shared_domain, router_group_guid: 'some-router-group', name: 'my.domain') } let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } before do @@ -724,7 +724,7 @@ allow(routing_api_client).to receive_messages(enabled?: true, router_group: router_group) end - let!(:other_route) { VCAP::CloudController::Route.make(host: '', space: space, domain: domain, port: 123) } + let!(:other_route) { create(:route, host: '', space: space, domain: domain, port: 123) } let(:api_call) { ->(user_headers) { get "/v3/domains/#{domain.guid}/route_reservations?port=123", nil, user_headers } } let(:matching_route_json) do @@ -897,8 +897,8 @@ end describe 'when creating a private domain' do - let(:shared_org1) { VCAP::CloudController::Organization.make(guid: 'shared-org1') } - let(:shared_org2) { VCAP::CloudController::Organization.make(guid: 'shared-org2') } + let(:shared_org1) { create(:organization, guid: 'shared-org1') } + let(:shared_org2) { create(:organization, guid: 'shared-org2') } let(:domain_json) do { @@ -1001,7 +1001,7 @@ let(:headers) { set_user_with_header_as_role(user: user, role: 'org_manager', org: org) } context 'when the feature flag is disabled' do - let!(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'private_domain_creation', enabled: false, error_message: 'my name is bob') } + let!(:feature_flag) { create(:feature_flag, name: 'private_domain_creation', enabled: false, error_message: 'my name is bob') } context 'when the user is not an admin' do it 'returns a 403' do @@ -1048,7 +1048,7 @@ context 'when the org has exceeded its private domains quota' do it 'returns a 422 and a helpful error message' do - org.update(quota_definition: VCAP::CloudController::QuotaDefinition.make(total_private_domains: 0)) + org.update(quota_definition: create(:quota_definition, total_private_domains: 0)) post '/v3/domains', private_domain_params.to_json, headers @@ -1100,7 +1100,7 @@ end context 'when the user does not have proper permissions in one of the shared orgs' do - let(:shared_org3) { VCAP::CloudController::Organization.make(guid: 'shared-org3') } + let(:shared_org3) { create(:organization, guid: 'shared-org3') } let(:unwriteable_shared_org) do { @@ -1135,10 +1135,9 @@ context 'when one of the shared orgs is suspended' do let(:shared_org3) do - VCAP::CloudController::Organization.make( - guid: 'shared-org3', - status: VCAP::CloudController::Organization::SUSPENDED - ) + create(:organization, + guid: 'shared-org3', + status: VCAP::CloudController::Organization::SUSPENDED) end let(:suspended_shared_org) do @@ -1267,8 +1266,8 @@ let(:headers) { set_user_with_header_as_role(role: 'admin') } context 'creating a sub domain of a domain owned by another organization' do - let(:organization_to_scope_to) { VCAP::CloudController::Organization.make } - let(:existing_private_domain) { VCAP::CloudController::PrivateDomain.make } + let(:organization_to_scope_to) { create(:organization) } + let(:existing_private_domain) { create(:private_domain) } let(:params) do { @@ -1317,7 +1316,7 @@ describe 'collisions' do context 'with an existing domain' do - let!(:existing_domain) { VCAP::CloudController::SharedDomain.make } + let!(:existing_domain) { create(:shared_domain) } let(:params) do { @@ -1335,8 +1334,8 @@ end context 'with an existing route' do - let(:existing_domain) { VCAP::CloudController::SharedDomain.make } - let(:existing_route) { VCAP::CloudController::Route.make(domain: existing_domain) } + let(:existing_domain) { create(:shared_domain) } + let(:existing_route) { create(:route, domain: existing_domain) } let(:domain_name) { existing_route.fqdn } let(:params) do @@ -1357,7 +1356,7 @@ end context 'with an existing route as a subdomain' do - let(:existing_route) { VCAP::CloudController::Route.make } + let(:existing_route) { create(:route) } let(:domain) { "sub.#{existing_route.fqdn}" } let(:params) do @@ -1441,12 +1440,12 @@ describe 'POST /v3/domains/:guid/relationships/shared_organizations' do let(:params) { { data: [] } } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:private_domain) { create(:private_domain, owning_organization: org) } let(:user_header) { admin_headers_for(user) } describe 'when updating shared orgs for a shared domain' do let(:params) { { data: [{ guid: org.guid }] } } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } it 'returns a 422' do post "/v3/domains/#{shared_domain.guid}/relationships/shared_organizations", params.to_json, user_header @@ -1497,7 +1496,7 @@ end describe 'when sharing orgs with a private domain' do - let(:shared_org1) { VCAP::CloudController::Organization.make(guid: 'shared-org1') } + let(:shared_org1) { create(:organization, guid: 'shared-org1') } let(:domain_shared_orgs) do { @@ -1551,10 +1550,10 @@ end describe 'when the user does not have read permissions for the domain' do - let(:org1) { VCAP::CloudController::Organization.make(guid: 'org1') } - let(:org2) { VCAP::CloudController::Organization.make(guid: 'org2') } - let!(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:unreadable_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org1) } + let(:org1) { create(:organization, guid: 'org1') } + let(:org2) { create(:organization, guid: 'org2') } + let!(:shared_domain) { create(:shared_domain) } + let(:unreadable_domain) { create(:private_domain, owning_organization: org1) } let(:domain_shared_orgs) do { @@ -1597,7 +1596,7 @@ describe 'DELETE /v3/domains/:guid' do describe 'when deleting a shared domain' do - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } let(:api_call) { ->(user_headers) { delete "/v3/domains/#{shared_domain.guid}", nil, user_headers } } let(:db_check) do lambda do @@ -1634,7 +1633,7 @@ end describe 'when deleting a private domain' do - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:private_domain) { create(:private_domain, owning_organization: org) } let(:api_call) { ->(user_headers) { delete "/v3/domains/#{private_domain.guid}", nil, user_headers } } let(:db_check) do @@ -1674,8 +1673,8 @@ end describe 'when deleting a shared private domain as an org manager of the shared organization' do - let(:shared_org1) { VCAP::CloudController::Organization.make(guid: 'shared-org1') } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:shared_org1) { create(:organization, guid: 'shared-org1') } + let(:private_domain) { create(:private_domain, owning_organization: org) } let(:user_header) { headers_for(user) } before do @@ -1690,8 +1689,8 @@ end describe 'when deleting a shared private domain' do - let(:shared_org1) { VCAP::CloudController::Organization.make(guid: 'shared-org1') } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:shared_org1) { create(:organization, guid: 'shared-org1') } + let(:private_domain) { create(:private_domain, owning_organization: org) } let(:user_header) { admin_headers_for(user) } before do @@ -1710,8 +1709,8 @@ describe 'DELETE /v3/domains/:guid/relationships/shared_organizations/:org_guid' do let(:owning_org) { org } - let(:shared_org1) { VCAP::CloudController::Organization.make(guid: 'shared-org1') } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: owning_org) } + let(:shared_org1) { create(:organization, guid: 'shared-org1') } + let(:private_domain) { create(:private_domain, owning_organization: owning_org) } let(:user_header) { admin_headers_for(user) } context 'when there are non role related permissions issues' do @@ -1742,7 +1741,7 @@ end context 'when unsharing from non-shared org' do - let(:org2) { VCAP::CloudController::Organization.make } + let(:org2) { create(:organization) } it 'returns a 422' do delete "/v3/domains/#{private_domain.guid}/relationships/shared_organizations/#{org2.guid}", nil, user_header @@ -1782,7 +1781,7 @@ end context 'when unsharing a shared domain' do - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } it 'returns a 422' do delete "/v3/domains/#{shared_domain.guid}/relationships/shared_organizations/#{shared_org1.guid}", nil, user_header @@ -1795,8 +1794,8 @@ end context 'when the org has routes using the domain' do - let(:route_space) { VCAP::CloudController::Space.make(organization: shared_org1) } - let(:route) { VCAP::CloudController::Route.make(domain: private_domain, space: route_space) } + let(:route_space) { create(:space, organization: shared_org1) } + let(:route) { create(:route, domain: private_domain, space: route_space) } before do private_domain.add_shared_organization(shared_org1) @@ -1842,7 +1841,7 @@ end context 'when the shared org is suspended' do - let(:owning_org) { VCAP::CloudController::Organization.make(guid: 'owning-org') } + let(:owning_org) { create(:organization, guid: 'owning-org') } let(:shared_org1) { org } # permissions apply to shared org let(:api_call) { ->(user_headers) { delete "/v3/domains/#{private_domain.guid}/relationships/shared_organizations/#{shared_org1.guid}", nil, user_headers } } @@ -1938,7 +1937,7 @@ end context 'when getting a shared domain' do - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } let(:shared_domain_json) do { @@ -1983,7 +1982,7 @@ context 'when getting a private domain' do context 'when the domain has not been shared' do - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:private_domain) { create(:private_domain, owning_organization: org) } let(:private_domain_json) do { @@ -2037,10 +2036,10 @@ end context 'when the domain has been shared with another organization' do - let!(:non_visible_org) { VCAP::CloudController::Organization.make } - let!(:user_visible_org) { VCAP::CloudController::Organization.make } + let!(:non_visible_org) { create(:organization) } + let!(:user_visible_org) { create(:organization) } - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:private_domain) { create(:private_domain, owning_organization: org) } before do non_visible_org.add_private_domain(private_domain) @@ -2126,7 +2125,7 @@ end context 'when metadata is invalid' do - let(:domain) { VCAP::CloudController::SharedDomain.make } + let(:domain) { create(:shared_domain) } let(:user_header) { admin_headers_for(user) } it 'returns a 422' do @@ -2143,7 +2142,7 @@ end context 'updating an existing shared domain' do - let(:domain) { VCAP::CloudController::SharedDomain.make } + let(:domain) { create(:shared_domain) } let(:domain_json) do { @@ -2196,7 +2195,7 @@ end context 'updating an existing private domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:domain) { create(:private_domain, owning_organization: org) } let(:domain_json) do { @@ -2268,7 +2267,7 @@ end context 'updating an existing, shared private domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make } + let(:domain) { create(:private_domain) } let(:domain_json) do { diff --git a/spec/request/droplets_spec.rb b/spec/request/droplets_spec.rb index adb72532112..10521192108 100644 --- a/spec/request/droplets_spec.rb +++ b/spec/request/droplets_spec.rb @@ -2,23 +2,23 @@ require 'request_spec_shared_examples' RSpec.describe 'Droplets' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: 'my-app') } - let(:other_app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: 'my-app-3') } + let(:user) { create(:user) } + let(:app_model) { create(:app_model, space: space, name: 'my-app') } + let(:other_app_model) { create(:app_model, space: space, name: 'my-app-3') } let(:developer) { make_developer_for_space(space) } let(:developer_headers) { headers_for(developer, user_name:) } let(:user_name) { 'sundance kid' } let(:guid) { droplet_model.guid } - let(:package_model) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + let(:package_model) { create(:package_model, app: app_model) } let(:app_guid) { droplet_model.app_guid } let(:parsed_response) { Oj.load(last_response.body) } describe 'POST /v3/droplets' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:params) do { @@ -174,7 +174,7 @@ end context 'when user cannot see the app' do - let(:other_user) { VCAP::CloudController::User.make } + let(:other_user) { create(:user) } before { set_current_user(other_user) } @@ -186,7 +186,7 @@ end context 'when the app has a docker lifecycle' do - let!(:docker_app) { VCAP::CloudController::AppModel.make(:docker, space:) } + let!(:docker_app) { create(:app_model, :docker, space:) } let(:docker_app_params) do { @@ -209,17 +209,16 @@ describe 'GET /v3/droplets/:guid' do context 'when the droplet has a buildpack lifecycle' do let!(:droplet_model) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - error_description: 'example error', - execution_metadata: 'some-data', - droplet_hash: 'shalalala', - sha256_checksum: 'droplet-checksum-sha256', - process_types: { 'web' => 'start-command' } - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + error_description: 'example error', + execution_metadata: 'some-data', + droplet_hash: 'shalalala', + sha256_checksum: 'droplet-checksum-sha256', + process_types: { 'web' => 'start-command' }) end let(:droplet_model_json) do { @@ -281,16 +280,15 @@ context 'when the droplet has a docker lifecycle' do let!(:droplet_model) do - VCAP::CloudController::DropletModel.make( - :docker, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - error_description: 'example error', - execution_metadata: 'some-data', - process_types: { 'web' => 'start-command' }, - docker_receipt_image: 'docker/foobar:baz' - ) + create(:droplet_model, + :docker, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + error_description: 'example error', + execution_metadata: 'some-data', + process_types: { 'web' => 'start-command' }, + docker_receipt_image: 'docker/foobar:baz') end let(:droplet_model_json) do { @@ -349,17 +347,16 @@ describe 'GET /v3/droplets/:guid/download' do let(:worlds_smallest_tgz_file) { "\x1f\x8b\x08\x00\x5e\xc2\xc6\x5e\x00\x03\x63\x60\x18\x05\xa3\x60\x14\x8c\x54\x00\x00\x2e\xaf\xb5\xef\x00\x04\x00\x00" } let!(:droplet_model) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::AWAITING_UPLOAD_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - error_description: 'example error', - execution_metadata: 'some-data', - droplet_hash: OpenSSL::Digest::SHA1.hexdigest(worlds_smallest_tgz_file), - sha256_checksum: 'some-sha-256', - process_types: { 'web' => 'start-command' } - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::AWAITING_UPLOAD_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + error_description: 'example error', + execution_metadata: 'some-data', + droplet_hash: OpenSSL::Digest::SHA1.hexdigest(worlds_smallest_tgz_file), + sha256_checksum: 'some-sha-256', + process_types: { 'web' => 'start-command' }) end let(:droplet_file) do @@ -474,7 +471,7 @@ context "when the droplet has type 'docker'" do let!(:droplet_model) do - VCAP::CloudController::DropletModel.make(:docker) + create(:droplet_model, :docker) end it 'returns a 422 with a helpful error message' do @@ -486,27 +483,25 @@ end describe 'GET /v3/droplets' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let!(:droplet1) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(1), - package_guid: package_model.guid, - droplet_hash: nil, - sha256_checksum: nil, - buildpack_receipt_buildpack: buildpack.name, - buildpack_receipt_buildpack_guid: buildpack.guid, - staging_disk_in_mb: 235, - error_description: 'example-error', - state: VCAP::CloudController::DropletModel::FAILED_STATE - ) + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(1), + package_guid: package_model.guid, + droplet_hash: nil, + sha256_checksum: nil, + buildpack_receipt_buildpack: buildpack.name, + buildpack_receipt_buildpack_guid: buildpack.guid, + staging_disk_in_mb: 235, + error_description: 'example-error', + state: VCAP::CloudController::DropletModel::FAILED_STATE) end let(:droplet1_json) do { @@ -546,18 +541,18 @@ } end let!(:droplet2) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(2), - package_guid: package_model.guid, - droplet_hash: 'my-hash', - sha256_checksum: 'droplet-checksum-sha256', - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - process_types: { 'web' => 'started' }, - execution_metadata: 'black-box-secrets', - error_description: 'example-error' - ) + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(2), + package_guid: package_model.guid, + droplet_hash: 'my-hash', + sha256_checksum: 'droplet-checksum-sha256', + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + process_types: { 'web' => 'started' }, + execution_metadata: 'black-box-secrets', + error_description: 'example-error', + set_as_current_droplet: false) end let(:droplet2_json) do { @@ -608,8 +603,8 @@ end context 'eager loading' do - let!(:docker_droplet_1) { VCAP::CloudController::DropletModel.make(:docker, app_guid: app_model.guid) } - let!(:docker_droplet_2) { VCAP::CloudController::DropletModel.make(:docker, app_guid: app_model.guid) } + let!(:docker_droplet_1) { create(:droplet_model, :docker, app: app_model) } + let!(:docker_droplet_2) { create(:droplet_model, :docker, app: app_model) } let(:get_droplets) { -> { get '/v3/droplets', nil, developer_headers } } it 'eager loads associated data needed to present droplets' do @@ -682,25 +677,23 @@ end context 'when the user is a member in the droplets space' do - let(:other_space) { VCAP::CloudController::Space.make } - let(:other_app_model) { VCAP::CloudController::AppModel.make(space_guid: other_space.guid, name: 'my-other-app') } + let(:other_space) { create(:space) } + let(:other_app_model) { create(:app_model, space: other_space, name: 'my-other-app') } let(:other_package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: other_app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: other_app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let(:droplet_in_other_space) do - VCAP::CloudController::DropletModel.make( - app_guid: other_app_model.guid, - package_guid: other_package_model.guid, - droplet_hash: nil, - sha256_checksum: nil, - buildpack_receipt_buildpack: buildpack.name, - buildpack_receipt_buildpack_guid: buildpack.guid, - staging_disk_in_mb: 235, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app_guid: other_app_model.guid, + package_guid: other_package_model.guid, + droplet_hash: nil, + sha256_checksum: nil, + buildpack_receipt_buildpack: buildpack.name, + buildpack_receipt_buildpack_guid: buildpack.guid, + staging_disk_in_mb: 235, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end let(:droplet_in_other_space_json) do { @@ -833,7 +826,7 @@ end context 'when a droplet does not have a buildpack lifecycle' do - let!(:droplet_without_lifecycle) { VCAP::CloudController::DropletModel.make(package_guid: VCAP::CloudController::PackageModel.make.guid) } + let!(:droplet_without_lifecycle) { create(:droplet_model, package_guid: create(:package_model).guid) } it 'is excluded' do get '/v3/droplets', nil, developer_headers @@ -842,11 +835,11 @@ end context 'faceted list' do - let(:space2) { VCAP::CloudController::Space.make } - let(:app_model2) { VCAP::CloudController::AppModel.make(space:) } - let(:app_model3) { VCAP::CloudController::AppModel.make(space: space2) } - let!(:droplet3) { VCAP::CloudController::DropletModel.make(app: app_model2, state: VCAP::CloudController::DropletModel::FAILED_STATE) } - let!(:droplet4) { VCAP::CloudController::DropletModel.make(app: app_model3, state: VCAP::CloudController::DropletModel::FAILED_STATE) } + let(:space2) { create(:space) } + let(:app_model2) { create(:app_model, space:) } + let(:app_model3) { create(:app_model, space: space2) } + let!(:droplet3) { create(:droplet_model, app: app_model2, state: VCAP::CloudController::DropletModel::FAILED_STATE) } + let!(:droplet4) { create(:droplet_model, app: app_model3, state: VCAP::CloudController::DropletModel::FAILED_STATE) } let(:organization2) { space2.organization } let(:organization1) { space.organization } @@ -949,24 +942,24 @@ end context 'label_selector' do - let!(:dropletA) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } - let!(:dropletAFruit) { VCAP::CloudController::DropletLabelModel.make(key_name: 'fruit', value: 'strawberry', droplet: dropletA) } - let!(:dropletAAnimal) { VCAP::CloudController::DropletLabelModel.make(key_name: 'animal', value: 'horse', droplet: dropletA) } + let!(:dropletA) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } + let!(:dropletAFruit) { create(:droplet_label_model, key_name: 'fruit', value: 'strawberry', droplet: dropletA) } + let!(:dropletAAnimal) { create(:droplet_label_model, key_name: 'animal', value: 'horse', droplet: dropletA) } - let!(:dropletB) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } - let!(:dropletBEnv) { VCAP::CloudController::DropletLabelModel.make(key_name: 'env', value: 'prod', droplet: dropletB) } - let!(:dropletBAnimal) { VCAP::CloudController::DropletLabelModel.make(key_name: 'animal', value: 'dog', droplet: dropletB) } + let!(:dropletB) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } + let!(:dropletBEnv) { create(:droplet_label_model, key_name: 'env', value: 'prod', droplet: dropletB) } + let!(:dropletBAnimal) { create(:droplet_label_model, key_name: 'animal', value: 'dog', droplet: dropletB) } - let!(:dropletC) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } - let!(:dropletCEnv) { VCAP::CloudController::DropletLabelModel.make(key_name: 'env', value: 'prod', droplet: dropletC) } - let!(:dropletCAnimal) { VCAP::CloudController::DropletLabelModel.make(key_name: 'animal', value: 'horse', droplet: dropletC) } + let!(:dropletC) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } + let!(:dropletCEnv) { create(:droplet_label_model, key_name: 'env', value: 'prod', droplet: dropletC) } + let!(:dropletCAnimal) { create(:droplet_label_model, key_name: 'animal', value: 'horse', droplet: dropletC) } - let!(:dropletD) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } - let!(:dropletDEnv) { VCAP::CloudController::DropletLabelModel.make(key_name: 'env', value: 'prod', droplet: dropletD) } + let!(:dropletD) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } + let!(:dropletDEnv) { create(:droplet_label_model, key_name: 'env', value: 'prod', droplet: dropletD) } - let!(:dropletE) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } - let!(:dropletEEnv) { VCAP::CloudController::DropletLabelModel.make(key_name: 'env', value: 'staging', droplet: dropletE) } - let!(:dropletEAnimal) { VCAP::CloudController::DropletLabelModel.make(key_name: 'animal', value: 'dog', droplet: dropletE) } + let!(:dropletE) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } + let!(:dropletEEnv) { create(:droplet_label_model, key_name: 'env', value: 'staging', droplet: dropletE) } + let!(:dropletEAnimal) { create(:droplet_label_model, key_name: 'animal', value: 'dog', droplet: dropletE) } it 'returns the matching droplets' do get '/v3/droplets?label_selector=!fruit,animal in (dog,horse),env=prod', nil, developer_headers @@ -991,7 +984,7 @@ end describe 'DELETE /v3/droplets/:guid' do - let!(:droplet) { VCAP::CloudController::DropletModel.make(app_guid: app_model.guid) } + let!(:droplet) { create(:droplet_model, app: app_model, set_as_current_droplet: false) } let(:api_call) { ->(user_headers) { delete "/v3/droplets/#{droplet.guid}", nil, user_headers } } let(:db_check) do @@ -1053,64 +1046,62 @@ end describe 'GET /v3/apps/:guid/droplets' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let!(:droplet1) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(1), - package_guid: package_model.guid, - droplet_hash: nil, - sha256_checksum: nil, - buildpack_receipt_buildpack: buildpack.name, - buildpack_receipt_buildpack_guid: buildpack.guid, - staging_disk_in_mb: 235, - error_description: 'example-error', - state: VCAP::CloudController::DropletModel::FAILED_STATE - ) - end - let!(:droplet1Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'fruit', value: 'strawberry', droplet: droplet1) } + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(1), + package_guid: package_model.guid, + droplet_hash: nil, + sha256_checksum: nil, + buildpack_receipt_buildpack: buildpack.name, + buildpack_receipt_buildpack_guid: buildpack.guid, + staging_disk_in_mb: 235, + error_description: 'example-error', + state: VCAP::CloudController::DropletModel::FAILED_STATE, + set_as_current_droplet: false) + end + let!(:droplet1Label) { create(:droplet_label_model, key_name: 'fruit', value: 'strawberry', droplet: droplet1) } let!(:droplet2) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(2), - package_guid: package_model.guid, - droplet_hash: 'my-hash', - sha256_checksum: 'droplet-checksum-sha256', - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - process_types: { 'web' => 'started' }, - execution_metadata: 'black-box-secrets', - error_description: 'example-error' - ) - end - let!(:droplet2Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'seed', value: 'strawberry', droplet: droplet2) } + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(2), + package_guid: package_model.guid, + droplet_hash: 'my-hash', + sha256_checksum: 'droplet-checksum-sha256', + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + process_types: { 'web' => 'started' }, + execution_metadata: 'black-box-secrets', + error_description: 'example-error', + set_as_current_droplet: false) + end + let!(:droplet2Label) { create(:droplet_label_model, key_name: 'seed', value: 'strawberry', droplet: droplet2) } let!(:droplet3) do - VCAP::CloudController::DropletModel.make( - app_guid: other_app_model.guid, - created_at: Time.at(2), - package_guid: other_package_model.guid, - droplet_hash: 'my-hash-3', - sha256_checksum: 'droplet-checksum-sha256-3', - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - process_types: { 'web' => 'started' }, - execution_metadata: 'black-box-secrets-3', - error_description: 'example-error' - ) - end - let!(:droplet3Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'fruit', value: 'mango', droplet: droplet3) } + create(:droplet_model, + app_guid: other_app_model.guid, + created_at: Time.at(2), + package_guid: other_package_model.guid, + droplet_hash: 'my-hash-3', + sha256_checksum: 'droplet-checksum-sha256-3', + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + process_types: { 'web' => 'started' }, + execution_metadata: 'black-box-secrets-3', + error_description: 'example-error', + set_as_current_droplet: false) + end + let!(:droplet3Label) { create(:droplet_label_model, key_name: 'fruit', value: 'mango', droplet: droplet3) } let(:other_package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: other_app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: other_app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let(:per_page) { 2 } @@ -1300,66 +1291,61 @@ end describe 'GET /v3/packages/:guid/droplets' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let(:other_package_model) do - VCAP::CloudController::PackageModel.make( - app_guid: other_app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: other_app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let!(:droplet1) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(1), - package_guid: package_model.guid, - droplet_hash: nil, - sha256_checksum: nil, - buildpack_receipt_buildpack: buildpack.name, - buildpack_receipt_buildpack_guid: buildpack.guid, - error_description: 'example-error', - state: VCAP::CloudController::DropletModel::FAILED_STATE - ) + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(1), + package_guid: package_model.guid, + droplet_hash: nil, + sha256_checksum: nil, + buildpack_receipt_buildpack: buildpack.name, + buildpack_receipt_buildpack_guid: buildpack.guid, + error_description: 'example-error', + state: VCAP::CloudController::DropletModel::FAILED_STATE) end let!(:droplet2) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - created_at: Time.at(2), - package_guid: package_model.guid, - droplet_hash: 'my-hash', - sha256_checksum: 'droplet-checksum-sha256', - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - process_types: { 'web' => 'started' }, - execution_metadata: 'black-box-secrets', - error_description: 'example-error' - ) + create(:droplet_model, + app_guid: app_model.guid, + created_at: Time.at(2), + package_guid: package_model.guid, + droplet_hash: 'my-hash', + sha256_checksum: 'droplet-checksum-sha256', + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + process_types: { 'web' => 'started' }, + execution_metadata: 'black-box-secrets', + error_description: 'example-error') end let!(:droplet3) do - VCAP::CloudController::DropletModel.make( - app_guid: other_app_model.guid, - created_at: Time.at(2), - package_guid: other_package_model.guid, - droplet_hash: 'my-hash-3', - sha256_checksum: 'droplet-checksum-sha256-3', - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - process_types: { 'web' => 'started' }, - execution_metadata: 'black-box-secrets-3', - error_description: 'example-error' - ) - end - let!(:droplet1Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'fruit', value: 'strawberry', droplet: droplet1) } - let!(:droplet2Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'limes', value: 'horse', droplet: droplet2) } - let!(:droplet3Label) { VCAP::CloudController::DropletLabelModel.make(key_name: 'fruit', value: 'strawberry', droplet: droplet3) } + create(:droplet_model, + app_guid: other_app_model.guid, + created_at: Time.at(2), + package_guid: other_package_model.guid, + droplet_hash: 'my-hash-3', + sha256_checksum: 'droplet-checksum-sha256-3', + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + process_types: { 'web' => 'started' }, + execution_metadata: 'black-box-secrets-3', + error_description: 'example-error') + end + let!(:droplet1Label) { create(:droplet_label_model, key_name: 'fruit', value: 'strawberry', droplet: droplet1) } + let!(:droplet2Label) { create(:droplet_label_model, key_name: 'limes', value: 'horse', droplet: droplet2) } + let!(:droplet3Label) { create(:droplet_label_model, key_name: 'fruit', value: 'strawberry', droplet: droplet3) } let(:per_page) { 2 } let(:order_by) { '-created_at' } @@ -1496,20 +1482,19 @@ end describe 'POST /v3/droplets?source_guid=:guid' do - let(:new_app) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } - let(:package_model) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } + let(:new_app) { create(:app_model, space: space) } + let(:package_model) { create(:package_model, app: app_model) } let!(:og_droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - error_description: nil, - execution_metadata: 'some-data', - droplet_hash: 'shalalala', - sha256_checksum: 'droplet-checksum-sha256', - process_types: { 'web' => 'start-command' } - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + error_description: nil, + execution_metadata: 'some-data', + droplet_hash: 'shalalala', + sha256_checksum: 'droplet-checksum-sha256', + process_types: { 'web' => 'start-command' }) end let(:app_guid) { droplet_model.app_guid } let(:copy_request_json) do @@ -1582,10 +1567,9 @@ describe 'POST /v3/droplets/:guid/upload' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::AWAITING_UPLOAD_STATE - ) + create(:droplet_model, + app: app_model, + state: VCAP::CloudController::DropletModel::AWAITING_UPLOAD_STATE) end let(:api_call) { ->(user_headers) { post "/v3/droplets/#{droplet.guid}/upload", params.to_json, user_headers } } @@ -1706,10 +1690,9 @@ context 'when the droplet is not AWAITING_UPLOAD' do let(:staged_droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end it 'returns 422 with a helpful error message' do @@ -1736,17 +1719,16 @@ describe 'PATCH v3/droplets/:guid' do let!(:og_droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - buildpack_receipt_buildpack: 'http://buildpack.git.url.com', - error_description: nil, - execution_metadata: 'some-data', - droplet_hash: 'shalalala', - sha256_checksum: 'droplet-checksum-sha256', - process_types: { 'web' => 'start-command' } - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + buildpack_receipt_buildpack: 'http://buildpack.git.url.com', + error_description: nil, + execution_metadata: 'some-data', + droplet_hash: 'shalalala', + sha256_checksum: 'droplet-checksum-sha256', + process_types: { 'web' => 'start-command' }) end let(:update_request) do { @@ -1870,17 +1852,16 @@ end context 'when updating the image (on a docker droplet)' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, space_guid: space.guid, name: 'my-docker-app') } + let(:app_model) { create(:app_model, :docker, space: space, name: 'my-docker-app') } let(:rebased_image_reference) { 'rebased-image-reference' } let!(:og_docker_droplet) do - VCAP::CloudController::DropletModel.make( - :docker, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - app_guid: app_model.guid, - package_guid: package_model.guid, - droplet_hash: 'shalalala', - sha256_checksum: 'droplet-checksum-sha256' - ) + create(:droplet_model, + :docker, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + app_guid: app_model.guid, + package_guid: package_model.guid, + droplet_hash: 'shalalala', + sha256_checksum: 'droplet-checksum-sha256') end let(:guid) { og_docker_droplet.guid } let(:update_request) do @@ -1925,7 +1906,7 @@ end context 'when the the developer is looking in the wrong space' do - let(:wrong_developer) { make_developer_for_space(VCAP::CloudController::Space.make) } + let(:wrong_developer) { make_developer_for_space(create(:space)) } let(:wrong_developer_headers) { headers_for(wrong_developer, user_name: user_name, email: 'bob@loblaw.com') } it '404s' do diff --git a/spec/request/environment_variable_groups_spec.rb b/spec/request/environment_variable_groups_spec.rb index 6ba256a1899..04b360ccad6 100644 --- a/spec/request/environment_variable_groups_spec.rb +++ b/spec/request/environment_variable_groups_spec.rb @@ -7,7 +7,7 @@ VCAP::CloudController::EnvironmentVariableGroup.find(name: 'staging').update(environment_json: { 'foo' => 'wendys', 'baz' => 'whitecastle' }) end - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } let(:admin_header) { admin_headers_for(user) } @@ -74,8 +74,8 @@ end context 'when the user is logged in' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { get '/v3/environment_variable_groups/running', nil, user_headers } } let(:expected_codes_and_responses) { Hash.new({ code: 200 }.freeze) } @@ -171,7 +171,7 @@ end context 'when the user is logged in' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:api_call) { ->(user_headers) { patch '/v3/environment_variable_groups/staging', params.to_json, user_headers } } diff --git a/spec/request/errors_spec.rb b/spec/request/errors_spec.rb index 3fd80aa4e78..dfcd6eed0ad 100644 --- a/spec/request/errors_spec.rb +++ b/spec/request/errors_spec.rb @@ -9,7 +9,7 @@ # # We are now testing via a request so that the required middlewares are present describe 'invalid request json' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } it 'returns a MessageParseError' do diff --git a/spec/request/events_spec.rb b/spec/request/events_spec.rb index 4c6cff514f2..f74ac41eb5f 100644 --- a/spec/request/events_spec.rb +++ b/spec/request/events_spec.rb @@ -8,13 +8,13 @@ let(:user_audit_info) do VCAP::CloudController::UserAuditInfo.new(user_guid: user.guid, user_email: 'user@example.com') end - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } - let!(:unscoped_event) { VCAP::CloudController::Event.make(actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } - let!(:org_scoped_event) { VCAP::CloudController::Event.make(created_at: Time.now + 100, type: 'audit.organization.create', actee: org.guid, organization_guid: org.guid) } - let!(:space_scoped_event) { VCAP::CloudController::Event.make(space_guid: space.guid, organization_guid: org.guid, actee: app_model.guid, type: 'audit.app.restart') } + let!(:unscoped_event) { create(:event, actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } + let!(:org_scoped_event) { create(:event, created_at: Time.now + 100, type: 'audit.organization.create', actee: org.guid, organization_guid: org.guid) } + let!(:space_scoped_event) { create(:event, space_guid: space.guid, organization_guid: org.guid, actee: app_model.guid, type: 'audit.app.restart') } let(:unscoped_event_json) do { @@ -207,27 +207,26 @@ describe 'GET /v3/audit_events/:guid' do let(:user) { make_user } let(:admin_header) { admin_headers_for(user) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:api_call) { ->(user_headers) { get "/v3/audit_events/#{event.guid}", nil, user_headers } } context 'when the audit_event does exist' do context 'when the event happens in a space' do let(:event) do - VCAP::CloudController::Event.make( - type: 'audit.app.update', - actor: 'some-user-guid', - actor_type: 'some-user', - actor_name: 'username', - actor_username: 'system', - actee: 'app-guid', - actee_type: 'app', - actee_name: '', - timestamp: Sequel::CURRENT_TIMESTAMP, - metadata: {}, - space_guid: space.guid, - organization_guid: org.guid - ) + create(:event, + type: 'audit.app.update', + actor: 'some-user-guid', + actor_type: 'some-user', + actor_name: 'username', + actor_username: 'system', + actee: 'app-guid', + actee_type: 'app', + actee_name: '', + timestamp: Sequel::CURRENT_TIMESTAMP, + metadata: {}, + space_guid: space.guid, + organization_guid: org.guid) end let(:event_json) do @@ -297,21 +296,20 @@ context 'when the event happens in an org' do let(:event) do - VCAP::CloudController::Event.make( - type: 'audit.organization.update', - actor: 'some-user-guid', - actor_type: 'some-user', - actor_name: 'username', - actor_username: 'system', - actee: org.guid, - actee_type: 'organization', - actee_name: '', - timestamp: Sequel::CURRENT_TIMESTAMP, - metadata: {}, - space: nil, - space_guid: '', - organization_guid: org.guid - ) + create(:event, + type: 'audit.organization.update', + actor: 'some-user-guid', + actor_type: 'some-user', + actor_name: 'username', + actor_username: 'system', + actee: org.guid, + actee_type: 'organization', + actee_name: '', + timestamp: Sequel::CURRENT_TIMESTAMP, + metadata: {}, + space: nil, + space_guid: '', + organization_guid: org.guid) end let(:event_json) do @@ -471,19 +469,18 @@ context 'when the user is not logged in' do let(:event) do - VCAP::CloudController::Event.make( - type: 'audit.app.update', - actor: 'some-user-guid', - actor_type: 'some-user', - actor_name: 'username', - actor_username: 'system', - actee: 'app-guid', - actee_type: 'app', - actee_name: '', - timestamp: Sequel::CURRENT_TIMESTAMP, - metadata: {}, - space_guid: space.guid - ) + create(:event, + type: 'audit.app.update', + actor: 'some-user-guid', + actor_type: 'some-user', + actor_name: 'username', + actor_username: 'system', + actee: 'app-guid', + actee_type: 'app', + actee_name: '', + timestamp: Sequel::CURRENT_TIMESTAMP, + metadata: {}, + space_guid: space.guid) end it 'returns 401 for Unauthenticated requests' do diff --git a/spec/request/feature_flags_spec.rb b/spec/request/feature_flags_spec.rb index f6765a70eb6..d5a050b3f9b 100644 --- a/spec/request/feature_flags_spec.rb +++ b/spec/request/feature_flags_spec.rb @@ -22,10 +22,10 @@ VCAP::CloudController::FeatureFlag.plugin :timestamps, update_on_create: false end - let!(:resource_1) { VCAP::CloudController::FeatureFlag.make(name: 'set_roles_by_username', updated_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::FeatureFlag.make(name: 'task_creation', updated_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::FeatureFlag.make(name: 'user_org_creation', updated_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::FeatureFlag.make(name: 'unset_roles_by_username', updated_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:feature_flag, name: 'set_roles_by_username', updated_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:feature_flag, name: 'task_creation', updated_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:feature_flag, name: 'user_org_creation', updated_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:feature_flag, name: 'unset_roles_by_username', updated_at: '2020-05-26T18:47:04Z') } after do VCAP::CloudController::FeatureFlag.plugin :timestamps, update_on_create: true @@ -74,7 +74,7 @@ end context 'there is an override' do - let(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: 'error') } + let(:feature_flag) { create(:feature_flag, name: 'diego_docker', enabled: true, error_message: 'error') } it 'returns details of the requested feature flag when there is an override' do get "/v3/feature_flags/#{feature_flag.name}", nil, headers diff --git a/spec/request/info_spec.rb b/spec/request/info_spec.rb index c1fc7ca9c5c..3f6834cdae4 100644 --- a/spec/request/info_spec.rb +++ b/spec/request/info_spec.rb @@ -124,15 +124,15 @@ end describe 'GET /v3/info/usage_summary' do - let(:user) { VCAP::CloudController::User.make(guid: 'user-guid') } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user, guid: 'user-guid') } + let(:space) { create(:space) } let(:org) { space.organization } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } let(:api_call) { ->(user_headers) { get '/v3/info/usage_summary', nil, user_headers } } - let!(:task) { VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 100) } - let!(:completed_task) { VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE, memory_in_mb: 100) } + let!(:task) { create(:task_model, state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 100) } + let!(:completed_task) { create(:task_model, state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE, memory_in_mb: 100) } let!(:started_process1) { VCAP::CloudController::ProcessModelFactory.make(instances: 3, state: 'STARTED', memory: 100) } let!(:started_process2) { VCAP::CloudController::ProcessModelFactory.make(instances: 6, state: 'STARTED', memory: 100) } let!(:started_process3) { VCAP::CloudController::ProcessModelFactory.make(instances: 7, state: 'STARTED', memory: 100) } diff --git a/spec/request/internal/asg_update_timestamp_spec.rb b/spec/request/internal/asg_update_timestamp_spec.rb index 01b14148da3..23b87a0bbd6 100644 --- a/spec/request/internal/asg_update_timestamp_spec.rb +++ b/spec/request/internal/asg_update_timestamp_spec.rb @@ -2,7 +2,7 @@ require 'request_spec_shared_examples' RSpec.describe 'App Security Group Update Timestamp' do - let(:user) { VCAP::CloudController::User.make(guid: 'user-guid') } + let(:user) { create(:user, guid: 'user-guid') } let(:admin_header) { admin_headers_for(user) } describe 'GET /internal/v4/asg_latest_update' do diff --git a/spec/request/internal/log_access_spec.rb b/spec/request/internal/log_access_spec.rb index ed6f85339e2..2df9cbaff8c 100644 --- a/spec/request/internal/log_access_spec.rb +++ b/spec/request/internal/log_access_spec.rb @@ -2,10 +2,10 @@ require 'request_spec_shared_examples' RSpec.describe 'Internal Log Access Endpoint' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:org) { space.organization } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } describe 'GET /internal/v4/log_access/:app_guid' do context 'permissions' do diff --git a/spec/request/internal/metrics_spec.rb b/spec/request/internal/metrics_spec.rb index 45fcb5f381c..cfa882b5f8d 100644 --- a/spec/request/internal/metrics_spec.rb +++ b/spec/request/internal/metrics_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' RSpec.describe 'Metrics' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user) } let(:metrics_webserver) { VCAP::CloudController::ApiMetricsWebserver.new } let(:periodic_updater) { CloudController::DependencyLocator.instance.periodic_updater } @@ -38,9 +38,7 @@ cc_total_users = Prometheus::Client.registry.get(:cc_total_users) cc_total_users.set(0) unless cc_total_users.nil? - 10.times do - VCAP::CloudController::User.make - end + create_list(:user, 10) periodic_updater.update_user_count end diff --git a/spec/request/isolation_segments_spec.rb b/spec/request/isolation_segments_spec.rb index c362272f507..256ebae462a 100644 --- a/spec/request/isolation_segments_spec.rb +++ b/spec/request/isolation_segments_spec.rb @@ -3,10 +3,10 @@ require 'request_spec_shared_examples' RSpec.describe 'IsolationSegmentModels' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { admin_headers_for(user) } let(:admin_header) { admin_headers_for(user) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } describe 'POST /v3/isolation_segments' do @@ -45,9 +45,9 @@ end describe 'GET /v3/isolation_segments/:guid/relationships/organizations' do - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:isolation_segment_model) { create(:isolation_segment_model) } before do assigner.assign(isolation_segment_model, [org1, org2]) @@ -85,7 +85,7 @@ it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/isolation_segments/#{isolation_segment_model.guid}/relationships/organizations", nil, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_guids: [org1.guid, org2.guid, space.organization.guid] }.freeze) @@ -104,9 +104,9 @@ end describe 'GET /v3/isolation_segments/:guid/relationships/spaces' do - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:isolation_segment_model) { create(:isolation_segment_model) } before do assigner.assign(isolation_segment_model, [space1.organization, space2.organization]) @@ -133,7 +133,7 @@ let(:api_call) { ->(user_headers) { get "/v3/isolation_segments/#{isolation_segment_model.guid}/relationships/spaces", nil, user_headers } } let(:org) { space1.organization } let(:space) { space1 } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_guids: [space1.guid, space2.guid] }.freeze) @@ -152,9 +152,9 @@ end describe 'POST /v3/isolation_segments/:guid/relationships/organizations' do - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:isolation_segment) { create(:isolation_segment_model) } it 'assigns the isolation segment to the organization' do assign_request = { @@ -183,9 +183,9 @@ end describe 'DELETE /v3/isolation_segments/:guid/relationships/organizations/:org_guid' do - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:isolation_segment) { create(:isolation_segment_model) } before do assigner.assign(isolation_segment, [org1, org2]) @@ -202,7 +202,7 @@ end describe 'GET /v3/isolation_segments/:guid' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:expected_response_object) do { 'name' => isolation_segment_model.name, @@ -228,7 +228,7 @@ it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/isolation_segments/#{isolation_segment_model.guid}", nil, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_object: expected_response_object }.freeze) h['no_role'] = { code: 404 } @@ -241,7 +241,7 @@ it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/isolation_segments/#{isolation_segment_model.guid}", nil, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) h['admin'] = { code: 200, response_object: expected_response_object } @@ -254,8 +254,8 @@ end describe 'GET /v3/isolation_segments' do - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } it_behaves_like 'list query endpoint' do let(:message) { VCAP::CloudController::IsolationSegmentsListMessage } @@ -317,12 +317,12 @@ context 'when there are multiple isolation segments' do let!(:models) do [ - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment1'), - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment2'), - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment3'), - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment4'), - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment5'), - VCAP::CloudController::IsolationSegmentModel.make(name: 'segment6') + create(:isolation_segment_model, name: 'segment1'), + create(:isolation_segment_model, name: 'segment2'), + create(:isolation_segment_model, name: 'segment3'), + create(:isolation_segment_model, name: 'segment4'), + create(:isolation_segment_model, name: 'segment5'), + create(:isolation_segment_model, name: 'segment6') ] end @@ -451,18 +451,18 @@ end context 'label_selector' do - let!(:iso_segA) { VCAP::CloudController::IsolationSegmentModel.make(name: 'segmentA') } - let!(:iso_segB) { VCAP::CloudController::IsolationSegmentModel.make(name: 'segmentB') } - let!(:iso_segC) { VCAP::CloudController::IsolationSegmentModel.make(name: 'segmentC') } + let!(:iso_segA) { create(:isolation_segment_model, name: 'segmentA') } + let!(:iso_segB) { create(:isolation_segment_model, name: 'segmentB') } + let!(:iso_segC) { create(:isolation_segment_model, name: 'segmentC') } - let!(:isoAFruit) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'fruit', value: 'strawberry', resource_guid: iso_segA.guid) } - let!(:isoAAnimal) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'animal', value: 'horse', resource_guid: iso_segA.guid) } + let!(:isoAFruit) { create(:isolation_segment_label_model, key_name: 'fruit', value: 'strawberry', resource_guid: iso_segA.guid) } + let!(:isoAAnimal) { create(:isolation_segment_label_model, key_name: 'animal', value: 'horse', resource_guid: iso_segA.guid) } - let!(:isoBEnv) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'env', value: 'prod', resource_guid: iso_segB.guid) } - let!(:isoBAnimal) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'animal', value: 'dog', resource_guid: iso_segB.guid) } + let!(:isoBEnv) { create(:isolation_segment_label_model, key_name: 'env', value: 'prod', resource_guid: iso_segB.guid) } + let!(:isoBAnimal) { create(:isolation_segment_label_model, key_name: 'animal', value: 'dog', resource_guid: iso_segB.guid) } - let!(:isoCEnv) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'env', value: 'prod', resource_guid: iso_segC.guid) } - let!(:isoCAnimal) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'animal', value: 'horse', resource_guid: iso_segC.guid) } + let!(:isoCEnv) { create(:isolation_segment_label_model, key_name: 'env', value: 'prod', resource_guid: iso_segC.guid) } + let!(:isoCAnimal) { create(:isolation_segment_label_model, key_name: 'animal', value: 'horse', resource_guid: iso_segC.guid) } it 'returns the matching iso segs' do get '/v3/isolation_segments?label_selector=!fruit,env=prod,animal in (dog,horse)', nil, admin_headers @@ -474,7 +474,7 @@ end context 'permissions' do - let(:iso_seg1) { VCAP::CloudController::IsolationSegmentModel.make } + let(:iso_seg1) { create(:isolation_segment_model) } before do assigner.assign(iso_seg1, [space.organization]) @@ -483,7 +483,7 @@ it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get '/v3/isolation_segments', nil, user_headers } } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_guids: [iso_seg1.guid] }.freeze) h['admin'] = { code: 200, response_guids: [iso_seg1.guid, VCAP::CloudController::IsolationSegmentModel::SHARED_ISOLATION_SEGMENT_GUID] } @@ -498,7 +498,7 @@ describe 'PATCH /v3/isolation_segments/:guid' do it 'updates the specified isolation segment' do - isolation_segment_model = VCAP::CloudController::IsolationSegmentModel.make(name: 'my_segment') + isolation_segment_model = create(:isolation_segment_model, name: 'my_segment') update_request = { name: 'your_segment', @@ -536,7 +536,7 @@ end describe 'DELETE /v3/isolation_segments/:guid' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make(name: 'my_segment') } + let(:isolation_segment_model) { create(:isolation_segment_model, name: 'my_segment') } it 'deletes the specified isolation segment' do delete "/v3/isolation_segments/#{isolation_segment_model.guid}", nil, user_header diff --git a/spec/request/jobs_spec.rb b/spec/request/jobs_spec.rb index 83ec98fbb42..6913e6f8e25 100644 --- a/spec/request/jobs_spec.rb +++ b/spec/request/jobs_spec.rb @@ -8,11 +8,10 @@ describe 'when getting a job that exists' do it 'returns a json representation of a generic job' do operation = 'app.delete' - job = VCAP::CloudController::PollableJobModel.make( - resource_type: 'app', - state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, - operation: operation - ) + job = create(:pollable_job_model, + resource_type: 'app', + state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, + operation: operation) job_guid = job.guid get "/v3/jobs/#{job_guid}", nil, user_headers @@ -38,11 +37,10 @@ it 'returns a json representation of a special case' do operation = 'app.delete' - job = VCAP::CloudController::PollableJobModel.make( - resource_type: 'organization_quota', - state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, - operation: operation - ) + job = create(:pollable_job_model, + resource_type: 'organization_quota', + state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, + operation: operation) job_guid = job.guid get "/v3/jobs/#{job_guid}", nil, user_headers @@ -112,8 +110,10 @@ def before(delayed_job) def perform pollable_job = VCAP::CloudController::PollableJobModel.find_by_delayed_job_guid(@delayed_job_guid) - VCAP::CloudController::JobWarningModel.make(detail: 'warning-one', job_id: pollable_job.id) - VCAP::CloudController::JobWarningModel.make(detail: 'warning-two', job_id: pollable_job.id) + # rubocop:disable FactoryBot/SyntaxMethods -- TestJob is not an RSpec example group, so the syntax mixin is unavailable + FactoryBot.create(:job_warning_model, detail: 'warning-one', job_id: pollable_job.id) + FactoryBot.create(:job_warning_model, detail: 'warning-two', job_id: pollable_job.id) + # rubocop:enable FactoryBot/SyntaxMethods end def job_name_in_configuration @@ -139,14 +139,13 @@ def display_name end describe 'permissions' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:job) do - VCAP::CloudController::PollableJobModel.make( - resource_type: 'app', - state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, - operation: 'app.delete' - ) + create(:pollable_job_model, + resource_type: 'app', + state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, + operation: 'app.delete') end context 'when the user is not logged in' do diff --git a/spec/request/knowledge_bombs/verify_old_lrps_can_download_assets_spec.rb b/spec/request/knowledge_bombs/verify_old_lrps_can_download_assets_spec.rb index f105acf9545..3f9e33e874a 100644 --- a/spec/request/knowledge_bombs/verify_old_lrps_can_download_assets_spec.rb +++ b/spec/request/knowledge_bombs/verify_old_lrps_can_download_assets_spec.rb @@ -9,7 +9,7 @@ RSpec.describe 'BuildpackBitsController download endpoint exists:' do describe 'GET /buildpacks/:path_guid/download' do context 'when an lrp tries to download a buildpack without authentication' do - let(:mister_buildpack) { VCAP::CloudController::Buildpack.make } + let(:mister_buildpack) { create(:buildpack) } let(:blob_dispatcher) { instance_double(VCAP::CloudController::BlobDispatcher, send_or_redirect: { status: 200 }) } let(:staging_user) { 'user' } let(:staging_password) { 'password' } @@ -36,7 +36,7 @@ RSpec.describe 'StagingsController download endpoint exists:' do describe 'GET /staging/v3/droplets/:guid/download' do - let(:droplet) { VCAP::CloudController::DropletModel.make } + let(:droplet) { create(:droplet_model) } context 'when an lrp tries to download a droplet' do it 'does not return a 404 because the endpoint is still present, or redirect to another endpoint with different auth' do @@ -50,7 +50,7 @@ RSpec.describe 'DropletsController download endpoint with checksum exists:' do describe 'GET /internal/v2/droplets/:guid/:droplet_hash/download' do - let(:droplet) { VCAP::CloudController::DropletModel.make } + let(:droplet) { create(:droplet_model) } context 'when an lrp tries to download a droplet' do it 'does not return a 404 because the endpoint is still present, and redirects to the droplet-url' do diff --git a/spec/request/organization_quotas_spec.rb b/spec/request/organization_quotas_spec.rb index fd55ce8a1cc..21ed850cab6 100644 --- a/spec/request/organization_quotas_spec.rb +++ b/spec/request/organization_quotas_spec.rb @@ -3,10 +3,10 @@ module VCAP::CloudController RSpec.describe 'organization_quotas' do - let(:user) { VCAP::CloudController::User.make(guid: 'user-guid') } - let(:organization_quota) { VCAP::CloudController::QuotaDefinition.make(guid: 'org-quota-guid') } - let!(:org) { VCAP::CloudController::Organization.make(guid: 'organization-guid', quota_definition: organization_quota) } - let(:space) { VCAP::CloudController::Space.make(guid: 'space-guid', organization: org) } + let(:user) { create(:user, guid: 'user-guid') } + let(:organization_quota) { create(:quota_definition, guid: 'org-quota-guid') } + let!(:org) { create(:organization, guid: 'organization-guid', quota_definition: organization_quota) } + let(:space) { create(:space, guid: 'space-guid', organization: org) } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } describe 'POST /v3/organization_quotas' do @@ -198,7 +198,7 @@ module VCAP::CloudController let(:api_call) { ->(user_headers) { get '/v3/organization_quotas', nil, user_headers } } context 'when listing organization_quotas' do - let!(:other_org) { VCAP::CloudController::Organization.make(guid: 'other-organization-guid', quota_definition: organization_quota) } + let!(:other_org) { create(:organization, guid: 'other-organization-guid', quota_definition: organization_quota) } let(:other_org_response) { { guid: 'other-organization-guid' } } let(:org_response) { { guid: 'organization-guid' } } @@ -222,8 +222,8 @@ module VCAP::CloudController end context 'with filters' do - let!(:organization_quota_2) { VCAP::CloudController::QuotaDefinition.make(guid: 'second-guid', name: 'second-name') } - let!(:organization_quota_3) { VCAP::CloudController::QuotaDefinition.make(guid: 'third-guid', name: 'third-name') } + let!(:organization_quota_2) { create(:quota_definition, guid: 'second-guid', name: 'second-name') } + let!(:organization_quota_3) { create(:quota_definition, guid: 'third-guid', name: 'third-name') } before do org.quota_definition = organization_quota @@ -265,7 +265,7 @@ module VCAP::CloudController let(:api_call) { ->(user_headers) { get "/v3/organization_quotas/#{organization_quota.guid}", nil, user_headers } } context 'when getting an organization_quota' do - let!(:other_org) { VCAP::CloudController::Organization.make(guid: 'other-organization-guid', quota_definition: organization_quota) } + let!(:other_org) { create(:organization, guid: 'other-organization-guid', quota_definition: organization_quota) } let(:other_org_response) { { guid: 'other-organization-guid' } } let(:org_response) { { guid: 'organization-guid' } } @@ -282,7 +282,7 @@ module VCAP::CloudController end context 'when the organization_quota had no associated organizations' do - let(:unused_organization_quota) { VCAP::CloudController::QuotaDefinition.make } + let(:unused_organization_quota) { create(:quota_definition) } it 'returns a quota with an empty array of org guids' do get "/v3/organization_quotas/#{unused_organization_quota.guid}", nil, admin_header @@ -398,12 +398,11 @@ module VCAP::CloudController context 'update partial values' do let(:org_quota_to_update) do - VCAP::CloudController::QuotaDefinition.make( - guid: 'org_quota_to_update_guid', - name: 'update-me', - memory_limit: 8, - non_basic_services_allowed: true - ) + create(:quota_definition, + guid: 'org_quota_to_update_guid', + name: 'update-me', + memory_limit: 8, + non_basic_services_allowed: true) end let(:partial_params) do { @@ -447,7 +446,7 @@ module VCAP::CloudController end context 'when trying to update name to a pre-existing name' do - let(:new_org_quota) { QuotaDefinition.make } + let(:new_org_quota) { create(:quota_definition) } let(:params) do { @@ -464,8 +463,8 @@ module VCAP::CloudController end context 'when trying to set a log rate limit and there are apps with unlimited log rates' do - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let!(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do patch "/v3/organization_quotas/#{organization_quota.guid}", params.to_json, admin_header @@ -482,8 +481,8 @@ module VCAP::CloudController describe 'POST /v3/organization_quotas/:guid/relationships/organizations' do let(:api_call) { ->(user_headers) { post "/v3/organization_quotas/#{org_quota.guid}/relationships/organizations", params.to_json, user_headers } } - let(:org) { VCAP::CloudController::Organization.make } - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make } + let(:org) { create(:organization) } + let(:org_quota) { create(:quota_definition) } let(:params) do { @@ -541,9 +540,9 @@ module VCAP::CloudController end context 'when the quota has a finite log rate limit and there are apps with unlimited log rates' do - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: 100) } - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let(:org_quota) { create(:quota_definition, log_rate_limit: 100) } + let!(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do post "/v3/organization_quotas/#{org_quota.guid}/relationships/organizations", params.to_json, admin_header @@ -556,7 +555,7 @@ module VCAP::CloudController end describe 'DELETE /v3/organization_quotas/:guid/' do - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make } + let(:org_quota) { create(:quota_definition) } let(:api_call) { ->(user_headers) { delete "/v3/organization_quotas/#{org_quota.guid}", nil, user_headers } } let(:db_check) do lambda do @@ -588,7 +587,7 @@ module VCAP::CloudController end context 'when an organization quota is applied to an organization' do - let(:org) { VCAP::CloudController::Organization.make } + let(:org) { create(:organization) } let(:params) do { diff --git a/spec/request/organizations_spec.rb b/spec/request/organizations_spec.rb index fc5b009d716..8e962a68651 100644 --- a/spec/request/organizations_spec.rb +++ b/spec/request/organizations_spec.rb @@ -3,13 +3,13 @@ module VCAP::CloudController RSpec.describe 'Organizations' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user) } let(:admin_header) { admin_headers_for(user) } - let!(:organization1) { Organization.make name: 'Apocalypse World' } - let!(:organization2) { Organization.make name: 'Dungeon World' } - let!(:organization3) { Organization.make name: 'The Sprawl' } - let!(:inaccessible_organization) { Organization.make name: 'D&D' } + let!(:organization1) { create(:organization, name: 'Apocalypse World') } + let!(:organization2) { create(:organization, name: 'Dungeon World') } + let!(:organization3) { create(:organization, name: 'The Sprawl') } + let!(:inaccessible_organization) { create(:organization, name: 'D&D') } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } before do @@ -105,7 +105,7 @@ module VCAP::CloudController context 'when "user_org_creation" feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'user_org_creation', enabled: true) + create(:feature_flag, name: 'user_org_creation', enabled: true) end it 'lets ALL users create orgs' do @@ -173,7 +173,7 @@ module VCAP::CloudController describe 'GET /v3/organizations' do describe 'query list parameters' do - let(:isolation_segment1) { IsolationSegmentModel.make(name: 'seg') } + let(:isolation_segment1) { create(:isolation_segment_model, name: 'seg') } let(:assigner) { IsolationSegmentAssign.new } before do @@ -279,24 +279,24 @@ module VCAP::CloudController end context 'label_selector' do - let!(:orgA) { Organization.make(name: 'A') } - let!(:orgAFruit) { OrganizationLabelModel.make(key_name: 'fruit', value: 'strawberry', organization: orgA) } - let!(:orgAAnimal) { OrganizationLabelModel.make(key_name: 'animal', value: 'horse', organization: orgA) } + let!(:orgA) { create(:organization, name: 'A') } + let!(:orgAFruit) { create(:organization_label_model, key_name: 'fruit', value: 'strawberry', organization: orgA) } + let!(:orgAAnimal) { create(:organization_label_model, key_name: 'animal', value: 'horse', organization: orgA) } - let!(:orgB) { Organization.make(name: 'B') } - let!(:orgBEnv) { OrganizationLabelModel.make(key_name: 'env', value: 'prod', organization: orgB) } - let!(:orgBAnimal) { OrganizationLabelModel.make(key_name: 'animal', value: 'dog', organization: orgB) } + let!(:orgB) { create(:organization, name: 'B') } + let!(:orgBEnv) { create(:organization_label_model, key_name: 'env', value: 'prod', organization: orgB) } + let!(:orgBAnimal) { create(:organization_label_model, key_name: 'animal', value: 'dog', organization: orgB) } - let!(:orgC) { Organization.make(name: 'C') } - let!(:orgCEnv) { OrganizationLabelModel.make(key_name: 'env', value: 'prod', organization: orgC) } - let!(:orgCAnimal) { OrganizationLabelModel.make(key_name: 'animal', value: 'horse', organization: orgC) } + let!(:orgC) { create(:organization, name: 'C') } + let!(:orgCEnv) { create(:organization_label_model, key_name: 'env', value: 'prod', organization: orgC) } + let!(:orgCAnimal) { create(:organization_label_model, key_name: 'animal', value: 'horse', organization: orgC) } - let!(:orgD) { Organization.make(name: 'D') } - let!(:orgDEnv) { OrganizationLabelModel.make(key_name: 'env', value: 'prod', organization: orgD) } + let!(:orgD) { create(:organization, name: 'D') } + let!(:orgDEnv) { create(:organization_label_model, key_name: 'env', value: 'prod', organization: orgD) } - let!(:orgE) { Organization.make(name: 'E') } - let!(:orgEEnv) { OrganizationLabelModel.make(key_name: 'env', value: 'staging', organization: orgE) } - let!(:orgEAnimal) { OrganizationLabelModel.make(key_name: 'animal', value: 'dog', organization: orgE) } + let!(:orgE) { create(:organization, name: 'E') } + let!(:orgEEnv) { create(:organization_label_model, key_name: 'env', value: 'staging', organization: orgE) } + let!(:orgEAnimal) { create(:organization_label_model, key_name: 'animal', value: 'dog', organization: orgE) } it 'returns the matching orgs' do get '/v3/organizations?label_selector=!fruit,env=prod,animal in (dog,horse)', nil, admin_header @@ -316,7 +316,7 @@ module VCAP::CloudController it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get 'v3/organizations', nil, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_guids: [org.guid] }.freeze) @@ -331,7 +331,7 @@ module VCAP::CloudController end describe 'GET /v3/isolation_segments/:guid/organizations' do - let(:isolation_segment1) { IsolationSegmentModel.make(name: 'awesome_seg') } + let(:isolation_segment1) { create(:isolation_segment_model, name: 'awesome_seg') } let(:assigner) { IsolationSegmentAssign.new } before do @@ -405,7 +405,7 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid/relationships/default_isolation_segment' do - let(:isolation_segment) { IsolationSegmentModel.make(name: 'default_seg') } + let(:isolation_segment) { create(:isolation_segment_model, name: 'default_seg') } let(:assigner) { IsolationSegmentAssign.new } before do @@ -436,7 +436,7 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid/domains' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } describe 'when the user is not logged in' do @@ -447,9 +447,9 @@ module VCAP::CloudController end describe 'when the user is logged in' do - let!(:shared_domain) { SharedDomain.make(guid: 'shared-guid') } - let!(:owned_private_domain) { PrivateDomain.make(owning_organization_guid: org.guid, guid: 'owned-private') } - let!(:shared_private_domain) { PrivateDomain.make(owning_organization_guid: organization1.guid, guid: 'shared-private') } + let!(:shared_domain) { create(:shared_domain, guid: 'shared-guid') } + let!(:owned_private_domain) { create(:private_domain, owning_organization_guid: org.guid, guid: 'owned-private') } + let!(:shared_private_domain) { create(:private_domain, owning_organization_guid: organization1.guid, guid: 'shared-private') } let(:shared_domain_json) do { @@ -638,12 +638,12 @@ module VCAP::CloudController end describe 'when filtering by labels' do - let!(:domain1) { PrivateDomain.make(name: 'dom1.com', owning_organization: org) } - let!(:domain1_label) { DomainLabelModel.make(resource_guid: domain1.guid, key_name: 'animal', value: 'dog') } + let!(:domain1) { create(:private_domain, name: 'dom1.com', owning_organization: org) } + let!(:domain1_label) { create(:domain_label_model, resource_guid: domain1.guid, key_name: 'animal', value: 'dog') } - let!(:domain2) { PrivateDomain.make(name: 'dom2.com', owning_organization: org) } - let!(:domain2_label) { DomainLabelModel.make(resource_guid: domain2.guid, key_name: 'animal', value: 'cow') } - let!(:domain2__exclusive_label) { DomainLabelModel.make(resource_guid: domain2.guid, key_name: 'santa', value: 'claus') } + let!(:domain2) { create(:private_domain, name: 'dom2.com', owning_organization: org) } + let!(:domain2_label) { create(:domain_label_model, resource_guid: domain2.guid, key_name: 'animal', value: 'cow') } + let!(:domain2__exclusive_label) { create(:domain_label_model, resource_guid: domain2.guid, key_name: 'santa', value: 'claus') } let(:base_link) { "/v3/organizations/#{org.guid}/domains" } let(:base_pagination_link) { "#{link_prefix}#{base_link}" } @@ -817,7 +817,7 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid/domains/default' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:api_call) { ->(user_headers) { get "/v3/organizations/#{org.guid}/domains/default", nil, user_headers } } @@ -838,8 +838,8 @@ module VCAP::CloudController end context 'when domains exist' do - let!(:internal_domain) { SharedDomain.make(internal: true) } # used to ensure internal domains do not get returned in any case - let!(:tcp_domain) { SharedDomain.make(router_group_guid: 'default-tcp') } + let!(:internal_domain) { create(:shared_domain, internal: true) } # used to ensure internal domains do not get returned in any case + let!(:tcp_domain) { create(:shared_domain, router_group_guid: 'default-tcp') } let(:expected_codes_and_responses) do h = Hash.new( { code: 200, @@ -849,8 +849,8 @@ module VCAP::CloudController h end - let(:shared_private_domain) { PrivateDomain.make(owning_organization_guid: organization1.guid) } - let(:owned_private_domain) { PrivateDomain.make(owning_organization_guid: org.guid) } + let(:shared_private_domain) { create(:private_domain, owning_organization_guid: organization1.guid) } + let(:owned_private_domain) { create(:private_domain, owning_organization_guid: org.guid) } before do org.add_private_domain(shared_private_domain) @@ -904,7 +904,7 @@ module VCAP::CloudController end context 'when at least one non-internal shared domain exists' do - let!(:shared_domain) { SharedDomain.make } + let!(:shared_domain) { create(:shared_domain) } let(:domain_json) do { @@ -939,7 +939,7 @@ module VCAP::CloudController end context 'when only internal domains exist' do - let!(:internal_domain) { SharedDomain.make(internal: true) } # used to ensure internal domains do not get returned in any case + let!(:internal_domain) { create(:shared_domain, internal: true) } # used to ensure internal domains do not get returned in any case let(:expected_codes_and_responses) do h = Hash.new( @@ -952,7 +952,7 @@ module VCAP::CloudController end context 'when only tcp domains exist' do - let!(:tcp_domain) { SharedDomain.make(router_group_guid: 'default-tcp') } + let!(:tcp_domain) { create(:shared_domain, router_group_guid: 'default-tcp') } let(:expected_codes_and_responses) do h = Hash.new( @@ -977,12 +977,12 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid/usage_summary' do - let!(:org) { Organization.make } - let!(:space) { Space.make(organization: org) } - let!(:app1) { AppModel.make(space:) } - let!(:app2) { AppModel.make(space:) } - let!(:process1) { ProcessModel.make(:process, state: 'STARTED', app: app1, type: 'web', memory: 101) } - let!(:process2) { ProcessModel.make(:process, state: 'STARTED', app: app1, type: 'web', memory: 102, instances: 2) } + let!(:org) { create(:organization) } + let!(:space) { create(:space, organization: org) } + let!(:app1) { create(:app_model, space:) } + let!(:app2) { create(:app_model, space:) } + let!(:process1) { create(:process, :process, state: 'STARTED', app: app1, type: 'web', memory: 101) } + let!(:process2) { create(:process, :process, state: 'STARTED', app: app1, type: 'web', memory: 102, instances: 2) } before do ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: 'STARTED', type: 'worker') @@ -1028,7 +1028,7 @@ module VCAP::CloudController end context 'when the user cannot read from the org' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do stub_readable_org_guids_for(user, []) @@ -1043,7 +1043,7 @@ module VCAP::CloudController describe 'PATCH /v3/organizations/:guid/relationships/default_isolation_segment' do context 'as admin' do - let(:isolation_segment) { IsolationSegmentModel.make(name: 'default_seg') } + let(:isolation_segment) { create(:isolation_segment_model, name: 'default_seg') } let(:update_request) do { data: { guid: isolation_segment.guid } @@ -1084,8 +1084,8 @@ module VCAP::CloudController end context 'when organization is suspended' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { patch "/v3/organizations/#{org.guid}/relationships/default_isolation_segment", nil, user_headers } } let(:expected_codes_and_responses) do h = Hash.new({ code: 403, errors: CF_NOT_AUTHORIZED }.freeze) @@ -1104,7 +1104,7 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:api_call) { ->(user_headers) { get "/v3/organizations/#{org.guid}", nil, user_headers } } let(:expected_response_object) do @@ -1197,7 +1197,7 @@ module VCAP::CloudController context 'when the new name is already taken' do before do - Organization.make(name: 'new-name') + create(:organization, name: 'new-name') end it 'returns a 422 with a helpful error message' do @@ -1247,8 +1247,8 @@ module VCAP::CloudController end context 'deleting labels' do - let!(:org1Fruit) { OrganizationLabelModel.make(key_name: 'fruit', value: 'strawberry', organization: organization1) } - let!(:org1Animal) { OrganizationLabelModel.make(key_name: 'animal', value: 'horse', organization: organization1) } + let!(:org1Fruit) { create(:organization_label_model, key_name: 'fruit', value: 'strawberry', organization: organization1) } + let!(:org1Animal) { create(:organization_label_model, key_name: 'animal', value: 'horse', organization: organization1) } let(:update_request) do { metadata: { @@ -1290,8 +1290,8 @@ module VCAP::CloudController end context 'when organization is suspended' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { patch "/v3/organizations/#{org.guid}", nil, user_headers } } let(:expected_codes_and_responses) do h = Hash.new({ code: 403, errors: CF_NOT_AUTHORIZED }.freeze) @@ -1310,22 +1310,22 @@ module VCAP::CloudController end describe 'DELETE /v3/organizations/:guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:associated_user) { User.make(default_space: space) } + let(:associated_user) { create(:user, default_space: space) } let(:shared_service_instance) do - s = ServiceInstance.make + s = create(:service_instance) s.add_shared_space(space) s end before do - AppModel.make(space:) - Route.make(space:) + create(:app_model, space:) + create(:route, space:) org.add_user(associated_user) space.add_developer(associated_user) - ServiceInstance.make(space:) - ServiceBroker.make(space:) + create(:service_instance, space:) + create(:service_broker, space:) end let(:db_check) do @@ -1393,7 +1393,9 @@ module VCAP::CloudController end describe 'when there is a shared private domain' do - let!(:shared_private_domain) { PrivateDomain.make(owning_organization_guid: org.guid, guid: 'shared-private', shared_organization_guids: [organization1.guid]) } + let!(:shared_private_domain) do + create(:private_domain, owning_organization_guid: org.guid, guid: 'shared-private', shared_organization_guids: [organization1.guid]) + end it 'returns a 202' do delete "/v3/organizations/#{org.guid}", nil, admin_headers @@ -1419,8 +1421,8 @@ module VCAP::CloudController end describe 'GET /v3/organizations/:guid/users' do - let(:other_org_user) { VCAP::CloudController::User.make(guid: 'other-org-user') } - let(:org_manager) { VCAP::CloudController::User.make(guid: 'org-manager') } + let(:other_org_user) { create(:user, guid: 'other-org-user') } + let(:org_manager) { create(:user, guid: 'org-manager') } before do allow(VCAP::CloudController::UaaClient).to receive(:new).and_return(uaa_client) @@ -1571,7 +1573,7 @@ module VCAP::CloudController end context 'by labels' do - let!(:user_label) { VCAP::CloudController::UserLabelModel.make(resource_guid: user.guid, key_name: 'animal', value: 'dog') } + let!(:user_label) { create(:user_label_model, resource_guid: user.guid, key_name: 'animal', value: 'dog') } it 'returns a 200 and the filtered users for "in" label selector' do get "/v3/organizations/#{organization1.guid}/users?label_selector=animal in (dog)", nil, admin_header @@ -1593,10 +1595,10 @@ module VCAP::CloudController # normally this would be under request_spec_shared_examples; we copy it here because this test brings up issues with UAA context 'by timestamps on creation' do - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', created_at: '2020-05-26T18:47:04Z') } before do organization1.add_user(resource_1) @@ -1621,10 +1623,10 @@ module VCAP::CloudController allow(uaa_client).to receive(:users_for_ids).and_return({}) end - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', updated_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', updated_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', updated_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', updated_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', updated_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', updated_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', updated_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', updated_at: '2020-05-26T18:47:04Z') } after do VCAP::CloudController::User.plugin :timestamps, update_on_create: true @@ -1642,8 +1644,8 @@ module VCAP::CloudController end context 'no filters' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { get "/v3/organizations/#{org.guid}/users", nil, user_headers } } let(:user_json) { build_user_json(user.guid, 'bob-mcjames', 'Okta') } let(:org_manager_json) { build_user_json(org_manager.guid, 'rob-mcjames', 'Okta') } diff --git a/spec/request/packages_spec.rb b/spec/request/packages_spec.rb index 81a05c313fd..f247c3db46a 100644 --- a/spec/request/packages_spec.rb +++ b/spec/request/packages_spec.rb @@ -3,13 +3,13 @@ RSpec.describe 'Packages' do let(:email) { 'potato@house.com' } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_name) { 'clarence' } let(:user_header) { headers_for(user, email:, user_name:) } - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } let(:space_guid) { space.guid } - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, space_guid:) } + let(:app_model) { create(:app_model, :docker, space_guid:) } describe 'POST /v3/packages' do let(:guid) { app_model.guid } @@ -99,9 +99,9 @@ end let(:api_call) { ->(user_headers) { post '/v3/packages', { type:, data:, relationships:, metadata: }.to_json, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 201 }.freeze) h['org_auditor'] = { code: 422 } @@ -132,10 +132,10 @@ end describe 'copying' do - let!(:source_package) { VCAP::CloudController::PackageModel.make(type: 'docker', app_guid: app_model.guid, docker_image: 'http://awesome-sauce.com') } + let!(:source_package) { create(:package_model, type: 'docker', app: app_model, docker_image: 'http://awesome-sauce.com') } let(:target_space) { space } let(:target_org) { target_space.organization } - let(:target_app) { VCAP::CloudController::AppModel.make(space: target_space) } + let(:target_app) { create(:app_model, space: target_space) } it 'copies a package' do expect do @@ -240,7 +240,7 @@ end context 'when source organization is suspended' do - let(:target_space) { VCAP::CloudController::Space.make(organization: VCAP::CloudController::Organization.make) } + let(:target_space) { create(:space, organization: create(:organization)) } let(:source_org) { org } let(:expected_codes_and_responses) do @@ -262,8 +262,8 @@ end describe 'GET /v3/apps/:guid/packages' do - let!(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } + let!(:package) { create(:package_model, app: app_model) } + let(:app_model) { create(:app_model, space: space) } let(:guid) { app_model.guid } let(:page) { 1 } let(:per_page) { 2 } @@ -313,7 +313,7 @@ end it 'lists paginated results' do - package2 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, created_at: package.created_at + 1.hour) + package2 = create(:package_model, app: app_model, created_at: package.created_at + 1.hour) expected_response = { 'pagination' => { @@ -391,10 +391,10 @@ end it 'filters by types' do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::BITS_TYPE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::BITS_TYPE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::DOCKER_TYPE) - VCAP::CloudController::PackageModel.make(type: VCAP::CloudController::PackageModel::BITS_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::BITS_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::BITS_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::DOCKER_TYPE) + create(:package_model, type: VCAP::CloudController::PackageModel::BITS_TYPE) get '/v3/packages?types=bits', {}, user_header @@ -416,10 +416,10 @@ end it 'filters by states' do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::PENDING_STATE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::PENDING_STATE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::READY_STATE) - VCAP::CloudController::PackageModel.make(state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::READY_STATE) + create(:package_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) get "/v3/apps/#{app_model.guid}/packages?states=PROCESSING_UPLOAD", {}, user_header @@ -441,9 +441,9 @@ end it 'filters by package guids' do - package1 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - package2 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - VCAP::CloudController::PackageModel.make + package1 = create(:package_model, app: app_model) + package2 = create(:package_model, app: app_model) + create(:package_model) get "/v3/apps/#{app_model.guid}/packages?guids=#{package1.guid},#{package2.guid}", {}, user_header @@ -486,14 +486,13 @@ updated_ats: { gt: Time.now.utc.iso8601 } } end - let(:bits_package) { VCAP::CloudController::PackageModel.make(type: bits_type, app_guid: app_model.guid) } + let(:bits_package) { create(:package_model, type: bits_type, app: app_model) } let(:docker_package) do - VCAP::CloudController::PackageModel.make( - type: docker_type, - app_guid: app_model.guid, - state: VCAP::CloudController::PackageModel::READY_STATE, - docker_image: 'http://location-of-image.com' - ) + create(:package_model, + type: docker_type, + app_guid: app_model.guid, + state: VCAP::CloudController::PackageModel::READY_STATE, + docker_image: 'http://location-of-image.com') end let(:packages_response_objects) do [ @@ -584,12 +583,12 @@ context 'faceted search' do it 'filters by types' do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::BITS_TYPE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::BITS_TYPE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: VCAP::CloudController::PackageModel::DOCKER_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::BITS_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::BITS_TYPE) + create(:package_model, app: app_model, type: VCAP::CloudController::PackageModel::DOCKER_TYPE) - another_app_in_same_space = VCAP::CloudController::AppModel.make(space_guid:) - VCAP::CloudController::PackageModel.make(app_guid: another_app_in_same_space.guid, type: VCAP::CloudController::PackageModel::BITS_TYPE) + another_app_in_same_space = create(:app_model, space_guid:) + create(:package_model, app: another_app_in_same_space, type: VCAP::CloudController::PackageModel::BITS_TYPE) get '/v3/packages?types=bits', {}, user_header @@ -611,12 +610,12 @@ end it 'filters by states' do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::PENDING_STATE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::PENDING_STATE) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, state: VCAP::CloudController::PackageModel::READY_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, app: app_model, state: VCAP::CloudController::PackageModel::READY_STATE) - another_app_in_same_space = VCAP::CloudController::AppModel.make(space_guid:) - VCAP::CloudController::PackageModel.make(app_guid: another_app_in_same_space.guid, state: VCAP::CloudController::PackageModel::PENDING_STATE) + another_app_in_same_space = create(:app_model, space_guid:) + create(:package_model, app: another_app_in_same_space, state: VCAP::CloudController::PackageModel::PENDING_STATE) get '/v3/packages?states=PROCESSING_UPLOAD', {}, user_header @@ -638,10 +637,10 @@ end it 'filters by app guids' do - app_model2 = VCAP::CloudController::AppModel.make(space_guid:) - package1 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - package2 = VCAP::CloudController::PackageModel.make(app_guid: app_model2.guid) - VCAP::CloudController::PackageModel.make + app_model2 = create(:app_model, space_guid:) + package1 = create(:package_model, app: app_model) + package2 = create(:package_model, app: app_model2) + create(:package_model) get "/v3/packages?app_guids=#{app_model.guid},#{app_model2.guid}", {}, user_header @@ -662,10 +661,10 @@ end it 'filters by package guids' do - app_model2 = VCAP::CloudController::AppModel.make(space_guid:) - package1 = VCAP::CloudController::PackageModel.make(app_guid: app_model2.guid) - package2 = VCAP::CloudController::PackageModel.make(app_guid: app_model2.guid) - VCAP::CloudController::PackageModel.make + app_model2 = create(:app_model, space_guid:) + package1 = create(:package_model, app: app_model2) + package2 = create(:package_model, app: app_model2) + create(:package_model) get "/v3/packages?guids=#{package1.guid},#{package2.guid}", {}, user_header @@ -686,17 +685,17 @@ end it 'filters by space guids' do - package_on_space1 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) + package_on_space1 = create(:package_model, app: app_model) - space2 = VCAP::CloudController::Space.make(organization: space.organization) + space2 = create(:space, organization: space.organization) space2.add_developer(user) - app_model2 = VCAP::CloudController::AppModel.make(space_guid: space2.guid) - package_on_space2 = VCAP::CloudController::PackageModel.make(app_guid: app_model2.guid) + app_model2 = create(:app_model, space: space2) + package_on_space2 = create(:package_model, app: app_model2) - space3 = VCAP::CloudController::Space.make(organization: space.organization) + space3 = create(:space, organization: space.organization) space3.add_developer(user) - app_model3 = VCAP::CloudController::AppModel.make(space_guid: space3.guid) - VCAP::CloudController::PackageModel.make(app_guid: app_model3.guid) + app_model3 = create(:app_model, space: space3) + create(:package_model, app: app_model3) get "/v3/packages?space_guids=#{space2.guid},#{space_guid}", {}, user_header @@ -719,22 +718,22 @@ it 'filters by org guids' do org1_guid = space.organization.guid - package_in_org1 = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) + package_in_org1 = create(:package_model, app: app_model) - space2 = VCAP::CloudController::Space.make + space2 = create(:space) org2_guid = space2.organization.guid - app_model2 = VCAP::CloudController::AppModel.make(space_guid: space2.guid) + app_model2 = create(:app_model, space: space2) space2.organization.add_user(user) space2.add_developer(user) - package_in_org2 = VCAP::CloudController::PackageModel.make(app_guid: app_model2.guid) + package_in_org2 = create(:package_model, app: app_model2) - space3 = VCAP::CloudController::Space.make + space3 = create(:space) space3.organization.add_user(user) space3.add_developer(user) - app_model3 = VCAP::CloudController::AppModel.make(space_guid: space3.guid) - VCAP::CloudController::PackageModel.make(app_guid: app_model3.guid) + app_model3 = create(:app_model, space: space3) + create(:package_model, app: app_model3) get "/v3/packages?organization_guids=#{org1_guid},#{org2_guid}", {}, user_header @@ -755,10 +754,10 @@ end it 'filters by label selectors' do - target = VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) - VCAP::CloudController::PackageLabelModel.make(key_name: 'fruit', value: 'strawberry', package: target) + target = create(:package_model, app: app_model) + create(:package_model, app: app_model) + create(:package_model, app: app_model) + create(:package_label_model, key_name: 'fruit', value: 'strawberry', package: target) get '/v3/packages?label_selector=fruit=strawberry', {}, user_header @@ -785,7 +784,7 @@ describe 'GET /v3/packages/:guid' do let(:api_call) { ->(user_headers) { get "v3/packages/#{guid}", nil, user_headers } } let(:package_model) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) + create(:package_model, app: app_model) end let(:guid) { package_model.guid } let(:package_model_response_object) do @@ -823,10 +822,10 @@ describe 'POST /v3/packages/:guid/upload' do let(:type) { 'bits' } let!(:package_model) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: type) + create(:package_model, app: app_model, type: type) end - let(:space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(guid: 'woof', space_guid: space.guid, name: 'meow') } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, guid: 'woof', space: space, name: 'meow') } let(:guid) { package_model.guid } let(:tmpdir) { Dir.mktmpdir } let(:test_config_overrides) do @@ -956,9 +955,9 @@ end let(:api_call) { ->(user_headers) { post "/v3/packages/#{guid}/upload", packages_params.to_json, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:package_model_response_object) do { 'type' => package_model.type, @@ -1012,12 +1011,12 @@ describe 'GET /v3/packages/:guid/download' do let(:type) { 'bits' } let!(:package_model) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, type: type) + create(:package_model, app: app_model, type: type) end let(:app_model) do - VCAP::CloudController::AppModel.make(guid: 'woof-guid', space_guid: space.guid, name: 'meow') + create(:app_model, guid: 'woof-guid', space: space, name: 'meow') end - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:bits_download_url) { CloudController::DependencyLocator.instance.blobstore_url_generator.package_download_url(package_model) } let(:guid) { package_model.guid } let(:temp_file) do @@ -1073,9 +1072,9 @@ end let(:api_call) { ->(user_headers) { get "/v3/packages/#{guid}/download", nil, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 302 }.freeze) h['global_auditor'] = { code: 403 } @@ -1096,10 +1095,10 @@ describe 'PATCH /v3/packages/:guid' do let(:app_name) { 'sir meow' } let(:app_guid) { 'meow-the-guid' } - let(:space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: app_name, guid: app_guid) } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, space: space, name: app_name, guid: app_guid) } let!(:package_model) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) + create(:package_model, app: app_model) end let(:metadata) do { @@ -1141,9 +1140,9 @@ end let(:api_call) { ->(user_headers) { patch "/v3/packages/#{guid}", { metadata: }.to_json, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 200 }.freeze) h['org_auditor'] = { code: 404 } @@ -1176,10 +1175,10 @@ describe 'DELETE /v3/packages/:guid' do let(:app_name) { 'sir meow' } let(:app_guid) { 'meow-the-guid' } - let(:space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid, name: app_name, guid: app_guid) } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, space: space, name: app_name, guid: app_guid) } let!(:package_model) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) + create(:package_model, app: app_model) end let(:guid) { package_model.guid } @@ -1233,9 +1232,9 @@ end let(:api_call) { ->(user_headers) { delete "/v3/packages/#{guid}", nil, user_headers } } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_codes_and_responses) do h = Hash.new({ code: 202 }.freeze) h['org_auditor'] = { code: 404 } @@ -1265,7 +1264,7 @@ end describe 'PATCH /internal/v4/packages/:guid' do - let!(:package_model) { VCAP::CloudController::PackageModel.make(state: VCAP::CloudController::PackageModel::PENDING_STATE) } + let!(:package_model) { create(:package_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) } let(:body) do { 'state' => 'READY', diff --git a/spec/request/processes_spec.rb b/spec/request/processes_spec.rb index fb2cf1bf20e..ef90acfc75b 100644 --- a/spec/request/processes_spec.rb +++ b/spec/request/processes_spec.rb @@ -22,13 +22,13 @@ end end - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(space: space, name: 'my_app', droplet: droplet) } - let(:droplet) { VCAP::CloudController::DropletModel.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app_model) { create(:app_model, space: space, name: 'my_app', droplet: droplet) } + let(:droplet) { create(:droplet_model) } let(:developer) { make_developer_for_space(space) } let(:developer_headers) { headers_for(developer, user_name:) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:admin_header) { admin_headers_for(user) } let(:user_name) { 'ProcHudson' } let(:build_client) { instance_double(HTTPClient, post: nil) } @@ -50,32 +50,30 @@ end describe 'GET /v3/processes' do - let!(:web_revision) { VCAP::CloudController::RevisionModel.make } + let!(:web_revision) { create(:revision_model) } let!(:web_process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - revision: web_revision, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + revision: web_revision, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end let!(:worker_process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'worker', - instances: 1, - memory: 100, - disk_quota: 200, - log_rate_limit: 400, - command: 'start worker' - ) + create(:process, + :process, + app: app_model, + type: 'worker', + instances: 1, + memory: 100, + disk_quota: 200, + log_rate_limit: 400, + command: 'start worker') end before do @@ -84,9 +82,9 @@ end context 'eager loading' do - let(:cnb_app) { VCAP::CloudController::AppModel.make(:cnb, space:) } - let!(:cnb_process_1) { VCAP::CloudController::ProcessModel.make(:cnb, app: cnb_app) } - let!(:cnb_process_2) { VCAP::CloudController::ProcessModel.make(:cnb, app: cnb_app) } + let(:cnb_app) { create(:app_model, :cnb, space:) } + let!(:cnb_process_1) { create(:process, :cnb, app: cnb_app) } + let!(:cnb_process_2) { create(:process, :cnb, app: cnb_app) } let(:get_processes) { -> { get '/v3/processes', nil, developer_headers } } it 'eager loads associated data needed to present processes' do @@ -246,7 +244,7 @@ end it 'filters by label selectors' do - VCAP::CloudController::ProcessLabelModel.make(key_name: 'fruit', value: 'strawberry', process: worker_process) + create(:process_label_model, key_name: 'fruit', value: 'strawberry', process: worker_process) get '/v3/processes?label_selector=fruit=strawberry', {}, developer_headers @@ -292,19 +290,18 @@ end context 'by space_guids' do - let(:other_space) { VCAP::CloudController::Space.make(organization: space.organization) } - let(:other_app_model) { VCAP::CloudController::AppModel.make(space: other_space) } + let(:other_space) { create(:space, organization: space.organization) } + let(:other_app_model) { create(:app_model, space: other_space) } let!(:other_space_process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: other_app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: other_app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end before do @@ -334,21 +331,20 @@ end context 'by organization guids' do - let(:other_space) { VCAP::CloudController::Space.make } + let(:other_space) { create(:space) } let!(:other_org) { other_space.organization } let!(:other_space_process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: other_app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: other_app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end - let(:other_app_model) { VCAP::CloudController::AppModel.make(space: other_space) } + let(:other_app_model) { create(:app_model, space: other_space) } let(:developer) { make_developer_for_space(other_space) } it 'returns only the matching processes' do @@ -374,16 +370,16 @@ end context 'by app guids' do - let(:desired_app) { VCAP::CloudController::AppModel.make(space:) } + let(:desired_app) { create(:app_model, space:) } let!(:desired_process) do - VCAP::CloudController::ProcessModel.make(:process, - app: desired_app, - type: 'persnickety', - instances: 3, - memory: 2048, - disk_quota: 2048, - log_rate_limit: 2_097_152, - command: 'at ease') + create(:process, :process, + app: desired_app, + type: 'persnickety', + instances: 3, + memory: 2048, + disk_quota: 2048, + log_rate_limit: 2_097_152, + command: 'at ease') end it 'returns only the matching processes' do @@ -488,19 +484,18 @@ end describe 'GET /v3/processes/:guid' do - let(:revision) { VCAP::CloudController::RevisionModel.make } + let(:revision) { create(:revision_model) } let(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - revision: revision, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + revision: revision, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end let(:expected_response) do { @@ -556,7 +551,7 @@ end it 'redacts information for auditors' do - auditor = VCAP::CloudController::User.make + auditor = create(:user) space.organization.add_user(auditor) space.add_auditor(auditor) @@ -630,7 +625,7 @@ end describe 'GET stats' do - let(:process) { VCAP::CloudController::ProcessModel.make(:process, type: 'worker', app: app_model) } + let(:process) { create(:process, :process, type: 'worker', app: app_model) } let(:net_info_1) do { address: '1.2.3.4', @@ -790,7 +785,7 @@ end describe 'GET /v3/processes/:guid/process_instances' do - let(:process) { VCAP::CloudController::ProcessModel.make(:process, app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } + let(:process) { create(:process, :process, app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } let(:two_days_ago_since_epoch_ns) { 2.days.ago.to_f * 1e9 } let(:two_days_in_seconds) { 60 * 60 * 24 * 2 } let(:second_in_ns) { 1_000_000_000 } @@ -861,23 +856,22 @@ end describe 'PATCH /v3/processes/:guid' do - let(:revision) { VCAP::CloudController::RevisionModel.make } + let(:revision) { create(:revision_model) } let(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - revision: revision, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup', - ports: [4444, 5555], - health_check_type: 'port', - health_check_timeout: 10, - health_check_interval: 5 - ) + create(:process, + :process, + app: app_model, + revision: revision, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup', + ports: [4444, 5555], + health_check_type: 'port', + health_check_timeout: 10, + health_check_interval: 5) end let(:update_request) do @@ -1042,16 +1036,15 @@ describe 'POST /v3/processes/:guid/actions/scale' do let(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end let(:scale_request) do @@ -1181,7 +1174,7 @@ context 'when the user is assigned the space_supporter role' do let(:space_supporter) do - user = VCAP::CloudController::User.make + user = create(:user) org.add_user(user) space.add_supporter(user) user @@ -1223,12 +1216,11 @@ end it 'ensures that the memory allocation is greater than existing sidecar memory allocation' do - sidecar = VCAP::CloudController::SidecarModel.make( - name: 'my-sidecar', - app: app_model, - memory: 256 - ) - VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: process.type, app_guid: app_model.guid) + sidecar = create(:sidecar_model, + name: 'my-sidecar', + app: app_model, + memory: 256) + create(:sidecar_process_type_model, sidecar: sidecar, type: process.type, app_guid: app_model.guid) scale_request = { memory_in_mb: 256 @@ -1259,16 +1251,15 @@ context 'telemetry' do let(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end let(:scale_request) do @@ -1311,7 +1302,7 @@ end it 'terminates a single instance of a process' do - process = VCAP::CloudController::ProcessModel.make(:process, type: 'web', app: app_model) + process = create(:process, :process, type: 'web', app: app_model) delete "/v3/processes/#{process.guid}/instances/0", nil, developer_headers @@ -1338,7 +1329,7 @@ end context 'permissions' do - let(:process) { VCAP::CloudController::ProcessModel.make(:process, type: 'web', app: app_model) } + let(:process) { create(:process, :process, type: 'web', app: app_model) } let(:api_call) { ->(user_headers) { delete "/v3/processes/#{process.guid}/instances/0", nil, user_headers } } @@ -1373,42 +1364,40 @@ describe 'GET /v3/apps/:guid/processes' do let!(:process1) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') end let!(:process2) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - revision: revision2, - type: 'worker', - instances: 1, - memory: 100, - disk_quota: 200, - log_rate_limit: 400, - command: 'start worker' - ) + create(:process, + :process, + app: app_model, + revision: revision2, + type: 'worker', + instances: 1, + memory: 100, + disk_quota: 200, + log_rate_limit: 400, + command: 'start worker') end let!(:process3) do - VCAP::CloudController::ProcessModel.make(:process, app: app_model, revision: revision3) + create(:process, :process, app: app_model, revision: revision3) end let!(:deployment_process) do - VCAP::CloudController::ProcessModel.make(:process, app: app_model, type: 'web-deployment', revision: deployment_revision) + create(:process, :process, app: app_model, type: 'web-deployment', revision: deployment_revision) end - let!(:revision3) { VCAP::CloudController::RevisionModel.make } - let!(:revision2) { VCAP::CloudController::RevisionModel.make } - let!(:deployment_revision) { VCAP::CloudController::RevisionModel.make } + let!(:revision3) { create(:revision_model) } + let!(:revision2) { create(:revision_model) } + let!(:deployment_revision) { create(:revision_model) } it_behaves_like 'list_endpoint_with_common_filters' do let(:resource_klass) { VCAP::CloudController::ProcessModel } @@ -1634,19 +1623,18 @@ describe 'GET /v3/apps/:guid/processes/:type' do let!(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - revision: revision, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup' - ) - end - let!(:revision) { VCAP::CloudController::RevisionModel.make } + create(:process, + :process, + app: app_model, + revision: revision, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup') + end + let!(:revision) { create(:revision_model) } let(:expected_response) do { 'guid' => process.guid, @@ -1706,9 +1694,9 @@ end it 'redacts information for auditors' do - VCAP::CloudController::ProcessModel.make(:process, app: app_model, type: 'web', command: 'rackup') + create(:process, :process, app: app_model, type: 'web', command: 'rackup') - auditor = VCAP::CloudController::User.make + auditor = create(:user) space.organization.add_user(auditor) space.add_auditor(auditor) @@ -1770,20 +1758,19 @@ describe 'PATCH /v3/apps/:guid/processes/:type' do it 'updates the process' do - process = VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup', - ports: [4444, 5555], - health_check_type: 'port', - health_check_timeout: 10, - readiness_health_check_type: 'process' - ) + process = create(:process, + :process, + app: app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup', + ports: [4444, 5555], + health_check_type: 'port', + health_check_timeout: 10, + readiness_health_check_type: 'process') update_request = { command: 'new command', @@ -1917,17 +1904,16 @@ describe 'POST /v3/apps/:guid/processes/:type/actions/scale' do let!(:process) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - instances: 2, - memory: 1024, - disk_quota: 1024, - log_rate_limit: 1_048_576, - command: 'rackup', - state: 'STARTED' - ) + create(:process, + :process, + app: app_model, + type: 'web', + instances: 2, + memory: 1024, + disk_quota: 1024, + log_rate_limit: 1_048_576, + command: 'rackup', + state: 'STARTED') end let(:scale_request) do @@ -2031,7 +2017,7 @@ end before do - org.update(quota_definition: VCAP::CloudController::QuotaDefinition.make(log_rate_limit: 2_097_152)) + org.update(quota_definition: create(:quota_definition, log_rate_limit: 2_097_152)) end it 'fails to scale the process' do @@ -2047,7 +2033,7 @@ context 'when the user is assigned the space_supporter role' do let(:space_supporter) do - user = VCAP::CloudController::User.make + user = create(:user) org.add_user(user) space.add_supporter(user) user @@ -2099,7 +2085,7 @@ allow_any_instance_of(VCAP::CloudController::Diego::BbsAppsClient).to receive(:stop_index) end - let!(:process) { VCAP::CloudController::ProcessModel.make(:process, type: 'web', app: app_model) } + let!(:process) { create(:process, :process, type: 'web', app: app_model) } it 'terminates a single instance of a process belonging to an app' do delete "/v3/apps/#{app_model.guid}/processes/web/instances/0", nil, developer_headers diff --git a/spec/request/rate_limit_spec.rb b/spec/request/rate_limit_spec.rb index 56bb60c2e1d..aeb42839249 100644 --- a/spec/request/rate_limit_spec.rb +++ b/spec/request/rate_limit_spec.rb @@ -15,7 +15,7 @@ end context 'as a user' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:user) { make_developer_for_space(space) } let(:user_headers) do @@ -36,7 +36,7 @@ end context 'as a UAA client' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:client) do user = make_developer_for_space(space) user.update(is_oauth_client: true) diff --git a/spec/request/resource_matches_spec.rb b/spec/request/resource_matches_spec.rb index 362f0faa24c..e7346b86501 100644 --- a/spec/request/resource_matches_spec.rb +++ b/spec/request/resource_matches_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' RSpec.describe 'Resource Matches' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } let(:developer_headers) do headers_for(developer, user_name: 'roto') @@ -64,7 +64,7 @@ end context 'when resource_matching feature flag is disabled' do - let!(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'resource_matching', enabled: false) } + let!(:feature_flag) { create(:feature_flag, name: 'resource_matching', enabled: false) } it 'returns zero matches' do post '/v3/resource_matches', body.to_json, developer_headers diff --git a/spec/request/revisions_spec.rb b/spec/request/revisions_spec.rb index 58b9f7e5c85..b299a7bb1f2 100644 --- a/spec/request/revisions_spec.rb +++ b/spec/request/revisions_spec.rb @@ -2,21 +2,21 @@ require 'request_spec_shared_examples' RSpec.describe 'Revisions' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: user_email, user_name: user_name) } - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:stack) { VCAP::CloudController::Stack.make } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } + let(:stack) { create(:stack) } let(:user_email) { Sham.email } let(:user_name) { 'some-username' } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'app_name', space: space) } - let!(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 42) } + let(:app_model) { create(:app_model, name: 'app_name', space: space) } + let!(:revision) { create(:revision_model, app: app_model, version: 42) } describe 'GET /v3/revisions/:revguid' do - let(:droplet) { VCAP::CloudController::DropletModel.make(process_types: { 'web' => 'bake rackup' }) } - let(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 42, droplet: droplet) } - let!(:revision_worker_process_command) { VCAP::CloudController::RevisionProcessCommandModel.make(revision: revision, process_type: 'worker', process_command: './work') } - let!(:revision_sidecar) { VCAP::CloudController::RevisionSidecarModel.make(revision: revision, name: 'my-sidecar', command: 'run-sidecar', memory: 300) } + let(:droplet) { create(:droplet_model, process_types: { 'web' => 'bake rackup' }) } + let(:revision) { create(:revision_model, app: app_model, version: 42, droplet: droplet) } + let!(:revision_worker_process_command) { create(:revision_process_command_model, revision: revision, process_type: 'worker', process_command: './work') } + let!(:revision_sidecar) { create(:revision_sidecar_model, revision: revision, name: 'my-sidecar', command: 'run-sidecar', memory: 300) } let(:api_call) { ->(user_headers) { get "/v3/revisions/#{revision.guid}", nil, user_headers } } let(:revision_model_response_object) do { @@ -76,7 +76,7 @@ end describe 'GET /v3/apps/:guid/revisions' do - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 43, description: 'New droplet deployed') } + let!(:revision2) { create(:revision_model, app: app_model, version: 43, description: 'New droplet deployed') } context 'gets all revisions for an app' do it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do @@ -202,7 +202,7 @@ context 'filtering' do it 'gets a list of revisions matching the provided versions' do - revision3 = VCAP::CloudController::RevisionModel.make(app: app_model, version: 44, description: 'Rollback to revision 42') + revision3 = create(:revision_model, app: app_model, version: 44, description: 'Rollback to revision 42') get "/v3/apps/#{app_model.guid}/revisions?per_page=2&versions=42,44", nil, user_header expect(last_response.status).to eq(200) @@ -301,18 +301,18 @@ end context 'label_selector' do - let!(:revisionA) { VCAP::CloudController::RevisionModel.make(app: app_model) } - let!(:revisionB) { VCAP::CloudController::RevisionModel.make(app: app_model) } - let!(:revisionC) { VCAP::CloudController::RevisionModel.make(app: app_model) } + let!(:revisionA) { create(:revision_model, app: app_model) } + let!(:revisionB) { create(:revision_model, app: app_model) } + let!(:revisionC) { create(:revision_model, app: app_model) } - let!(:revAFruit) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'fruit', value: 'strawberry', resource_guid: revisionA.guid) } - let!(:revAAnimal) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'animal', value: 'horse', resource_guid: revisionA.guid) } + let!(:revAFruit) { create(:revision_label_model, key_name: 'fruit', value: 'strawberry', resource_guid: revisionA.guid) } + let!(:revAAnimal) { create(:revision_label_model, key_name: 'animal', value: 'horse', resource_guid: revisionA.guid) } - let!(:revBEnv) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'env', value: 'prod', resource_guid: revisionB.guid) } - let!(:revBAnimal) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'animal', value: 'dog', resource_guid: revisionB.guid) } + let!(:revBEnv) { create(:revision_label_model, key_name: 'env', value: 'prod', resource_guid: revisionB.guid) } + let!(:revBAnimal) { create(:revision_label_model, key_name: 'animal', value: 'dog', resource_guid: revisionB.guid) } - let!(:revCEnv) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'env', value: 'prod', resource_guid: revisionC.guid) } - let!(:revCAnimal) { VCAP::CloudController::RevisionLabelModel.make(key_name: 'animal', value: 'horse', resource_guid: revisionC.guid) } + let!(:revCEnv) { create(:revision_label_model, key_name: 'env', value: 'prod', resource_guid: revisionC.guid) } + let!(:revCAnimal) { create(:revision_label_model, key_name: 'animal', value: 'horse', resource_guid: revisionC.guid) } it 'returns the matching revisions' do get "/v3/apps/#{app_model.guid}/revisions?label_selector=!fruit,env=prod,animal in (dog,horse)", nil, user_header @@ -441,11 +441,10 @@ end let!(:revision2) do - VCAP::CloudController::RevisionModel.make( - app: app_model, - version: 43, - environment_variables: { 'key' => 'value' } - ) + create(:revision_model, + app: app_model, + version: 43, + environment_variables: { 'key' => 'value' }) end it 'gets the environment variables for the revision' do @@ -469,11 +468,11 @@ end describe 'GET /v3/apps/:guid/revisions/deployed' do - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 43, description: 'New droplet deployed') } - let!(:revision3) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 44, description: 'New environment variables') } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision, type: 'web', state: 'STARTED') } - let!(:process2) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision2, type: 'worker', state: 'STARTED') } - let!(:process3) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision3, type: 'web', state: 'STOPPED') } + let!(:revision2) { create(:revision_model, app: app_model, version: 43, description: 'New droplet deployed') } + let!(:revision3) { create(:revision_model, app: app_model, version: 44, description: 'New environment variables') } + let!(:process) { create(:process, app: app_model, revision: revision, type: 'web', state: 'STARTED') } + let!(:process2) { create(:process, app: app_model, revision: revision2, type: 'worker', state: 'STARTED') } + let!(:process3) { create(:process, app: app_model, revision: revision3, type: 'web', state: 'STOPPED') } it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/revisions/deployed?per_page=2", nil, user_headers } } diff --git a/spec/request/roles_spec.rb b/spec/request/roles_spec.rb index 421765a8052..929a0894d75 100644 --- a/spec/request/roles_spec.rb +++ b/spec/request/roles_spec.rb @@ -2,14 +2,14 @@ require 'request_spec_shared_examples' RSpec.describe 'Roles Request' do - let(:user) { VCAP::CloudController::User.make(guid: 'user_guid') } + let(:user) { create(:user, guid: 'user_guid') } let(:admin_header) { admin_headers_for(user) } - let(:org) { VCAP::CloudController::Organization.make(guid: 'big-org', created_at: Time.now.utc - 1.second) } - let(:space) { VCAP::CloudController::Space.make(guid: 'big-space', organization: org, created_at: Time.now.utc - 1.second) } - let(:user_with_role) { VCAP::CloudController::User.make(guid: 'user_with_role') } + let(:org) { create(:organization, guid: 'big-org', created_at: Time.now.utc - 1.second) } + let(:space) { create(:space, guid: 'big-space', organization: org, created_at: Time.now.utc - 1.second) } + let(:user_with_role) { create(:user, guid: 'user_with_role') } let(:user_guid) { user.guid } let(:space_guid) { space.guid } - let(:user_unaffiliated) { VCAP::CloudController::User.make(guid: 'user_no_role') } + let(:user_unaffiliated) { create(:user, guid: 'user_no_role') } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } before do @@ -675,7 +675,7 @@ context 'when the flag to set roles by username is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'set_roles_by_username') + create(:feature_flag, name: 'set_roles_by_username') end let(:params) do @@ -795,7 +795,7 @@ context 'when the flag to set roles by username is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'set_roles_by_username') + create(:feature_flag, name: 'set_roles_by_username') end let(:expected_codes_and_responses) do @@ -1094,22 +1094,20 @@ describe 'GET /v3/roles' do let(:api_call) { ->(user_headers) { get '/v3/roles', nil, user_headers } } - let(:other_user) { VCAP::CloudController::User.make(guid: 'other-user-guid', created_at: Time.now.utc - 1.second) } + let(:other_user) { create(:user, guid: 'other-user-guid', created_at: Time.now.utc - 1.second) } let!(:space_auditor) do - VCAP::CloudController::SpaceAuditor.make( - space: space, - user: other_user, - created_at: Time.now - 5.minutes - ) + create(:space_auditor, + space: space, + user: other_user, + created_at: Time.now - 5.minutes) end let!(:organization_auditor) do - VCAP::CloudController::OrganizationAuditor.make( - organization: org, - user: other_user, - created_at: Time.now - ) + create(:organization_auditor, + organization: org, + user: other_user, + created_at: Time.now) end let(:space_auditor_response_object) do @@ -1339,7 +1337,7 @@ def make_space_role_for_current_user(type) end context 'listing roles with filters' do - let(:too_late_org_role) { OrganizationAuditor.make(user: other_user, organization: org, created_at: '2028-05-26T18:47:01Z') } + let(:too_late_org_role) { create(:organization_auditor, user: other_user, organization: org, created_at: '2028-05-26T18:47:01Z') } let(:api_call) do lambda { |user_headers| get "/v3/roles?user_guids=#{other_user.guid}& @@ -1371,10 +1369,10 @@ def make_space_role_for_current_user(type) end context 'listing roles with overlapping timestamps' do - let!(:user_jeff) { VCAP::CloudController::User.make(guid: 'jeff-guid') } - let!(:role_one) { VCAP::CloudController::OrganizationAuditor.make(guid: '1', user: user_jeff, organization: org, created_at: '2019-12-25T13:00:00Z') } - let!(:role_two) { VCAP::CloudController::SpaceAuditor.make(guid: '2', user: user_jeff, space: space, created_at: '2019-12-25T13:00:00Z') } - let!(:role_three) { VCAP::CloudController::SpaceManager.make(guid: '3', user: user_jeff, space: space, created_at: '2019-12-25T13:00:00Z') } + let!(:user_jeff) { create(:user, guid: 'jeff-guid') } + let!(:role_one) { create(:organization_auditor, guid: '1', user: user_jeff, organization: org, created_at: '2019-12-25T13:00:00Z') } + let!(:role_two) { create(:space_auditor, guid: '2', user: user_jeff, space: space, created_at: '2019-12-25T13:00:00Z') } + let!(:role_three) { create(:space_manager, guid: '3', user: user_jeff, space: space, created_at: '2019-12-25T13:00:00Z') } it 'sorts the the roles on a secondary key and keeps the same order between calls' do get('/v3/roles', nil, admin_header) @@ -1485,9 +1483,9 @@ def make_space_role_for_current_user(type) end context 'when there are multiple users with multiple roles' do - let(:another_user) { VCAP::CloudController::User.make(guid: 'another-user-guid') } - let(:another_org) { VCAP::CloudController::Organization.make } - let(:another_space) { VCAP::CloudController::Space.make } + let(:another_user) { create(:user, guid: 'another-user-guid') } + let(:another_org) { create(:organization) } + let(:another_space) { create(:space) } let(:another_user_response) do { @@ -1560,36 +1558,32 @@ def make_space_role_for_current_user(type) end let!(:organization_billing_manager) do - VCAP::CloudController::OrganizationBillingManager.make( - guid: 'organization_billing_manager-guid', - organization: org, - user: another_user, - created_at: Time.now - 3.minutes - ) + create(:organization_billing_manager, + guid: 'organization_billing_manager-guid', + organization: org, + user: another_user, + created_at: Time.now - 3.minutes) end let!(:space_auditor) do - VCAP::CloudController::SpaceAuditor.make( - guid: 'space_auditor-guid', - space: space, - user: another_user - ) + create(:space_auditor, + guid: 'space_auditor-guid', + space: space, + user: another_user) end let!(:another_space_auditor) do - VCAP::CloudController::SpaceAuditor.make( - guid: 'another-space_auditor-guid', - space: another_space, - user: another_user - ) + create(:space_auditor, + guid: 'another-space_auditor-guid', + space: another_space, + user: another_user) end let!(:org_manager) do - VCAP::CloudController::OrganizationManager.make( - guid: 'organization_manager-guid', - organization: another_org, - user: another_user - ) + create(:organization_manager, + guid: 'organization_manager-guid', + organization: another_org, + user: another_user) end before do @@ -1627,7 +1621,7 @@ def make_space_role_for_current_user(type) let(:api_call) { ->(user_headers) { get "/v3/roles/#{role.guid}", nil, user_headers } } context 'when getting a space role' do - let(:role) { VCAP::CloudController::SpaceAuditor.make(user: user_with_role, space: space) } + let(:role) { create(:space_auditor, user: user_with_role, space: space) } let(:expected_response) do { @@ -1670,7 +1664,7 @@ def make_space_role_for_current_user(type) end context 'when getting a org role' do - let(:role) { VCAP::CloudController::OrganizationAuditor.make(user: user_with_role, organization: org) } + let(:role) { create(:organization_auditor, user: user_with_role, organization: org) } let(:expected_response) do { @@ -1725,8 +1719,8 @@ def make_space_role_for_current_user(type) end context 'getting a role with included resources' do - let(:org_role) { VCAP::CloudController::OrganizationAuditor.make(user: user_with_role, organization: org) } - let(:space_role) { VCAP::CloudController::SpaceAuditor.make(user: user_with_role, space: space) } + let(:org_role) { create(:organization_auditor, user: user_with_role, organization: org) } + let(:space_role) { create(:space_auditor, user: user_with_role, space: space) } let(:user_with_role_response) do { @@ -1851,7 +1845,7 @@ def make_space_role_for_current_user(type) end context 'when deleting a space role' do - let(:role) { VCAP::CloudController::SpaceAuditor.make(user: user_with_role, space: space) } + let(:role) { create(:space_auditor, user: user_with_role, space: space) } let(:expected_codes_and_responses) do h = Hash.new({ code: 403, errors: CF_NOT_AUTHORIZED }.freeze) @@ -1882,7 +1876,7 @@ def make_space_role_for_current_user(type) end context 'when deleting an org role' do - let(:role) { VCAP::CloudController::OrganizationAuditor.make(user: user_with_role, organization: org) } + let(:role) { create(:organization_auditor, user: user_with_role, organization: org) } let(:expected_codes_and_responses) do h = Hash.new({ code: 403, errors: CF_NOT_AUTHORIZED }.freeze) @@ -1928,7 +1922,7 @@ def make_space_role_for_current_user(type) end context 'when the user is not logged in' do - let(:role) { VCAP::CloudController::SpaceAuditor.make(user: user_with_role, space: space) } + let(:role) { create(:space_auditor, user: user_with_role, space: space) } it 'returns a 401' do delete "/v3/roles/#{role.guid}", nil, base_json_headers diff --git a/spec/request/route_destinations_spec.rb b/spec/request/route_destinations_spec.rb index 668b91adeea..ac7c80a6f7f 100644 --- a/spec/request/route_destinations_spec.rb +++ b/spec/request/route_destinations_spec.rb @@ -2,9 +2,9 @@ require 'request_spec_shared_examples' RSpec.describe 'Route Destinations Request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:admin_header) { admin_headers_for(user) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } before do @@ -12,10 +12,10 @@ end context 'buildpack table test' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, space:) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(:docker, app: app_model, type: 'web') } - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:route2) { VCAP::CloudController::Route.make(space:) } + let(:app_model) { create(:app_model, :docker, space:) } + let!(:process_model) { create(:process, :docker, app: app_model, type: 'web') } + let(:route1) { create(:route, space:) } + let(:route2) { create(:route, space:) } [ # case, dst1 specified port, dst2 specified port, dst1 actual port, dst2 actual port, exposed ports, @@ -63,10 +63,10 @@ end context 'docker table test' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, space:) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(:docker, app: app_model, type: 'web') } - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:route2) { VCAP::CloudController::Route.make(space:) } + let(:app_model) { create(:app_model, :docker, space:) } + let!(:process_model) { create(:process, :docker, app: app_model, type: 'web') } + let(:route1) { create(:route, space:) } + let(:route2) { create(:route, space:) } [ # case, dst1 specified port, dst2 specified port, docker ports, dst1 actual port, dst2 actual port, exposed ports, @@ -97,14 +97,13 @@ post "/v3/routes/#{route2.guid}/destinations", { destinations: [params2] }.to_json, admin_header expect(last_response.status).to eq(200) - droplet = VCAP::CloudController::DropletModel.make( - :docker, - app: app_model, - execution_metadata: { - ports: docker_ports.map { |dp| { Port: dp, Protocol: 'tcp' } } - }.to_json, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + droplet = create(:droplet_model, + :docker, + app: app_model, + execution_metadata: { + ports: docker_ports.map { |dp| { Port: dp, Protocol: 'tcp' } } + }.to_json, + state: VCAP::CloudController::DropletModel::STAGED_STATE) app_model.update(droplet:) get "/v3/routes/#{route1.guid}/destinations", nil, admin_header @@ -128,9 +127,9 @@ end describe 'GET /v3/routes/:guid/destinations' do - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let!(:destination) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route, process_type: 'web') } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } + let!(:destination) { create(:route_mapping_model, app: app_model, route: route, process_type: 'web') } let(:api_call) { ->(user_headers) { get "/v3/routes/#{route.guid}/destinations", nil, user_headers } } let(:response_json) do { @@ -198,8 +197,8 @@ end context 'filters' do - let(:app_model2) { VCAP::CloudController::AppModel.make(space:) } - let!(:destination2) { VCAP::CloudController::RouteMappingModel.make(app: app_model2, route: route, process_type: 'web') } + let(:app_model2) { create(:app_model, space:) } + let!(:destination2) { create(:route_mapping_model, app: app_model2, route: route, process_type: 'web') } context 'when filtering on app_guids' do it 'returns only the destinations for the requested app_guids' do @@ -218,17 +217,16 @@ end describe 'POST /v3/routes/:guid/destinations' do - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } let(:user_header) { headers_for(user) } let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - guid: '00000000', # early guid to ensure order - app: app_model, - route: route, - process_type: 'worker', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT - ) + create(:route_mapping_model, + guid: '00000000', # early guid to ensure order + app: app_model, + route: route, + process_type: 'worker', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT) end let(:params) do { @@ -374,7 +372,7 @@ end context "when the app is in the route's shared space" do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:params) do { destinations: [ @@ -403,7 +401,7 @@ context 'when the app is invalid' do context 'when an app is outside the route space' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:params) do { destinations: [ @@ -511,8 +509,8 @@ end context 'when the user can not read the app' do - let(:non_visible_space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space: non_visible_space) } + let(:non_visible_space) { create(:space) } + let(:app_model) { create(:app_model, space: non_visible_space) } let(:params) do { destinations: [ @@ -576,7 +574,7 @@ end context 'when there is an existing weighted destination' do - let!(:existing_destination) { VCAP::CloudController::RouteMappingModel.make(app: app_model, process_type: 'something', route: route, weight: 10) } + let!(:existing_destination) { create(:route_mapping_model, app: app_model, process_type: 'something', route: route, weight: 10) } it 'returns 422 with a helpful message' do post "/v3/routes/#{route.guid}/destinations", params.to_json, admin_header @@ -588,9 +586,9 @@ end describe 'PATCH /v3/routes/:guid/destinations' do - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:user_header) { headers_for(user) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } let(:params) do { destinations: [ @@ -617,11 +615,10 @@ context 'when all destinations are for the same app' do let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'assistant' - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'assistant') end it 'replaces all destinations on the route' do @@ -650,12 +647,11 @@ } end let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'assistant', - protocol: existing_protocol - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'assistant', + protocol: existing_protocol) end context 'http1/http2' do @@ -688,7 +684,7 @@ allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) allow_any_instance_of(VCAP::CloudController::RouteValidator).to receive(:validate) - VCAP::CloudController::Route.make(:tcp, space:) + create(:route, :tcp, space:) end let(:existing_protocol) { 'tcp' } let(:new_protocol) { nil } @@ -702,23 +698,21 @@ end context 'when removing a destination app' do - let(:app_model_1) { VCAP::CloudController::AppModel.make(space:) } - let(:app_model_2) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model_1) { create(:app_model, space:) } + let(:app_model_2) { create(:app_model, space:) } let!(:existing_destination_1) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model_1, - route: route, - process_type: 'web', - app_port: 8080 - ) + create(:route_mapping_model, + app: app_model_1, + route: route, + process_type: 'web', + app_port: 8080) end let!(:existing_destination_2) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model_2, - route: route, - process_type: 'web', - app_port: 8080 - ) + create(:route_mapping_model, + app: app_model_2, + route: route, + process_type: 'web', + app_port: 8080) end let(:params) do { @@ -743,14 +737,13 @@ end context 'when removing all destination apps' do - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'web', - app_port: 8080 - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'web', + app_port: 8080) end let(:params) do { @@ -873,7 +866,7 @@ context 'when the app is invalid' do context 'when an app is outside the route space' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:params) do { destinations: [ @@ -981,8 +974,8 @@ end context 'when the user can not read the app' do - let(:non_visible_space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space: non_visible_space) } + let(:non_visible_space) { create(:space) } + let(:app_model) { create(:app_model, space: non_visible_space) } let(:params) do { destinations: [ @@ -1094,13 +1087,12 @@ end context 'when two different destinations have the same port' do - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, ports: [9000], type: 'web') } + let!(:process_model) { create(:process, app: app_model, ports: [9000], type: 'web') } let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - app_port: 9000 - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 9000) end let(:params) do @@ -1132,21 +1124,19 @@ context 'when two destinations match a currently existing destination' do let!(:existing_destination_1) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - app_port: 9000, - weight: 1 - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 9000, + weight: 1) end let!(:existing_destination_2) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - app_port: 8080, - weight: 99 - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 8080, + weight: 99) end let(:params) do @@ -1185,7 +1175,7 @@ end context "when the app is in the route's shared space" do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:params) do { destinations: [ @@ -1216,27 +1206,25 @@ describe 'UPDATE /v3/routes/:guid/destinations/:destination_guid' do let(:user_header) { headers_for(user) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } let!(:destination_to_preserve) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'web', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, - weight: nil - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'web', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, + weight: nil) end let!(:destination_to_update) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'worker', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, - weight: nil - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'worker', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, + weight: nil) end context 'permissions' do @@ -1299,17 +1287,16 @@ allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) allow_any_instance_of(VCAP::CloudController::RouteValidator).to receive(:validate) - VCAP::CloudController::Route.make(:tcp, space:) + create(:route, :tcp, space:) end - let(:tcp_app) { VCAP::CloudController::AppModel.make(space:) } + let(:tcp_app) { create(:app_model, space:) } let!(:destination) do - VCAP::CloudController::RouteMappingModel.make( - app: tcp_app, - route: tcp_route, - process_type: 'worker', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, - weight: nil - ) + create(:route_mapping_model, + app: tcp_app, + route: tcp_route, + process_type: 'worker', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, + weight: nil) end context 'and the destination has a protocol of tcp' do @@ -1339,27 +1326,25 @@ describe 'DELETE /v3/routes/:guid/destinations/:destination_guid' do let(:user_header) { headers_for(user) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } let!(:destination_to_preserve) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'web', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, - weight: nil - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'web', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, + weight: nil) end let!(:destination_to_delete) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'worker', - app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, - weight: nil - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'worker', + app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT, + weight: nil) end context 'permissions' do @@ -1437,7 +1422,7 @@ end context 'when there is an existing weighted destination' do - let!(:existing_destination) { VCAP::CloudController::RouteMappingModel.make(app: app_model, process_type: 'something', route: route, weight: 10) } + let!(:existing_destination) { create(:route_mapping_model, app: app_model, process_type: 'something', route: route, weight: 10) } it 'returns 422 with a helpful message' do delete "/v3/routes/#{route.guid}/destinations/#{existing_destination.guid}", nil, admin_header diff --git a/spec/request/routes_spec.rb b/spec/request/routes_spec.rb index a8ad0dc1e2d..65d0131e4d1 100644 --- a/spec/request/routes_spec.rb +++ b/spec/request/routes_spec.rb @@ -4,10 +4,10 @@ require 'presenters/v3/organization_presenter' RSpec.describe 'Routes Request' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:admin_header) { admin_headers_for(user) } - let!(:org) { VCAP::CloudController::Organization.make(created_at: 1.hour.ago) } - let!(:space) { VCAP::CloudController::Space.make(name: 'a-space', created_at: 1.hour.ago, organization: org) } + let!(:org) { create(:organization, created_at: 1.hour.ago) } + let!(:space) { create(:space, name: 'a-space', created_at: 1.hour.ago, organization: org) } let(:space_json_generator) do lambda { |s| @@ -32,17 +32,17 @@ end describe 'GET /v3/routes' do - let(:other_space) { VCAP::CloudController::Space.make(name: 'b-space') } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:other_space) { create(:space, name: 'b-space') } + let(:app_model) { create(:app_model, space:) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let!(:route_in_org) do - VCAP::CloudController::Route.make(space: space, domain: domain, host: 'host-1', path: '/path1', guid: 'route-in-org-guid') + create(:route, space: space, domain: domain, host: 'host-1', path: '/path1', guid: 'route-in-org-guid') end let!(:route_in_other_org) do - VCAP::CloudController::Route.make(space: other_space, host: 'host-2', path: '/path2', guid: 'route-in-other-org-guid') + create(:route, space: other_space, host: 'host-2', path: '/path2', guid: 'route-in-other-org-guid') end - let!(:route_in_org_dest_web) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_in_org, process_type: 'web') } - let!(:route_in_org_dest_worker) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_in_org, process_type: 'worker') } + let!(:route_in_org_dest_web) { create(:route_mapping_model, app: app_model, route: route_in_org, process_type: 'web') } + let!(:route_in_org_dest_worker) { create(:route_mapping_model, app: app_model, route: route_in_org, process_type: 'worker') } let(:api_call) { ->(user_headers) { get '/v3/routes', nil, user_headers } } let(:route_in_org_json) do { @@ -194,7 +194,7 @@ describe 'includes' do context 'when including domains' do - let(:domain1) { VCAP::CloudController::SharedDomain.make(name: 'first-domain.example.com') } + let(:domain1) { create(:shared_domain, name: 'first-domain.example.com') } let(:domain1_json) do { guid: domain1.guid, @@ -223,7 +223,7 @@ } end - let(:domain2) { VCAP::CloudController::SharedDomain.make(name: 'second-domain.example.com') } + let(:domain2) { create(:shared_domain, name: 'second-domain.example.com') } let(:domain2_json) do { guid: domain2.guid, @@ -252,7 +252,7 @@ } end - let(:domain2) { VCAP::CloudController::SharedDomain.make(name: 'second-domain.example.com') } + let(:domain2) { create(:shared_domain, name: 'second-domain.example.com') } let(:domain2_json) do { guid: domain2.guid, @@ -282,7 +282,7 @@ end let!(:route1_domain1) do - VCAP::CloudController::Route.make(space: space, host: 'route1', domain: domain1, path: '/path1', guid: 'route1-guid') + create(:route, space: space, host: 'route1', domain: domain1, path: '/path1', guid: 'route1-guid') end let(:route1_domain1_json) do { @@ -322,10 +322,10 @@ end let!(:route_in_org) do - VCAP::CloudController::Route.make(space: space, domain: domain1, host: 'host-1', path: '/path1', guid: 'route-in-org-guid') + create(:route, space: space, domain: domain1, host: 'host-1', path: '/path1', guid: 'route-in-org-guid') end let!(:route_in_other_org) do - VCAP::CloudController::Route.make(space: other_space, domain: domain2, host: 'host-2', path: '/path2', guid: 'route-in-other-org-guid') + create(:route, space: other_space, domain: domain2, host: 'host-2', path: '/path2', guid: 'route-in-other-org-guid') end it 'includes the unique domains for the routes' do @@ -391,10 +391,10 @@ describe 'filters' do let!(:route_without_host_and_with_path) do - VCAP::CloudController::Route.make(space: space, host: '', domain: domain, path: '/path1', guid: 'route-without-host') + create(:route, space: space, host: '', domain: domain, path: '/path1', guid: 'route-without-host') end let!(:route_without_host_and_with_path2) do - VCAP::CloudController::Route.make(space: space, host: '', domain: domain, path: '/path2', guid: 'route-without-host2') + create(:route, space: space, host: '', domain: domain, path: '/path2', guid: 'route-without-host2') end let(:route_without_host_and_with_path_json) do { @@ -469,7 +469,7 @@ } end let!(:route_without_path_and_with_host) do - VCAP::CloudController::Route.make(space: space, host: 'host-1', domain: domain, path: '', guid: 'route-without-path') + create(:route, space: space, host: 'host-1', domain: domain, path: '', guid: 'route-without-path') end let(:route_without_path_and_with_host_json) do { @@ -624,15 +624,15 @@ context 'when there are multiple TCP routes with different ports' do # The following `let`s depend on the above `before do` - let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } + let(:domain_tcp) { create(:shared_domain, router_group_guid: router_group.guid, name: 'my.domain') } let!(:route_with_ports_0) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) end let!(:route_with_ports_1) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) end let!(:route_with_ports_2) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) end it 'returns routes filtered by ports' do @@ -646,21 +646,21 @@ context 'service instance guids filter' do let(:service_instance_one) do - VCAP::CloudController::ManagedServiceInstance.make(:routing, space: space, name: 'si-name-1') + create(:managed_service_instance, :routing, space: space, name: 'si-name-1') end let(:service_instance_two) do - VCAP::CloudController::ManagedServiceInstance.make(:routing, space: space, name: 'si-name-2') + create(:managed_service_instance, :routing, space: space, name: 'si-name-2') end let!(:route_with_service_instance_one) do - VCAP::CloudController::Route.make(space: space, host: 'host-with-service-instance-one', domain: domain, path: '/path1', guid: 'route-with-service-instance-one') + create(:route, space: space, host: 'host-with-service-instance-one', domain: domain, path: '/path1', guid: 'route-with-service-instance-one') end let!(:route_with_service_instance_two) do - VCAP::CloudController::Route.make(space: space, host: 'host-with-service-instance-two', domain: domain, path: '/path2', guid: 'route-with-service-instance-two') + create(:route, space: space, host: 'host-with-service-instance-two', domain: domain, path: '/path2', guid: 'route-with-service-instance-two') end - let!(:route_mapping_one) { VCAP::CloudController::RouteBinding.make(route: route_with_service_instance_one, service_instance: service_instance_one) } - let!(:route_mapping_two) { VCAP::CloudController::RouteBinding.make(route: route_with_service_instance_two, service_instance: service_instance_two) } + let!(:route_mapping_one) { create(:route_binding, route: route_with_service_instance_one, service_instance: service_instance_one) } + let!(:route_mapping_two) { create(:route_binding, route: route_with_service_instance_two, service_instance: service_instance_two) } it 'returns routes filtered by service instance guid' do get "/v3/routes?service_instance_guids=#{service_instance_one.guid},#{service_instance_two.guid}", nil, admin_header @@ -672,14 +672,14 @@ end describe 'labels' do - let!(:domain1) { VCAP::CloudController::PrivateDomain.make(name: 'dom1.com', owning_organization: org) } - let!(:route1) { VCAP::CloudController::Route.make(space: space, domain: domain1, host: 'hall', path: '/oates', guid: 'guid-1') } - let!(:route1_label) { VCAP::CloudController::RouteLabelModel.make(resource_guid: route1.guid, key_name: 'animal', value: 'dog') } + let!(:domain1) { create(:private_domain, name: 'dom1.com', owning_organization: org) } + let!(:route1) { create(:route, space: space, domain: domain1, host: 'hall', path: '/oates', guid: 'guid-1') } + let!(:route1_label) { create(:route_label_model, resource_guid: route1.guid, key_name: 'animal', value: 'dog') } - let!(:domain2) { VCAP::CloudController::PrivateDomain.make(name: 'dom2.com', owning_organization: org) } - let!(:route2) { VCAP::CloudController::Route.make(space: space, domain: domain2, guid: 'guid-2') } - let!(:route2_label) { VCAP::CloudController::RouteLabelModel.make(resource_guid: route2.guid, key_name: 'animal', value: 'cow') } - let!(:route2__exclusive_label) { VCAP::CloudController::RouteLabelModel.make(resource_guid: route2.guid, key_name: 'santa', value: 'claus') } + let!(:domain2) { create(:private_domain, name: 'dom2.com', owning_organization: org) } + let!(:route2) { create(:route, space: space, domain: domain2, guid: 'guid-2') } + let!(:route2_label) { create(:route_label_model, resource_guid: route2.guid, key_name: 'animal', value: 'cow') } + let!(:route2__exclusive_label) { create(:route_label_model, resource_guid: route2.guid, key_name: 'santa', value: 'claus') } describe 'label_selectors' do it 'returns a 200 and the filtered routes for "in" label selector' do @@ -961,8 +961,8 @@ end describe 'GET /v3/routes/:guid' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let(:route) { VCAP::CloudController::Route.make(space:, domain:) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let(:route) { create(:route, space:, domain:) } let(:api_call) { ->(user_headers) { get "/v3/routes/#{route.guid}", nil, user_headers } } let(:route_json) do { @@ -1125,7 +1125,7 @@ describe 'POST /v3/routes' do context 'when creating a route in a tcp domain' do - let(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'some-router-group', router_group_type: 'tcp') } + let(:domain) { create(:shared_domain, router_group_guid: 'some-router-group', router_group_type: 'tcp') } before do token = { token_type: 'Bearer', access_token: 'my-favourite-access-token' } @@ -1181,7 +1181,7 @@ end context 'when creating a route in a scoped domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } describe 'when creating a route without a host' do let(:params) do @@ -1424,7 +1424,7 @@ end context 'when creating a route in an unscoped domain' do - let(:domain) { VCAP::CloudController::SharedDomain.make } + let(:domain) { create(:shared_domain) } describe 'when creating a route without a host' do let(:params) do @@ -1595,7 +1595,7 @@ describe 'the domain supports tcp routes' do let(:router_group) { VCAP::CloudController::RoutingApi::RouterGroup.new({ 'type' => 'tcp', 'reservable_ports' => '123' }) } - let(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'some-router-group', name: 'my.domain') } + let(:domain) { create(:shared_domain, router_group_guid: 'some-router-group', name: 'my.domain') } let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } before do @@ -1680,7 +1680,7 @@ it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS context 'and a route with the domain and port already exist' do - let!(:duplicate_route) { VCAP::CloudController::Route.make(host: '', space: space, domain: domain, port: 123) } + let!(:duplicate_route) { create(:route, host: '', space: space, domain: domain, port: 123) } it 'fails with a helpful error message' do post '/v3/routes', params.to_json, admin_headers @@ -1690,8 +1690,8 @@ end context 'and the port is already in use for the router group' do - let!(:other_domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'some-router-group', name: 'my.domain2') } - let!(:route_with_port) { VCAP::CloudController::Route.make(host: '', space: space, domain: other_domain, port: 123) } + let!(:other_domain) { create(:shared_domain, router_group_guid: 'some-router-group', name: 'my.domain2') } + let!(:route_with_port) { create(:route, host: '', space: space, domain: other_domain, port: 123) } it 'fails with a helpful error message' do post '/v3/routes', params.to_json, admin_headers @@ -1718,7 +1718,7 @@ it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS context 'and randomly selected port is already in use' do - let(:existing_route) { VCAP::CloudController::Route.make(host: '', space: space, domain: domain, port: 123) } + let(:existing_route) { create(:route, host: '', space: space, domain: domain, port: 123) } let(:params) do { @@ -1749,7 +1749,7 @@ org.update(status: VCAP::CloudController::Organization::SUSPENDED) end - let(:domain) { VCAP::CloudController::SharedDomain.make } + let(:domain) { create(:shared_domain) } let(:params) do { @@ -1816,7 +1816,7 @@ end context 'when creating a route in an internal domain' do - let(:domain) { VCAP::CloudController::SharedDomain.make(internal: true) } + let(:domain) { create(:shared_domain, internal: true) } describe 'when creating a route with a wildcard host' do let(:params) do @@ -1939,8 +1939,8 @@ end context 'when the domain has an owning org that is different from the space\'s parent org' do - let(:other_org) { VCAP::CloudController::Organization.make } - let(:inaccessible_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: other_org) } + let(:other_org) { create(:organization) } + let(:inaccessible_domain) { create(:private_domain, owning_organization: other_org) } let(:params_with_inaccessible_domain) do { @@ -1963,8 +1963,8 @@ end context 'when the host-less route has already been created for this domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let!(:existing_route) { VCAP::CloudController::Route.make(host: '', space: space, domain: domain) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let!(:existing_route) { create(:route, host: '', space: space, domain: domain) } let(:params_for_duplicate_route) do { @@ -1988,8 +1988,8 @@ context 'when there is already a route' do context 'with the host/domain/path combination' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let!(:existing_route) { VCAP::CloudController::Route.make(host: 'my-host', path: '/existing', space: space, domain: domain) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let!(:existing_route) { create(:route, host: 'my-host', path: '/existing', space: space, domain: domain) } let(:params_for_duplicate_route) do { @@ -2014,8 +2014,8 @@ end context 'with the host/domain combination' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let!(:existing_route) { VCAP::CloudController::Route.make(host: 'my-host', space: space, domain: domain) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let!(:existing_route) { create(:route, host: 'my-host', space: space, domain: domain) } let(:params_for_duplicate_route) do { @@ -2041,8 +2041,8 @@ end context 'when there is already a domain matching the host/domain combination' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let!(:existing_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization, name: "#{params[:host]}.#{domain.name}") } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let!(:existing_domain) { create(:private_domain, owning_organization: space.organization, name: "#{params[:host]}.#{domain.name}") } let(:params) do { @@ -2066,7 +2066,7 @@ end context 'when using a reserved system hostname with the system domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let(:params) do { @@ -2095,7 +2095,7 @@ end context 'when using a non-reserved hostname with the system domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let(:api_call) { ->(user_headers) { post '/v3/routes', params.to_json, user_headers } } let(:params) do @@ -2173,9 +2173,9 @@ describe 'quotas' do context 'when the space quota for routes is maxed out' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let!(:space_quota_definition) { VCAP::CloudController::SpaceQuotaDefinition.make(total_routes: 0, organization: org) } - let!(:space_with_quota) { VCAP::CloudController::Space.make(space_quota_definition: space_quota_definition, organization: org) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let!(:space_quota_definition) { create(:space_quota_definition, total_routes: 0, organization: org) } + let!(:space_with_quota) { create(:space, space_quota_definition: space_quota_definition, organization: org) } let(:params_for_space_with_quota) do { @@ -2198,12 +2198,12 @@ end context 'when the org quota for routes is maxed out' do - let!(:org_quota_definition) { VCAP::CloudController::QuotaDefinition.make(total_routes: 0, total_reserved_route_ports: 0) } - let!(:org_with_quota) { VCAP::CloudController::Organization.make(quota_definition: org_quota_definition) } + let!(:org_quota_definition) { create(:quota_definition, total_routes: 0, total_reserved_route_ports: 0) } + let!(:org_with_quota) { create(:organization, quota_definition: org_quota_definition) } let!(:space_in_org_with_quota) do - VCAP::CloudController::Space.make(organization: org_with_quota) + create(:space, organization: org_with_quota) end - let(:domain_in_org_with_quota) { VCAP::CloudController::Domain.make(owning_organization: org_with_quota) } + let(:domain_in_org_with_quota) { create(:domain, owning_organization: org_with_quota) } let(:params_for_org_with_quota) do { @@ -2228,8 +2228,8 @@ context 'when the feature flag is disabled' do let(:headers) { set_user_with_header_as_role(user: user, role: 'space_developer', org: org, space: space) } - let!(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'route_creation', enabled: false, error_message: 'my name is bob') } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let!(:feature_flag) { create(:feature_flag, name: 'route_creation', enabled: false, error_message: 'my name is bob') } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let(:params) do { host: 'some-host', @@ -2281,7 +2281,7 @@ end context 'when the space does not exist' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let(:params_with_invalid_space) do { @@ -2328,7 +2328,7 @@ let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } let(:router_group) { VCAP::CloudController::RoutingApi::RouterGroup.new({ 'type' => 'tcp', 'guid' => 'some-guid' }) } let(:headers) { set_user_with_header_as_role(role: 'admin') } - let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } + let(:domain_tcp) { create(:shared_domain, router_group_guid: router_group.guid, name: 'my.domain') } let(:params) do { relationships: { @@ -2388,7 +2388,7 @@ end context 'when the router group is unavailable' do - let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'not a guid', name: 'my.domain') } + let(:domain_tcp) { create(:shared_domain, router_group_guid: 'not a guid', name: 'my.domain') } before do allow(routing_api_client).to receive_messages(enabled?: true, router_group: nil) @@ -2405,8 +2405,8 @@ end describe 'PATCH /v3/routes/:guid' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let(:route) { VCAP::CloudController::Route.make(space: space, domain: domain, host: '') } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let(:route) { create(:route, space: space, domain: domain, host: '') } let(:api_call) { ->(user_headers) { patch "/v3/routes/#{route.guid}", params.to_json, user_headers } } let(:params) do { @@ -2491,9 +2491,9 @@ end context 'when the user is not a member in the routes org' do - let(:other_space) { VCAP::CloudController::Space.make } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: other_space.organization) } - let(:route) { VCAP::CloudController::Route.make(space: other_space, domain: domain, host: '') } + let(:other_space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: other_space.organization) } + let(:route) { create(:route, space: other_space, domain: domain, host: '') } let(:route_json) do { @@ -2603,8 +2603,8 @@ end describe 'DELETE /v3/routes/:guid' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } - let(:route) { VCAP::CloudController::Route.make(space:, domain:) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } + let(:route) { create(:route, space:, domain:) } let(:api_call) { ->(user_headers) { delete "/v3/routes/#{route.guid}", nil, user_headers } } let(:db_check) do lambda do @@ -2675,9 +2675,9 @@ describe 'GET /v3/routes/:guid/relationships/shared_spaces' do let(:api_call) { ->(user_headers) { get "/v3/routes/#{guid}/relationships/shared_spaces", nil, user_headers } } - let(:target_space_1) { VCAP::CloudController::Space.make(organization: org) } + let(:target_space_1) { create(:space, organization: org) } let(:route) do - route = VCAP::CloudController::Route.make(space:) + route = create(:route, space:) route.add_shared_space(target_space_1) route end @@ -2688,7 +2688,7 @@ headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'route_sharing', enabled: true, error_message: nil) end before do @@ -2756,8 +2756,8 @@ describe 'POST /v3/routes/:guid/relationships/shared_spaces' do let(:api_call) { ->(user_headers) { post "/v3/routes/#{guid}/relationships/shared_spaces", request_body.to_json, user_headers } } - let(:target_space_1) { VCAP::CloudController::Space.make(organization: org) } - let(:target_space_2) { VCAP::CloudController::Space.make(organization: org) } + let(:target_space_1) { create(:space, organization: org) } + let(:target_space_2) { create(:space, organization: org) } let(:request_body) do { 'data' => [ @@ -2766,7 +2766,7 @@ ] } end - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:guid) { route.guid } let(:space_dev_headers) do org.add_user(user) @@ -2774,7 +2774,7 @@ headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'route_sharing', enabled: true, error_message: nil) end before do @@ -2814,7 +2814,7 @@ context 'when target organization is suspended' do let(:target_space_1) do - space = VCAP::CloudController::Space.make + space = create(:space) space.organization.add_user(user) space.organization.update(status: VCAP::CloudController::Organization::SUSPENDED) space @@ -2978,7 +2978,7 @@ end context 'user does not have access to one of the target spaces' do - let(:no_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_access_target_space) { create(:space, organization: org) } let(:request_body) do { 'data' => [ @@ -3044,15 +3044,15 @@ describe 'DELETE /v3/routes/:guid/relationships/shared_spaces/:space_guid' do let(:api_call) { ->(user_headers) { delete "/v3/routes/#{guid}/relationships/shared_spaces/#{unshared_space_guid}", request_body.to_json, user_headers } } - let(:target_space_1) { VCAP::CloudController::Space.make(organization: org) } - let(:target_space_2) { VCAP::CloudController::Space.make(organization: org) } - let(:target_space_3) { VCAP::CloudController::Space.make(organization: org) } - let(:target_space_not_shared_with_route) { VCAP::CloudController::Space.make(organization: org) } + let(:target_space_1) { create(:space, organization: org) } + let(:target_space_2) { create(:space, organization: org) } + let(:target_space_3) { create(:space, organization: org) } + let(:target_space_not_shared_with_route) { create(:space, organization: org) } let(:space_to_unshare) { target_space_2 } let(:unshared_space_guid) { space_to_unshare.guid } let(:request_body) { {} } let(:route) do - route = VCAP::CloudController::Route.make(space:) + route = create(:route, space:) route.add_shared_space(target_space_1) route.add_shared_space(target_space_2) route.add_shared_space(target_space_3) @@ -3065,7 +3065,7 @@ headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'route_sharing', enabled: true, error_message: nil) end before do @@ -3106,7 +3106,7 @@ context 'when target organization is suspended' do let(:space_to_unshare) do - space = VCAP::CloudController::Space.make + space = create(:space) space.organization.add_user(user) space.add_developer(user) space.organization.update(status: VCAP::CloudController::Organization::SUSPENDED) @@ -3239,7 +3239,7 @@ end context 'user does not have read access to the target space' do - let(:unshared_space_guid) { VCAP::CloudController::Space.make(organization: org).guid } + let(:unshared_space_guid) { create(:space, organization: org).guid } it 'responds with 422 and does not share the route' do api_call.call(space_dev_headers) @@ -3258,7 +3258,7 @@ end context 'user does not have write access to the target space' do - let(:no_write_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_write_access_target_space) { create(:space, organization: org) } let(:unshared_space_guid) { no_write_access_target_space.guid } before do @@ -3284,10 +3284,10 @@ end describe 'PATCH /v3/routes/:guid/relationships/space' do - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route) { VCAP::CloudController::Route.make(space: space, domain: shared_domain) } + let(:shared_domain) { create(:shared_domain) } + let(:route) { create(:route, space: space, domain: shared_domain) } let(:api_call) { ->(user_headers) { patch "/v3/routes/#{route.guid}/relationships/space", request_body.to_json, user_headers } } - let(:target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:target_space) { create(:space, organization: org) } let(:request_body) do { data: { 'guid' => target_space.guid } @@ -3299,7 +3299,7 @@ headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'route_sharing', enabled: true, error_message: nil) end before do @@ -3334,7 +3334,7 @@ end context 'when target organization is suspended' do - let(:suspended_space) { VCAP::CloudController::Space.make } + let(:suspended_space) { create(:space) } let(:request_body) do { data: { 'guid' => suspended_space.guid } @@ -3387,10 +3387,10 @@ end describe 'when using a private domain' do - let(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } - let(:route) { VCAP::CloudController::Route.make(space: space, domain: private_domain) } - let(:second_org) { VCAP::CloudController::Organization.make } - let(:another_space) { VCAP::CloudController::Space.make(organization: second_org) } + let(:private_domain) { create(:private_domain, owning_organization: org) } + let(:route) { create(:route, space: space, domain: private_domain) } + let(:second_org) { create(:organization) } + let(:another_space) { create(:space, organization: second_org) } let(:request_body) do { data: { 'guid' => another_space.guid } @@ -3446,7 +3446,7 @@ end context 'user does not have read access to the target space' do - let(:no_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_access_target_space) { create(:space, organization: org) } let(:request_body) do { data: { 'guid' => no_access_target_space.guid } @@ -3470,7 +3470,7 @@ end context 'user does not have write access to the target space' do - let(:no_write_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_write_access_target_space) { create(:space, organization: org) } let(:request_body) do { data: { 'guid' => no_write_access_target_space.guid } @@ -3583,12 +3583,12 @@ end describe 'GET /v3/apps/:app_guid/routes' do - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:route2) { VCAP::CloudController::Route.make(space:) } - let!(:route3) { VCAP::CloudController::Route.make(space:) } - let!(:route_mapping1) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route1, process_type: 'web') } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route2, process_type: 'admin') } + let(:app_model) { create(:app_model, space:) } + let(:route1) { create(:route, space:) } + let(:route2) { create(:route, space:) } + let!(:route3) { create(:route, space:) } + let!(:route_mapping1) { create(:route_mapping_model, app: app_model, route: route1, process_type: 'web') } + let!(:route_mapping2) { create(:route_mapping_model, app: app_model, route: route2, process_type: 'admin') } let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/routes", nil, user_headers } } let(:route1_json) do @@ -3711,18 +3711,18 @@ context 'when there are multiple TCP routes with different ports' do # The following `let`s depend on the above `before do` - let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } + let(:domain_tcp) { create(:shared_domain, router_group_guid: router_group.guid, name: 'my.domain') } let!(:route_with_ports_0) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-0', port: 7777) end let!(:route_with_ports_1) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-1', port: 8888) end let!(:route_with_ports_2) do - VCAP::CloudController::Route.make(host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) + create(:route, host: '', space: space, domain: domain_tcp, guid: 'route-with-port-2', port: 9999) end - let!(:route_mapping_1) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_with_ports_1, process_type: 'web') } - let!(:route_mapping_2) { VCAP::CloudController::RouteMappingModel.make(app: app_model, route: route_with_ports_2, process_type: 'web') } + let!(:route_mapping_1) { create(:route_mapping_model, app: app_model, route: route_with_ports_1, process_type: 'web') } + let!(:route_mapping_2) { create(:route_mapping_model, app: app_model, route: route_with_ports_2, process_type: 'web') } it 'returns routes filtered by ports' do get "/v3/apps/#{app_model.guid}/routes?ports=7777,8888", nil, admin_header diff --git a/spec/request/security_groups_spec.rb b/spec/request/security_groups_spec.rb index 3f7f6361519..0b6d77ba568 100644 --- a/spec/request/security_groups_spec.rb +++ b/spec/request/security_groups_spec.rb @@ -2,9 +2,9 @@ require 'request_spec_shared_examples' RSpec.describe 'Security_Groups Request' do - let(:space) { VCAP::CloudController::Space.make(guid: 'space-guid') } + let(:space) { create(:space, guid: 'space-guid') } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make(guid: 'user-guid') } + let(:user) { create(:user, guid: 'user-guid') } let(:admin_header) { admin_headers_for(user) } let(:default_rules) do [ @@ -200,7 +200,7 @@ end describe 'POST /v3/security_groups/:security_group_guid/relationships/running_spaces' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:api_call) { ->(user_headers) { post "/v3/security_groups/#{security_group.guid}/relationships/running_spaces", params.to_json, user_headers } } context 'bind running security group to a space' do @@ -246,7 +246,7 @@ security_group.add_staging_space(space) end - let(:another_space) { VCAP::CloudController::Space.make(guid: 'another-space-guid') } + let(:another_space) { create(:space, guid: 'another-space-guid') } let(:params) do { data: [ @@ -365,7 +365,7 @@ end describe 'POST /v3/security_groups/:security_group_guid/relationships/staging_spaces' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:api_call) { ->(user_headers) { post "/v3/security_groups/#{security_group.guid}/relationships/staging_spaces", params.to_json, user_headers } } context 'bind staging security group to a space' do @@ -411,7 +411,7 @@ security_group.add_staging_space(another_space) end - let(:another_space) { VCAP::CloudController::Space.make(guid: 'another-space-guid') } + let(:another_space) { create(:space, guid: 'another-space-guid') } let(:params) do { data: [ @@ -531,9 +531,9 @@ describe 'GET /v3/security_groups' do let(:api_call) { ->(user_headers) { get '/v3/security_groups', nil, user_headers } } - let(:security_group_1) { VCAP::CloudController::SecurityGroup.make(guid: 'security_group_1_guid') } - let(:security_group_2) { VCAP::CloudController::SecurityGroup.make(guid: 'security_group_2_guid') } - let(:security_group_3) { VCAP::CloudController::SecurityGroup.make(running_default: true, guid: 'security_group_3_guid') } + let(:security_group_1) { create(:security_group, guid: 'security_group_1_guid') } + let(:security_group_2) { create(:security_group, guid: 'security_group_2_guid') } + let(:security_group_3) { create(:security_group, running_default: true, guid: 'security_group_3_guid') } before do security_group_2.add_staging_space(space) @@ -804,7 +804,7 @@ let(:api_call) { ->(user_headers) { get "/v3/security_groups/#{security_group.guid}", nil, user_headers } } context 'getting a security group NOT globally enabled NOR associated with any spaces' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:expected_response) do { @@ -852,7 +852,7 @@ end context 'getting a security group NOT globally enabled, associated with spaces' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } before do security_group.add_staging_space(space) @@ -924,7 +924,7 @@ end context 'getting a security group globally enabled' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make(running_default: true) } + let(:security_group) { create(:security_group, running_default: true) } let(:expected_response) do { @@ -973,10 +973,10 @@ describe 'PATCH /v3/security_groups/:guid' do let(:api_call) { ->(user_headers) { patch "/v3/security_groups/#{security_group.guid}", params.to_json, user_headers } } let!(:security_group) do - VCAP::CloudController::SecurityGroup.make({ - name: 'original-name', - rules: [] - }) + create(:security_group, { + name: 'original-name', + rules: [] + }) end let(:params) do @@ -997,7 +997,7 @@ end context 'when the security group only globally enabled' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make(running_default: true) } + let(:security_group) { create(:security_group, running_default: true) } let(:expected_response) do { @@ -1181,7 +1181,7 @@ end context 'when updating to a name that is already taken' do - let!(:another_security_group) { VCAP::CloudController::SecurityGroup.make(name: 'already-taken') } + let!(:another_security_group) { create(:security_group, name: 'already-taken') } let(:params) { { name: 'already-taken' } } it 'returns a 422 with a helpful message' do @@ -1232,7 +1232,7 @@ end describe 'DELETE /v3/security_groups/:security_group_guid/relationships/running_spaces/:space_guid' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:api_call) { ->(user_headers) { delete "/v3/security_groups/#{security_group.guid}/relationships/running_spaces/#{space.guid}", nil, user_headers } } context 'unbinding a running security group from a space' do @@ -1331,7 +1331,7 @@ end describe 'DELETE /v3/security_groups/:security_group_guid/relationships/staging_spaces/:space_guid' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:api_call) { ->(user_headers) { delete "/v3/security_groups/#{security_group.guid}/relationships/staging_spaces/#{space.guid}", nil, user_headers } } context 'unbinding a staging security group from a space' do @@ -1450,7 +1450,7 @@ end context 'when the security group is only globally enabled' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make(running_default: true) } + let(:security_group) { create(:security_group, running_default: true) } let(:expected_codes_and_responses) do h = Hash.new({ code: 403 }.freeze) @@ -1462,7 +1462,7 @@ end context 'when the security group is applied to a space but not globally enabled' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:expected_codes_and_responses) do h = Hash.new({ code: 403 }.freeze) @@ -1481,7 +1481,7 @@ end context 'when the security group is neither globally enabled nor associated with any spaces' do - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:security_group) { create(:security_group) } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) diff --git a/spec/request/service_brokers_spec.rb b/spec/request/service_brokers_spec.rb index 69e403581ce..17fd58f0783 100644 --- a/spec/request/service_brokers_spec.rb +++ b/spec/request/service_brokers_spec.rb @@ -5,14 +5,14 @@ require 'messages/service_broker_update_message' RSpec.describe 'V3 service brokers' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:global_broker_id) { 'global-service-id' } let(:space_broker_id) { 'space-service-id' } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:space_developer_alternate_space_headers) do - user = VCAP::CloudController::User.make - space = VCAP::CloudController::Space.make(organization: org) + user = create(:user) + space = create(:space, organization: org) org.add_user(user) space.add_developer(user) @@ -99,7 +99,7 @@ end it_behaves_like 'paginated response', '/v3/service_brokers' do - let!(:resources) { Array.new(2) { VCAP::CloudController::ServiceBroker.make } } + let!(:resources) { create_list(:service_broker, 2) } end it_behaves_like 'list query endpoint' do @@ -216,7 +216,7 @@ end describe 'spaced-scoped service brokers' do - let!(:space_scoped_service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } + let!(:space_scoped_service_broker) { create(:service_broker, space:) } let(:space_scoped_service_broker_json) do { guid: space_scoped_service_broker.guid, @@ -274,8 +274,8 @@ end describe 'filters' do - let!(:global_service_broker) { VCAP::CloudController::ServiceBroker.make(name: 'test-broker-foo') } - let!(:space_scoped_service_broker) { VCAP::CloudController::ServiceBroker.make(name: 'test-broker-bar', space: space) } + let!(:global_service_broker) { create(:service_broker, name: 'test-broker-foo') } + let!(:space_scoped_service_broker) { create(:service_broker, name: 'test-broker-bar', space: space) } context 'when requesting with a space guid filter' do it 'returns 200 OK and a body containing one broker matching the space guid filter' do @@ -297,8 +297,8 @@ context 'when filtering on labels' do it 'filters by label selectors' do - VCAP::CloudController::ServiceBrokerLabelModel.make(resource_guid: global_service_broker.guid, key_name: 'boomerang', value: 'gel') - VCAP::CloudController::ServiceBrokerLabelModel.make(resource_guid: space_scoped_service_broker.guid, key_name: 'boomerang', value: 'soi') + create(:service_broker_label_model, resource_guid: global_service_broker.guid, key_name: 'boomerang', value: 'gel') + create(:service_broker_label_model, resource_guid: space_scoped_service_broker.guid, key_name: 'boomerang', value: 'soi') expect_filtered_brokers('label_selector=boomerang=gel', [global_service_broker]) end @@ -357,7 +357,7 @@ def expect_empty_list(user_headers) end context 'when the service broker is global' do - let!(:global_service_broker_v3) { VCAP::CloudController::ServiceBroker.make } + let!(:global_service_broker_v3) { create(:service_broker) } let(:api_call) { ->(user_headers) { get "/v3/service_brokers/#{global_service_broker_v3.guid}", nil, user_headers } } let(:global_service_broker_v3_json) do @@ -403,7 +403,7 @@ def expect_empty_list(user_headers) end context 'when the service broker is space scoped' do - let!(:space_scoped_service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } + let!(:space_scoped_service_broker) { create(:service_broker, space:) } let(:api_call) { ->(user_headers) { get "/v3/service_brokers/#{space_scoped_service_broker.guid}", nil, user_headers } } let(:space_scoped_service_broker_json) do @@ -466,14 +466,13 @@ def expect_empty_list(user_headers) describe 'PATCH /v3/service_brokers/:guid' do let!(:broker) do - VCAP::CloudController::ServiceBroker.make( - name: 'broker name', - broker_url: 'http://example.org/broker-url', - auth_username: 'admin', - auth_password: 'welcome' - ) do |broker| - VCAP::CloudController::ServiceBrokerLabelModel.make(resource_guid: broker.guid, key_name: 'potato', value: 'yam') - VCAP::CloudController::ServiceBrokerAnnotationModel.make(resource_guid: broker.guid, key_name: 'style', value: 'mashed') + create(:service_broker, + name: 'broker name', + broker_url: 'http://example.org/broker-url', + auth_username: 'admin', + auth_password: 'welcome') do |broker| + create(:service_broker_label_model, resource_guid: broker.guid, key_name: 'potato', value: 'yam') + create(:service_broker_annotation_model, resource_guid: broker.guid, key_name: 'style', value: 'mashed') end end @@ -513,13 +512,12 @@ def expect_empty_list(user_headers) context 'space-scoped service broker' do let!(:broker) do - VCAP::CloudController::ServiceBroker.make( - name: 'old-name', - broker_url: 'http://example.org/old-broker-url', - auth_username: 'old-admin', - auth_password: 'not-welcome', - space: space - ) + create(:service_broker, + name: 'old-name', + broker_url: 'http://example.org/old-broker-url', + auth_username: 'old-admin', + auth_password: 'not-welcome', + space: space) end let(:api_call) { ->(user_headers) { patch "/v3/service_brokers/#{broker.guid}", update_request_body.to_json, user_headers } } @@ -659,7 +657,7 @@ def expect_empty_list(user_headers) context 'when a broker with the same name exists' do before do - VCAP::CloudController::ServiceBroker.make(name: 'another broker') + create(:service_broker, name: 'another broker') end it 'returns 422 and meaningful error and does not create a broker' do @@ -670,8 +668,8 @@ def expect_empty_list(user_headers) end context 'when there is a sql validation error while syncing' do - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker: broker, unique_id: global_broker_id + '-1') } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, name: 'plan_name-1', unique_id: Sham.guid) } + let!(:service_offering) { create(:service, service_broker: broker, unique_id: global_broker_id + '-1') } + let!(:service_plan) { create(:service_plan, service: service_offering, name: 'plan_name-1', unique_id: Sham.guid) } before do stub_request(:get, 'http://example.org/new-broker-url/v2/catalog'). @@ -742,9 +740,8 @@ def expect_empty_list(user_headers) stub_uaa_for(global_broker_id) - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: VCAP::CloudController::ServicePlan.find(name: 'plan_name-1') - ) + create(:managed_service_instance, + service_plan: VCAP::CloudController::ServicePlan.find(name: 'plan_name-1')) end it 'updates the job status and populates warnings field' do @@ -901,7 +898,7 @@ def expect_empty_list(user_headers) end context 'when updating credentials and the encryption_key_label is invalid' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:api_call) do lambda { |headers| patch "/v3/service_brokers/#{broker.guid}", { authentication: { @@ -1261,9 +1258,8 @@ def expect_empty_list(user_headers) context 'when synchronizing UAA clients fails' do before do - VCAP::CloudController::ServiceDashboardClient.make( - uaa_id: dashboard_client['id'] - ) + create(:service_dashboard_client, + uaa_id: dashboard_client['id']) create_broker_successfully(global_broker_request_body, with: admin_headers) @@ -1318,7 +1314,7 @@ def expect_empty_list(user_headers) context 'when a broker with the same name exists' do before do - VCAP::CloudController::ServiceBroker.make(name: global_broker_request_body[:name]) + create(:service_broker, name: global_broker_request_body[:name]) create_broker(global_broker_with_identical_name_body, with: admin_headers) end @@ -1367,7 +1363,7 @@ def expect_empty_list(user_headers) relationships: { space: { data: { - guid: VCAP::CloudController::Space.make.guid + guid: create(:space).guid } } } @@ -1375,7 +1371,7 @@ def expect_empty_list(user_headers) end let(:space_developer_headers) do - user = VCAP::CloudController::User.make + user = create(:user) org.add_user(user) space.add_developer(user) headers_for(user) @@ -1504,7 +1500,7 @@ def assert_broker_state(broker_json) end context 'space-scoped broker' do - let(:broker) { VCAP::CloudController::ServiceBroker.make(space_id: space.id) } + let(:broker) { create(:service_broker, space_id: space.id) } it_behaves_like 'permissions for delete endpoint', ALL_PERMISSIONS do let(:expected_codes_and_responses) { responses_for_space_restricted_async_delete_endpoint } diff --git a/spec/request/service_credential_bindings_spec.rb b/spec/request/service_credential_bindings_spec.rb index 68835e7765c..64e11163261 100644 --- a/spec/request/service_credential_bindings_spec.rb +++ b/spec/request/service_credential_bindings_spec.rb @@ -3,12 +3,12 @@ require 'request/service_bindings_shared_examples' RSpec.describe 'v3 service credential bindings' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let!(:org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } - let(:other_space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let!(:org_annotation) { create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } + let(:space) { create(:space, organization: org) } + let!(:space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } + let(:other_space) { create(:space) } let(:space_dev_headers) do org.add_user(user) space.add_developer(user) @@ -70,36 +70,35 @@ context 'given a mixture of bindings' do let(:now) { Time.now.utc } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, created_at: now - 1.second) } - let(:other_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: other_space) } - let!(:key_binding) { VCAP::CloudController::ServiceKey.make(service_instance: instance, created_at: now - 4.seconds) } - let!(:other_key_binding) { VCAP::CloudController::ServiceKey.make(service_instance: other_instance, created_at: now - 3.seconds) } + let(:instance) { create(:managed_service_instance, space: space, created_at: now - 1.second) } + let(:other_instance) { create(:managed_service_instance, space: other_space) } + let!(:key_binding) { create(:service_key, service_instance: instance, created_at: now - 4.seconds) } + let!(:other_key_binding) { create(:service_key, service_instance: other_instance, created_at: now - 3.seconds) } let!(:app_binding) do - VCAP::CloudController::ServiceBinding.make( - app: VCAP::CloudController::AppModel.make(space: space, created_at: now - 1.second), - service_instance: instance, - created_at: now - 2.seconds - ).tap do |binding| + create(:service_binding, + app: create(:app_model, space: space, created_at: now - 1.second), + service_instance: instance, + created_at: now - 2.seconds).tap do |binding| operate_on(binding) end end - let!(:other_app_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: other_instance, name: Sham.name, created_at: now - 1.second) } + let!(:other_app_binding) { create(:service_binding, service_instance: other_instance, name: Sham.name, created_at: now - 1.second) } describe 'permissions' do let(:labels) { { foo: 'bar' } } let(:annotations) { { baz: 'wow' } } let!(:key_binding) do - VCAP::CloudController::ServiceKey.make(service_instance: instance, created_at: now - 4.seconds) do |binding| + create(:service_key, service_instance: instance, created_at: now - 4.seconds) do |binding| operate_on(binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'foo', value: 'bar', service_key: binding) - VCAP::CloudController::ServiceKeyAnnotationModel.make(key_name: 'baz', value: 'wow', service_key: binding) + create(:service_key_label_model, key_name: 'foo', value: 'bar', service_key: binding) + create(:service_key_annotation_model, key_name: 'baz', value: 'wow', service_key: binding) end end let!(:other_app_binding) do - VCAP::CloudController::ServiceBinding.make(service_instance: other_instance, name: Sham.name, created_at: now - 1.second) do |binding| + create(:service_binding, service_instance: other_instance, name: Sham.name, created_at: now - 1.second) do |binding| operate_on(binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'foo', value: 'bar', service_binding: binding) - VCAP::CloudController::ServiceBindingAnnotationModel.make(key_name: 'baz', value: 'wow', service_binding: binding) + create(:service_binding_label_model, key_name: 'foo', value: 'bar', service_binding: binding) + create(:service_binding_annotation_model, key_name: 'baz', value: 'wow', service_binding: binding) end end @@ -169,9 +168,9 @@ let(:headers) { admin_headers } end - let(:some_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let!(:another_key) { VCAP::CloudController::ServiceKey.make(service_instance: some_instance) } - let!(:another_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: some_instance) } + let(:some_instance) { create(:managed_service_instance, space:) } + let!(:another_key) { create(:service_key, service_instance: some_instance) } + let!(:another_binding) { create(:service_binding, service_instance: some_instance) } before do get '/v3/service_credential_bindings', nil, admin_headers @@ -379,20 +378,20 @@ let!(:app_labels) { { env: 'prod', animal: 'horse' } } before do - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'fruit', value: 'strawberry', service_key: key_binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'env', value: 'prod', service_key: key_binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'animal', value: 'horse', service_key: key_binding) + create(:service_key_label_model, key_name: 'fruit', value: 'strawberry', service_key: key_binding) + create(:service_key_label_model, key_name: 'env', value: 'prod', service_key: key_binding) + create(:service_key_label_model, key_name: 'animal', value: 'horse', service_key: key_binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'env', value: 'prod', service_key: other_key_binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'animal', value: 'dog', service_key: other_key_binding) + create(:service_key_label_model, key_name: 'env', value: 'prod', service_key: other_key_binding) + create(:service_key_label_model, key_name: 'animal', value: 'dog', service_key: other_key_binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'env', value: 'prod', service_binding: app_binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'animal', value: 'horse', service_binding: app_binding) + create(:service_binding_label_model, key_name: 'env', value: 'prod', service_binding: app_binding) + create(:service_binding_label_model, key_name: 'animal', value: 'horse', service_binding: app_binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'env', value: 'prod', service_binding: other_app_binding) + create(:service_binding_label_model, key_name: 'env', value: 'prod', service_binding: other_app_binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'env', value: 'staging', service_binding: another_binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'animal', value: 'dog', service_binding: another_binding) + create(:service_binding_label_model, key_name: 'env', value: 'staging', service_binding: another_binding) + create(:service_binding_label_model, key_name: 'animal', value: 'dog', service_binding: another_binding) end it 'returns the filtered list' do @@ -489,7 +488,7 @@ def check_filtered_bindings(*bindings) describe 'GET /v3/service_credential_bindings/:guid' do describe 'query params' do - let(:binding) { VCAP::CloudController::ServiceBinding.make } + let(:binding) { create(:service_binding) } it 'returns 400 for invalid query params' do get "/v3/service_credential_bindings/#{binding.guid}?bahamas=yes-please", nil, admin_headers @@ -530,13 +529,13 @@ def check_filtered_bindings(*bindings) let(:labels) { { foo: 'bar' } } let(:annotations) { { baz: 'wow' } } let(:key) do - VCAP::CloudController::ServiceKey.make(service_instance: instance) do |binding| + create(:service_key, service_instance: instance) do |binding| operate_on(binding) - VCAP::CloudController::ServiceKeyLabelModel.make(key_name: 'foo', value: 'bar', service_key: binding) - VCAP::CloudController::ServiceKeyAnnotationModel.make(key_name: 'baz', value: 'wow', service_key: binding) + create(:service_key_label_model, key_name: 'foo', value: 'bar', service_key: binding) + create(:service_key_annotation_model, key_name: 'baz', value: 'wow', service_key: binding) end end - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:api_call) { ->(user_headers) { get "/v3/service_credential_bindings/#{key.guid}", nil, user_headers } } let(:expected_object) { expected_json(key, labels:, annotations:) } @@ -569,18 +568,18 @@ def check_filtered_bindings(*bindings) end describe 'app credential binding' do - let(:app_to_bind_to) { VCAP::CloudController::AppModel.make(space:) } + let(:app_to_bind_to) { create(:app_model, space:) } let(:labels) { { foo: 'bar' } } let(:annotations) { { baz: 'wow' } } let(:app_binding) do - VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: app_to_bind_to).tap do |binding| + create(:service_binding, service_instance: instance, app: app_to_bind_to).tap do |binding| operate_on(binding) - VCAP::CloudController::ServiceBindingLabelModel.make(key_name: 'foo', value: 'bar', service_binding: binding) - VCAP::CloudController::ServiceBindingAnnotationModel.make(key_name: 'baz', value: 'wow', service_binding: binding) + create(:service_binding_label_model, key_name: 'foo', value: 'bar', service_binding: binding) + create(:service_binding_annotation_model, key_name: 'baz', value: 'wow', service_binding: binding) end end - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:api_call) { ->(user_headers) { get "/v3/service_credential_bindings/#{app_binding.guid}", nil, user_headers } } let(:expected_object) { expected_json(app_binding, labels:, annotations:) } @@ -623,9 +622,9 @@ def check_filtered_bindings(*bindings) credentials: { 'cred_key' => 'creds-val-64', 'magic' => true } } end - let(:app_binding) { VCAP::CloudController::ServiceBinding.make(**details) } + let(:app_binding) { create(:service_binding, **details) } let(:guid) { app_binding.guid } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:api_call) { ->(user_headers) { get "/v3/service_credential_bindings/#{guid}/details", nil, user_headers } } let(:binding_credentials) do { @@ -757,21 +756,21 @@ def check_filtered_bindings(*bindings) end describe 'when the service instance is shared' do - let(:originating_space) { VCAP::CloudController::Space.make } + let(:originating_space) { create(:space) } let(:shared_space) { space } let(:user_in_shared_space) do - u = VCAP::CloudController::User.make + u = create(:user) shared_space.organization.add_user(u) shared_space.add_developer(u) u end let(:user_in_originating_space) do - u = VCAP::CloudController::User.make + u = create(:user) originating_space.organization.add_user(u) originating_space.add_developer(u) u end - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space: originating_space) } + let(:instance) { create(:managed_service_instance, space: originating_space) } let(:details) do { service_instance: instance, @@ -785,7 +784,7 @@ def check_filtered_bindings(*bindings) end context 'bindings in the originating space' do - let(:source_app) { VCAP::CloudController::AppModel.make(space: originating_space) } + let(:source_app) { create(:app_model, space: originating_space) } it 'returns the credentials for users in the originating space' do api_call.call(headers_for(user_in_originating_space)) @@ -799,7 +798,7 @@ def check_filtered_bindings(*bindings) end context 'bindings in the shared space' do - let(:source_app) { VCAP::CloudController::AppModel.make(space: shared_space) } + let(:source_app) { create(:app_model, space: shared_space) } it 'returns 404 for users in the originating space' do api_call.call(headers_for(user_in_originating_space)) @@ -815,7 +814,7 @@ def check_filtered_bindings(*bindings) end describe 'credhub interaction' do - let(:key_binding) { VCAP::CloudController::ServiceKey.make(:credhub_reference, service_instance: instance) } + let(:key_binding) { create(:service_key, :credhub_reference, service_instance: instance) } let(:credhub_url) { VCAP::CloudController::Config.config.get(:credhub_api, :internal_url) } let(:uaa_url) { VCAP::CloudController::Config.config.get(:uaa, :internal_url) } let(:credentials) { { 'username' => 'cinnamon', 'password' => 'roll' } } @@ -847,7 +846,7 @@ def check_filtered_bindings(*bindings) end context 'for key bindings without a credhub reference' do - let(:key_binding) { VCAP::CloudController::ServiceKey.make(service_instance: instance) } + let(:key_binding) { create(:service_key, service_instance: instance) } let(:guid) { key_binding.guid } it 'returns the credentials as found in the database' do @@ -922,10 +921,10 @@ def check_filtered_bindings(*bindings) describe 'GET /v3/service_credential_bindings/:binding_guid/parameters' do let(:binding_params) { { foo: 'bar', baz: 'xyzzy' }.with_indifferent_access } - let(:app_to_bind_to) { VCAP::CloudController::AppModel.make(space:) } - let(:binding) { VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: app_to_bind_to) } + let(:app_to_bind_to) { create(:app_model, space:) } + let(:binding) { create(:service_binding, service_instance: instance, app: app_to_bind_to) } let(:guid) { binding.guid } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:api_call) { ->(user_headers) { get "/v3/service_credential_bindings/#{guid}/parameters", nil, user_headers } } context 'permissions' do @@ -941,29 +940,29 @@ def check_filtered_bindings(*bindings) end describe 'when the service instance is shared' do - let(:originating_space) { VCAP::CloudController::Space.make } + let(:originating_space) { create(:space) } let(:shared_space) { space } let(:user_in_shared_space) do - u = VCAP::CloudController::User.make + u = create(:user) shared_space.organization.add_user(u) shared_space.add_developer(u) u end let(:user_in_originating_space) do - u = VCAP::CloudController::User.make + u = create(:user) originating_space.organization.add_user(u) originating_space.add_developer(u) u end let(:instance) do - VCAP::CloudController::ManagedServiceInstance.make(space: originating_space).tap do |instance| + create(:managed_service_instance, space: originating_space).tap do |instance| instance.add_shared_space(shared_space) end end - let(:binding) { VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: source_app) } + let(:binding) { create(:service_binding, service_instance: instance, app: source_app) } context 'bindings in the originating space' do - let(:source_app) { VCAP::CloudController::AppModel.make(space: originating_space) } + let(:source_app) { create(:app_model, space: originating_space) } it 'returns the parameters for users in the originating space' do api_call.call(headers_for(user_in_originating_space)) @@ -977,7 +976,7 @@ def check_filtered_bindings(*bindings) end context 'bindings in the shared space' do - let(:source_app) { VCAP::CloudController::AppModel.make(space: shared_space) } + let(:source_app) { create(:app_model, space: shared_space) } it 'returns 404 for users in the originating space' do api_call.call(headers_for(user_in_originating_space)) @@ -1129,7 +1128,7 @@ def check_filtered_bindings(*bindings) end describe 'key bindings' do - let(:binding) { VCAP::CloudController::ServiceKey.make(service_instance: instance) } + let(:binding) { create(:service_key, service_instance: instance) } context 'when the service does not allow bindings to be fetched' do before do @@ -1279,8 +1278,8 @@ def check_filtered_bindings(*bindings) let(:service_instance_guid) { service_instance.guid } context 'creating a credential binding to an app' do - let(:app_to_bind_to) { VCAP::CloudController::AppModel.make(space:) } - let!(:app_annotations) { VCAP::CloudController::AppAnnotationModel.make(app: app_to_bind_to, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar') } + let(:app_to_bind_to) { create(:app_model, space:) } + let!(:app_annotations) { create(:app_annotation_model, app: app_to_bind_to, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar') } let(:app_guid) { app_to_bind_to.guid } let(:binding_name) { 'some-name' } let(:create_body) do @@ -1370,7 +1369,7 @@ def check_filtered_bindings(*bindings) context 'when the user has no access to the related resources' do let(:space_user) do - u = VCAP::CloudController::User.make + u = create(:user) other_space.organization.add_user(u) other_space.add_developer(u) u @@ -1391,7 +1390,7 @@ def check_filtered_bindings(*bindings) end context 'app' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space: other_space) } + let(:service_instance) { create(:user_provided_service_instance, space: other_space) } it 'returns a 422' do api_call.call space_dev_headers @@ -1420,7 +1419,7 @@ def check_filtered_bindings(*bindings) end context 'when the service instance and the app are not in the same space' do - let(:app_to_bind_to) { VCAP::CloudController::AppModel.make(space: other_space) } + let(:app_to_bind_to) { create(:app_model, space: other_space) } it 'returns a 422 error' do api_call.call admin_headers @@ -1435,7 +1434,7 @@ def check_filtered_bindings(*bindings) end context 'user-provided service' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, **service_instance_details) } + let(:service_instance) { create(:user_provided_service_instance, space:, **service_instance_details) } context 'permissions' do it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do @@ -1571,9 +1570,9 @@ def check_filtered_bindings(*bindings) end context 'managed service' do - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: true) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:offering) { create(:service, bindings_retrievable: true) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } let(:binding) { VCAP::CloudController::ServiceBinding.last } let(:audit) { VCAP::CloudController::Event.last } let(:job) { VCAP::CloudController::PollableJobModel.last } @@ -1594,9 +1593,9 @@ def check_filtered_bindings(*bindings) end context 'users in the space where the SI has been shared to' do - let(:original_org) { VCAP::CloudController::Organization.make } - let(:original_space) { VCAP::CloudController::Space.make(organization: original_org) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: original_space, service_plan: plan) } + let(:original_org) { create(:organization) } + let(:original_space) { create(:space, organization: original_org) } + let(:service_instance) { create(:managed_service_instance, space: original_space, service_plan: plan) } before do service_instance.add_shared_space(space) @@ -1717,9 +1716,9 @@ def check_filtered_bindings(*bindings) end context 'creating a credential binding as a key' do - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: true) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:offering) { create(:service, bindings_retrievable: true) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } let(:binding_name) { Sham.name } let(:create_body) do { @@ -1745,11 +1744,11 @@ def check_filtered_bindings(*bindings) end context 'users in the space where the SI has been shared to' do - let(:original_org) { VCAP::CloudController::Organization.make } - let(:original_space) { VCAP::CloudController::Space.make(organization: original_org) } - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: true) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: original_space, service_plan: plan) } + let(:original_org) { create(:organization) } + let(:original_space) { create(:space, organization: original_org) } + let(:offering) { create(:service, bindings_retrievable: true) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: original_space, service_plan: plan) } before do service_instance.add_shared_space(space) @@ -1802,7 +1801,7 @@ def check_filtered_bindings(*bindings) context 'when the user has no access to the service instance' do let(:space_user) do - u = VCAP::CloudController::User.make + u = create(:user) other_space.organization.add_user(u) other_space.add_developer(u) u @@ -1822,7 +1821,7 @@ def check_filtered_bindings(*bindings) context 'when a key with the same name exists for that SI' do let(:cred_binding) do - VCAP::CloudController::ServiceKey.make(service_instance:) + create(:service_key, service_instance:) end let(:create_body) do { @@ -1844,7 +1843,7 @@ def check_filtered_bindings(*bindings) end context 'when the service instance is user-provided' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, **service_instance_details) } + let(:service_instance) { create(:user_provided_service_instance, space:, **service_instance_details) } it 'returns a 422' do api_call.call admin_headers @@ -1856,8 +1855,8 @@ def check_filtered_bindings(*bindings) end context 'when the service instance is not bindable' do - let(:plan) { VCAP::CloudController::ServicePlan.make(bindable: false) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:plan) { create(:service_plan, bindable: false) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } it 'returns a 422' do api_call.call admin_headers @@ -1875,10 +1874,10 @@ def check_filtered_bindings(*bindings) describe 'space quotas' do context 'when the total service key quota has been reached' do before do - quota = VCAP::CloudController::SpaceQuotaDefinition.make(total_service_keys: 1, organization: org) + quota = create(:space_quota_definition, total_service_keys: 1, organization: org) quota.add_space(space) - VCAP::CloudController::ServiceKey.make(service_instance:) + create(:service_key, service_instance:) end it 'returns an error' do @@ -1898,9 +1897,9 @@ def check_filtered_bindings(*bindings) describe 'organization quotas' do context 'when the total service key quota has been reached' do before do - quota = VCAP::CloudController::QuotaDefinition.make(total_service_keys: 1) + quota = create(:quota_definition, total_service_keys: 1) quota.add_organization(org) - VCAP::CloudController::ServiceKey.make(service_instance:) + create(:service_key, service_instance:) end it 'returns an error' do @@ -1976,7 +1975,7 @@ def check_filtered_bindings(*bindings) describe 'PATCH /v3/service_credential_bindings/:guid' do let(:api_call) { ->(user_headers) { patch "/v3/service_credential_bindings/#{guid}", update_request_body.to_json, user_headers } } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:guid) { binding.guid } let(:labels) { { potato: 'sweet' } } let(:annotations) { { style: 'mashed', amount: 'all' } } @@ -1992,7 +1991,7 @@ def check_filtered_bindings(*bindings) context 'key credential binding' do let(:binding) do - VCAP::CloudController::ServiceKey.make(service_instance: instance) { |binding| operate_on(binding) } + create(:service_key, service_instance: instance) { |binding| operate_on(binding) } end let(:binding_name) { binding.name } @@ -2008,9 +2007,9 @@ def check_filtered_bindings(*bindings) end context 'app credential binding' do - let(:app_to_bind_to) { VCAP::CloudController::AppModel.make(space:) } + let(:app_to_bind_to) { create(:app_model, space:) } let(:binding) do - VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: app_to_bind_to) { |binding| operate_on(binding) } + create(:service_binding, service_instance: instance, app: app_to_bind_to) { |binding| operate_on(binding) } end let(:binding_name) { '' } @@ -2025,8 +2024,8 @@ def check_filtered_bindings(*bindings) end context 'when the service instance has been shared to the organization' do - let(:original_space) { VCAP::CloudController::Space.make } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space: original_space) } + let(:original_space) { create(:space) } + let(:instance) { create(:managed_service_instance, space: original_space) } before do instance.add_shared_space(space) @@ -2394,17 +2393,17 @@ def check_filtered_bindings(*bindings) credentials: { password: 'foo' } } end - let(:bound_app) { VCAP::CloudController::AppModel.make(space:) } + let(:bound_app) { create(:app_model, space:) } let(:binding_details) do { service_instance: service_instance, app: bound_app } end - let(:binding) { VCAP::CloudController::ServiceBinding.make(**binding_details) } + let(:binding) { create(:service_binding, **binding_details) } context 'user provided services' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(**service_instance_details) } + let(:service_instance) { create(:user_provided_service_instance, **service_instance_details) } context 'permissions' do let(:db_check) do @@ -2452,7 +2451,7 @@ def check_filtered_bindings(*bindings) end context 'managed service instances' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:broker_base_url) { service_instance.service_broker.broker_url } let(:broker_unbind_url) { "#{broker_base_url}/v2/service_instances/#{service_instance.guid}/service_bindings/#{binding.guid}" } @@ -2489,9 +2488,9 @@ def check_filtered_bindings(*bindings) end context 'users in the space where the SI has been shared to' do - let(:original_org) { VCAP::CloudController::Organization.make } - let(:original_space) { VCAP::CloudController::Space.make(organization: original_org) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: original_space) } + let(:original_org) { create(:organization) } + let(:original_space) { create(:space, organization: original_org) } + let(:service_instance) { create(:managed_service_instance, space: original_space) } before do service_instance.add_shared_space(space) @@ -2519,7 +2518,7 @@ def check_filtered_bindings(*bindings) context 'key bindings' do let(:bound_app) { nil } - let(:binding) { VCAP::CloudController::ServiceKey.make(service_instance:) } + let(:binding) { create(:service_key, service_instance:) } context 'permissions' do context 'users in the originating service instance space' do @@ -2531,9 +2530,9 @@ def check_filtered_bindings(*bindings) end context 'users in the space where the SI has been shared to' do - let(:original_org) { VCAP::CloudController::Organization.make } - let(:original_space) { VCAP::CloudController::Space.make(organization: original_org) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: original_space) } + let(:original_org) { create(:organization) } + let(:original_space) { create(:space, organization: original_org) } + let(:service_instance) { create(:managed_service_instance, space: original_space) } before do service_instance.add_shared_space(space) diff --git a/spec/request/service_instances_spec.rb b/spec/request/service_instances_spec.rb index b9c69073434..0bbab9e9c12 100644 --- a/spec/request/service_instances_spec.rb +++ b/spec/request/service_instances_spec.rb @@ -2,12 +2,12 @@ require 'request_spec_shared_examples' RSpec.describe 'V3 service instances' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make(created_at: Time.now.utc - 1.second) } - let!(:org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } - let(:space) { VCAP::CloudController::Space.make(organization: org, created_at: Time.now.utc - 1.second) } - let!(:space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } - let(:another_space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:org) { create(:organization, created_at: Time.now.utc - 1.second) } + let!(:org_annotation) { create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } + let(:space) { create(:space, organization: org, created_at: Time.now.utc - 1.second) } + let!(:space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } + let(:another_space) { create(:space) } let(:parameters_mixed_data_types_as_json_string) do '{"boolean":true,"string":"a string","int":123,"float":3.14159,"optional":null,"object":{"a":"b"},"array":["c","d"]}' end @@ -37,7 +37,7 @@ end context 'managed service instance' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:guid) { instance.guid } let(:expected_codes_and_responses) do @@ -48,7 +48,7 @@ end context 'user-provided service instance' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:instance) { create(:user_provided_service_instance, space:) } let(:guid) { instance.guid } let(:expected_codes_and_responses) do @@ -59,8 +59,8 @@ end context 'shared service instance' do - let(:another_space) { VCAP::CloudController::Space.make } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space: another_space) } + let(:another_space) { create(:space) } + let(:instance) { create(:managed_service_instance, space: another_space) } let(:guid) { instance.guid } before do @@ -75,7 +75,7 @@ end context 'fields' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:guid) { instance.guid } it 'can include the organization name and guid fields' do @@ -183,7 +183,7 @@ end describe 'pagination' do - let!(:resources) { Array.new(2) { VCAP::CloudController::ServiceInstance.make } } + let!(:resources) { create_list(:service_instance, 2) } it_behaves_like 'paginated response', '/v3/service_instances' @@ -204,32 +204,26 @@ context 'given a mixture of managed, user-provided and shared service instances' do let!(:msi_1) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: VCAP::CloudController::ServicePlan.make( - service: VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make(created_at: Time.now.utc - 2.seconds), - created_at: Time.now.utc - 2.seconds - ), - created_at: Time.now.utc - 2.seconds - ), - space: space - ) + create(:managed_service_instance, + service_plan: create(:service_plan, + service: create(:service, + service_broker: create(:service_broker, created_at: Time.now.utc - 2.seconds), + created_at: Time.now.utc - 2.seconds), + created_at: Time.now.utc - 2.seconds), + space: space) end let!(:msi_2) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: VCAP::CloudController::ServicePlan.make( - service: VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make(created_at: Time.now.utc - 1.second), - created_at: Time.now.utc - 1.second - ), - created_at: Time.now.utc - 1.second - ), - space: another_space - ) - end - let!(:upsi_1) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } - let!(:upsi_2) { VCAP::CloudController::UserProvidedServiceInstance.make(space: another_space) } - let!(:ssi) { VCAP::CloudController::ManagedServiceInstance.make(space: another_space) } + create(:managed_service_instance, + service_plan: create(:service_plan, + service: create(:service, + service_broker: create(:service_broker, created_at: Time.now.utc - 1.second), + created_at: Time.now.utc - 1.second), + created_at: Time.now.utc - 1.second), + space: another_space) + end + let!(:upsi_1) { create(:user_provided_service_instance, space:) } + let!(:upsi_2) { create(:user_provided_service_instance, space: another_space) } + let!(:ssi) { create(:managed_service_instance, space: another_space) } before do ssi.add_shared_space(space) @@ -306,10 +300,10 @@ end it 'filters by label' do - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'fruit', value: 'strawberry', service_instance: msi_1) - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'fruit', value: 'raspberry', service_instance: msi_2) - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'fruit', value: 'strawberry', service_instance: ssi) - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'fruit', value: 'strawberry', service_instance: upsi_2) + create(:service_instance_label_model, key_name: 'fruit', value: 'strawberry', service_instance: msi_1) + create(:service_instance_label_model, key_name: 'fruit', value: 'raspberry', service_instance: msi_2) + create(:service_instance_label_model, key_name: 'fruit', value: 'strawberry', service_instance: ssi) + create(:service_instance_label_model, key_name: 'fruit', value: 'strawberry', service_instance: upsi_2) get '/v3/service_instances?label_selector=fruit=strawberry', nil, admin_headers @@ -536,7 +530,7 @@ def check_filtered_instances(*instances) it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/service_instances/#{guid}/credentials", nil, user_headers } } let(:credentials) { { 'fake-key' => 'fake-value' } } - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, credentials:) } + let(:instance) { create(:user_provided_service_instance, space:, credentials:) } let(:guid) { instance.guid } let(:expected_codes_and_responses) do @@ -552,7 +546,7 @@ def check_filtered_instances(*instances) end it 'responds with an empty obect when no credentials were set' do - upsi = VCAP::CloudController::UserProvidedServiceInstance.make(space: space, credentials: nil) + upsi = create(:user_provided_service_instance, space: space, credentials: nil) get "/v3/service_instances/#{upsi.guid}/credentials", nil, admin_headers expect(last_response).to have_status_code(200) expect(parsed_response).to match_json_response({}) @@ -564,13 +558,13 @@ def check_filtered_instances(*instances) end it 'responds with 404 for a managed service instance' do - msi = VCAP::CloudController::ManagedServiceInstance.make(space:) + msi = create(:managed_service_instance, space:) get "/v3/service_instances/#{msi.guid}/credentials", nil, admin_headers expect(last_response).to have_status_code(404) end it 'records an audit event' do - upsi = VCAP::CloudController::UserProvidedServiceInstance.make(space: space, credentials: {}) + upsi = create(:user_provided_service_instance, space: space, credentials: {}) get "/v3/service_instances/#{upsi.guid}/credentials", nil, space_dev_headers expect(last_response).to have_status_code(200) @@ -588,9 +582,9 @@ def check_filtered_instances(*instances) end describe 'GET /v3/service_instances/:guid/parameters' do - let(:service) { VCAP::CloudController::Service.make(instances_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service) { create(:service, instances_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:instance) { create(:managed_service_instance, space:, service_plan:) } let(:body) { {}.to_json } let(:response_code) { 200 } @@ -646,7 +640,7 @@ def check_filtered_instances(*instances) end context 'when the instance does not support retrievable instances' do - let(:service) { VCAP::CloudController::Service.make(instances_retrievable: false) } + let(:service) { create(:service, instances_retrievable: false) } it 'fails with an explanatory error' do get "/v3/service_instances/#{instance.guid}/parameters", nil, admin_headers @@ -722,7 +716,7 @@ def check_filtered_instances(*instances) context 'when the instance is shared' do it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/service_instances/#{guid}/parameters", nil, user_headers } } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space: another_space, service_plan: service_plan) } + let(:instance) { create(:managed_service_instance, space: another_space, service_plan: service_plan) } let(:parameters) { { 'some-key' => 'some-value' } } let(:body) { { 'parameters' => parameters }.to_json } let(:guid) { instance.guid } @@ -857,7 +851,7 @@ def check_filtered_instances(*instances) context 'when the instance is user-provided' do it 'responds with 404' do - upsi = VCAP::CloudController::UserProvidedServiceInstance.make(space:) + upsi = create(:user_provided_service_instance, space:) get "/v3/service_instances/#{upsi.guid}/parameters", nil, admin_headers @@ -947,7 +941,7 @@ def check_filtered_instances(*instances) context 'when the space is not readable' do it 'fails saying the space cannot be found' do - request_body[:relationships][:space][:data][:guid] = VCAP::CloudController::Space.make.guid + request_body[:relationships][:space][:data][:guid] = create(:space).guid api_call.call(space_dev_headers) expect(last_response).to have_status_code(422) @@ -1029,7 +1023,7 @@ def check_filtered_instances(*instances) context 'when the name has already been taken' do it 'fails when the same name is already used in this space' do - VCAP::CloudController::ServiceInstance.make(name:, space:) + create(:service_instance, name:, space:) api_call.call(admin_headers) expect(last_response).to have_status_code(422) @@ -1043,7 +1037,7 @@ def check_filtered_instances(*instances) end it 'succeeds when the same name is used in another space' do - VCAP::CloudController::ServiceInstance.make(name: name, space: another_space) + create(:service_instance, name: name, space: another_space) api_call.call(admin_headers) expect(last_response).to have_status_code(201) @@ -1074,7 +1068,7 @@ def check_filtered_instances(*instances) description: 'amazing version' } end - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: true, maintenance_info: maintenance_info) } + let(:service_plan) { create(:service_plan, public: true, active: true, maintenance_info: maintenance_info) } let(:service_plan_guid) { service_plan.guid } let(:request_body) do { @@ -1178,7 +1172,7 @@ def check_filtered_instances(*instances) context 'when the name has already been taken' do it 'fails when the same name is already used in this space' do - VCAP::CloudController::ServiceInstance.make(name:, space:) + create(:service_instance, name:, space:) api_call.call(admin_headers) expect(last_response).to have_status_code(422) @@ -1192,7 +1186,7 @@ def check_filtered_instances(*instances) end it 'succeeds when the same name is used in another space' do - VCAP::CloudController::ServiceInstance.make(name: name, space: another_space) + create(:service_instance, name: name, space: another_space) api_call.call(admin_headers) expect(last_response).to have_status_code(202) @@ -1200,10 +1194,10 @@ def check_filtered_instances(*instances) end context 'when the plan is org-restricted' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) + create(:service_plan_visibility, service_plan: service_plan, organization: org) end it 'can be created in a space in that org' do @@ -1306,7 +1300,7 @@ def check_filtered_instances(*instances) end context 'not readable by the user' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } it 'fails saying the plan is invalid' do api_call.call(space_dev_headers) @@ -1322,7 +1316,7 @@ def check_filtered_instances(*instances) end context 'not enabled in that org' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } it 'fails saying the plan is invalid' do api_call.call(admin_headers) @@ -1341,7 +1335,7 @@ def check_filtered_instances(*instances) end context 'not active' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: false) } + let(:service_plan) { create(:service_plan, public: true, active: false) } it 'fails saying the plan is invalid' do api_call.call(admin_headers) @@ -1359,9 +1353,9 @@ def check_filtered_instances(*instances) end context 'space-scoped plan from a different space' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space: another_space) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, active: true, public: false) } + let(:service_broker) { create(:service_broker, space: another_space) } + let(:service_offering) { create(:service, service_broker:) } + let(:service_plan) { create(:service_plan, service: service_offering, active: true, public: false) } it 'fails saying the plan is invalid' do api_call.call(space_dev_headers) @@ -1536,8 +1530,8 @@ def check_filtered_instances(*instances) end context 'it fetches dashboard url' do - let(:service) { VCAP::CloudController::Service.make(instances_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: true, service: service) } + let(:service) { create(:service, instances_retrievable: true) } + let(:service_plan) { create(:service_plan, public: true, active: true, service: service) } let(:dashboard_url) { 'http:/some-new-dashboard-url.com' } it 'sets the service instance dashboard url' do @@ -1583,8 +1577,8 @@ def check_filtered_instances(*instances) describe 'volume mount and route service checks' do context 'when volume mount required' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: %w[volume_mount]) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[volume_mount]) } + let(:service_plan) { create(:service_plan, service: service_offering) } context 'volume mount disabled' do before do @@ -1614,8 +1608,8 @@ def check_filtered_instances(*instances) end context 'when route forwarding required' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: %w[route_forwarding]) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[route_forwarding]) } + let(:service_plan) { create(:service_plan, service: service_offering) } context 'route forwarding disabled' do before do @@ -1650,10 +1644,10 @@ def check_filtered_instances(*instances) describe 'space quotas' do context 'when the total services quota has been reached' do before do - quota = VCAP::CloudController::SpaceQuotaDefinition.make(total_services: 1, organization: org) + quota = create(:space_quota_definition, total_services: 1, organization: org) quota.add_space(space) - VCAP::CloudController::ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end it 'returns an error' do @@ -1670,10 +1664,10 @@ def check_filtered_instances(*instances) end context 'when the paid services quota has been reached' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(free: false, public: true, active: true) } + let!(:service_plan) { create(:service_plan, free: false, public: true, active: true) } before do - quota = VCAP::CloudController::SpaceQuotaDefinition.make(non_basic_services_allowed: false, organization: org) + quota = create(:space_quota_definition, non_basic_services_allowed: false, organization: org) quota.add_space(space) end @@ -1694,9 +1688,9 @@ def check_filtered_instances(*instances) describe 'organization quotas' do context 'when the total services quota has been reached' do before do - quota = VCAP::CloudController::QuotaDefinition.make(total_services: 1) + quota = create(:quota_definition, total_services: 1) quota.add_organization(org) - VCAP::CloudController::ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end it 'returns an error' do @@ -1713,10 +1707,10 @@ def check_filtered_instances(*instances) end context 'when the paid services quota has been reached' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(free: false, public: true, active: true) } + let!(:service_plan) { create(:service_plan, free: false, public: true, active: true) } before do - quota = VCAP::CloudController::QuotaDefinition.make(non_basic_services_allowed: false) + quota = create(:quota_definition, non_basic_services_allowed: false) quota.add_organization(org) end @@ -1749,7 +1743,7 @@ def check_filtered_instances(*instances) end context 'permissions' do - let(:guid) { VCAP::CloudController::ServiceInstance.make(space:).guid } + let(:guid) { create(:service_instance, space:).guid } it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:expected_codes_and_responses) { responses_for_space_restricted_update_endpoint(success_code: 200) } @@ -1777,15 +1771,14 @@ def check_filtered_instances(*instances) context 'managed service instance' do describe 'updates that do not require broker communication' do let!(:service_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - guid: 'bommel', - tags: %w[foo bar], - space: space - ) - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + si = create(:managed_service_instance, + guid: 'bommel', + tags: %w[foo bar], + space: space) + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') si end @@ -1861,28 +1854,26 @@ def check_filtered_instances(*instances) end describe 'updates that require broker communication' do - let(:service_offering) { VCAP::CloudController::Service.make } + let(:service_offering) { create(:service) } let(:original_service_plan) do - VCAP::CloudController::ServicePlan.make( - service: service_offering, - plan_updateable: true, - maintenance_info: { version: '1.1.1' } - ) + create(:service_plan, + service: service_offering, + plan_updateable: true, + maintenance_info: { version: '1.1.1' }) end - let(:new_service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } + let(:new_service_plan) { create(:service_plan, service: service_offering) } let(:original_maintenance_info) { { version: '1.1.0' } } let!(:service_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - guid: 'bommel', - tags: %w[foo bar], - space: space, - service_plan: original_service_plan, - maintenance_info: original_maintenance_info - ) - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + si = create(:managed_service_instance, + guid: 'bommel', + tags: %w[foo bar], + space: space, + service_plan: original_service_plan, + maintenance_info: original_maintenance_info) + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') si end let(:guid) { service_instance.guid } @@ -2185,7 +2176,7 @@ def check_filtered_instances(*instances) end context 'it fetches dashboard url' do - let(:service_offering) { VCAP::CloudController::Service.make(instances_retrievable: true) } + let(:service_offering) { create(:service, instances_retrievable: true) } let(:dashboard_url) { 'http:/some-new-dashboard-url.com' } it 'sets the service instance dashboard url' do @@ -2328,10 +2319,9 @@ def check_filtered_instances(*instances) describe 'no changes requested' do let!(:service_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - tags: %w[foo bar], - space: space - ) + si = create(:managed_service_instance, + tags: %w[foo bar], + space: space) si end @@ -2359,16 +2349,15 @@ def check_filtered_instances(*instances) describe 'maintenance_info checks' do let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - space:, - service_plan: - ) + create(:managed_service_instance, + space:, + service_plan:) end let(:guid) { service_instance.guid } context 'changing maintenance_info when the plan does not support it' do - let(:service_offering) { VCAP::CloudController::Service.make(plan_updateable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: true, service: service_offering) } + let(:service_offering) { create(:service, plan_updateable: true) } + let(:service_plan) { create(:service_plan, public: true, active: true, service: service_offering) } let(:service_plan_guid) { service_plan.guid } let(:request_body) do @@ -2396,14 +2385,13 @@ def check_filtered_instances(*instances) end context 'maintenance_info conflict' do - let(:service_offering) { VCAP::CloudController::Service.make(plan_updateable: true) } + let(:service_offering) { create(:service, plan_updateable: true) } let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - public: true, - active: true, - service: service_offering, - maintenance_info: { version: '2.1.0' } - ) + create(:service_plan, + public: true, + active: true, + service: service_offering, + maintenance_info: { version: '2.1.0' }) end let(:service_plan_guid) { service_plan.guid } @@ -2432,23 +2420,21 @@ def check_filtered_instances(*instances) end context 'changing maintenance_info alongside plan' do - let(:service_offering) { VCAP::CloudController::Service.make(plan_updateable: true) } + let(:service_offering) { create(:service, plan_updateable: true) } let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - public: true, - active: true, - service: service_offering, - maintenance_info: { version: '2.2.0' } - ) + create(:service_plan, + public: true, + active: true, + service: service_offering, + maintenance_info: { version: '2.2.0' }) end let(:new_service_plan) do - VCAP::CloudController::ServicePlan.make( - public: true, - active: true, - service: service_offering, - maintenance_info: { version: '2.1.0' } - ) + create(:service_plan, + public: true, + active: true, + service: service_offering, + maintenance_info: { version: '2.1.0' }) end let(:new_service_plan_guid) { new_service_plan.guid } @@ -2487,10 +2473,9 @@ def check_filtered_instances(*instances) describe 'service plan checks' do let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - tags: %w[foo bar], - space: space - ) + create(:managed_service_instance, + tags: %w[foo bar], + space: space) end let(:guid) { service_instance.guid } @@ -2524,7 +2509,7 @@ def check_filtered_instances(*instances) end context 'not readable by the user' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } let(:service_plan_guid) { service_plan.guid } it 'fails saying the plan is invalid' do @@ -2541,7 +2526,7 @@ def check_filtered_instances(*instances) end context 'not enabled in that org' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } let(:service_plan_guid) { service_plan.guid } it 'fails saying the plan is invalid' do @@ -2561,7 +2546,7 @@ def check_filtered_instances(*instances) end context 'not available' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: false) } + let(:service_plan) { create(:service_plan, public: true, active: false) } let(:service_plan_guid) { service_plan.guid } it 'fails saying the plan is invalid' do @@ -2580,9 +2565,9 @@ def check_filtered_instances(*instances) end context 'space-scoped plan from a different space' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space: another_space) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, active: true, public: false) } + let(:service_broker) { create(:service_broker, space: another_space) } + let(:service_offering) { create(:service, service_broker:) } + let(:service_plan) { create(:service_plan, service: service_offering, active: true, public: false) } let(:service_plan_guid) { service_plan.guid } it 'fails saying the plan is invalid' do @@ -2599,7 +2584,7 @@ def check_filtered_instances(*instances) end context 'relates to a different service offering' do - let(:service_plan_guid) { VCAP::CloudController::ServicePlan.make.guid } + let(:service_plan_guid) { create(:service_plan).guid } it 'fails saying the plan relates to a different service offering' do api_call.call(admin_headers) @@ -2620,14 +2605,13 @@ def check_filtered_instances(*instances) context 'name is already used in this space' do let(:guid) { service_instance.guid } let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - tags: %w[foo bar], - space: space - ) + create(:managed_service_instance, + tags: %w[foo bar], + space: space) end let!(:name) { 'test' } - let!(:other_si) { VCAP::CloudController::ServiceInstance.make(name:, space:) } + let!(:other_si) { create(:service_instance, name:, space:) } let(:request_body) { { name: } } it 'fails' do @@ -2647,10 +2631,9 @@ def check_filtered_instances(*instances) describe 'invalid request' do let!(:service_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - tags: %w[foo bar], - space: space - ) + si = create(:managed_service_instance, + tags: %w[foo bar], + space: space) si end @@ -2683,17 +2666,16 @@ def check_filtered_instances(*instances) describe 'when the SI plan is no longer active' do let(:version) { { version: '2.0.0' } } - let(:service_offering) { VCAP::CloudController::Service.make } + let(:service_offering) { create(:service) } let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - public: true, - active: false, - maintenance_info: version, - service: service_offering - ) + create(:service_plan, + public: true, + active: false, + maintenance_info: version, + service: service_offering) end let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) + create(:managed_service_instance, space:, service_plan:) end let(:guid) { service_instance.guid } @@ -2733,7 +2715,7 @@ def check_filtered_instances(*instances) let(:request_body) { { name: 'new-name' } } context 'and the service offering allows contextual updates' do - let(:service_offering) { VCAP::CloudController::Service.make(allow_context_updates: true) } + let(:service_offering) { create(:service, allow_context_updates: true) } it 'fails with a plan inaccessible message' do api_call.call(admin_headers) @@ -2749,7 +2731,7 @@ def check_filtered_instances(*instances) end context 'but the service offering does not allow contextual updates' do - let(:service_offering) { VCAP::CloudController::Service.make(allow_context_updates: false) } + let(:service_offering) { create(:service, allow_context_updates: false) } it 'succeeds' do api_call.call(admin_headers) @@ -2762,22 +2744,21 @@ def check_filtered_instances(*instances) context 'user-provided service instance' do let!(:service_instance) do - si = VCAP::CloudController::UserProvidedServiceInstance.make( - guid: 'bommel', - space: space, - name: 'foo', - credentials: { - foo: 'bar', - baz: 'qux' - }, - syslog_drain_url: 'https://foo.com', - route_service_url: 'https://bar.com', - tags: %w[accounting mongodb] - ) - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + si = create(:user_provided_service_instance, + guid: 'bommel', + space: space, + name: 'foo', + credentials: { + foo: 'bar', + baz: 'qux' + }, + syslog_drain_url: 'https://foo.com', + route_service_url: 'https://bar.com', + tags: %w[accounting mongodb]) + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') si end @@ -2870,7 +2851,7 @@ def check_filtered_instances(*instances) end context 'when the name is already taken' do - let!(:duplicate_name) { VCAP::CloudController::UserProvidedServiceInstance.make(space: space, name: new_name) } + let!(:duplicate_name) { create(:user_provided_service_instance, space: space, name: new_name) } let(:request_body) do { @@ -2894,9 +2875,8 @@ def check_filtered_instances(*instances) context 'when an operation is in progress' do let(:service_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - space: - ) + si = create(:managed_service_instance, + space:) si end let(:guid) { service_instance.guid } @@ -3015,7 +2995,7 @@ def check_filtered_instances(*instances) let(:api_call) { ->(user_headers) { delete "/v3/service_instances/#{instance.guid}?#{query_params}", '{}', user_headers } } context 'permissions' do - let!(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let!(:instance) { create(:user_provided_service_instance, space:) } let(:db_check) do lambda { expect(VCAP::CloudController::ServiceInstance.all).to be_empty @@ -3031,18 +3011,18 @@ def check_filtered_instances(*instances) context 'user provided service instances' do let!(:instance) do - si = VCAP::CloudController::UserProvidedServiceInstance.make(space: space, route_service_url: 'https://banana.example.com/') - si.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + si = create(:user_provided_service_instance, space: space, route_service_url: 'https://banana.example.com/') + si.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') si end let(:instance_labels) { VCAP::CloudController::ServiceInstanceLabelModel.where(service_instance: instance) } let(:instance_annotations) { VCAP::CloudController::ServiceInstanceAnnotationModel.where(service_instance: instance) } before do - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'fruit', value: 'banana', service_instance: instance) - VCAP::CloudController::ServiceInstanceLabelModel.make(key_name: 'spice', value: 'cinnamon', service_instance: instance) - VCAP::CloudController::ServiceInstanceAnnotationModel.make(key_name: 'contact', value: 'marie', service_instance: instance) - VCAP::CloudController::ServiceInstanceAnnotationModel.make(key_name: 'email', value: 'some@example.com', service_instance: instance) + create(:service_instance_label_model, key_name: 'fruit', value: 'banana', service_instance: instance) + create(:service_instance_label_model, key_name: 'spice', value: 'cinnamon', service_instance: instance) + create(:service_instance_annotation_model, key_name: 'contact', value: 'marie', service_instance: instance) + create(:service_instance_annotation_model, key_name: 'email', value: 'some@example.com', service_instance: instance) end it 'deletes the instance and removes any labels or annotations' do @@ -3056,8 +3036,8 @@ def check_filtered_instances(*instances) end it 'deletes any related bindings' do - VCAP::CloudController::RouteBinding.make(service_instance: instance) - VCAP::CloudController::ServiceBinding.make(service_instance: instance) + create(:route_binding, service_instance: instance) + create(:service_binding, service_instance: instance) api_call.call(admin_headers) expect(last_response).to have_status_code(204) @@ -3071,8 +3051,8 @@ def check_filtered_instances(*instances) let(:query_params) { 'purge=true' } before do - @binding = VCAP::CloudController::ServiceBinding.make(service_instance: instance) - @route = VCAP::CloudController::RouteBinding.make(service_instance: instance) + @binding = create(:service_binding, service_instance: instance) + @route = create(:route_binding, service_instance: instance) end it 'deletes the instance and the related resources' do @@ -3089,7 +3069,7 @@ def check_filtered_instances(*instances) end context 'managed service instance' do - let!(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let!(:instance) { create(:managed_service_instance, space:) } let(:broker_status_code) { 200 } let(:broker_response) { {} } let!(:stub_delete) do @@ -3427,7 +3407,7 @@ def check_filtered_instances(*instances) context 'when the service instance is shared' do let!(:shared_space) do - VCAP::CloudController::Space.make.tap do |s| + create(:space).tap do |s| instance.add_shared_space(s) end end @@ -3440,8 +3420,8 @@ def check_filtered_instances(*instances) end context 'when there is a binding in the shared space' do - let!(:application) { VCAP::CloudController::AppModel.make(space: shared_space) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: instance, app: application) } + let!(:application) { create(:app_model, space: shared_space) } + let!(:service_binding) { create(:service_binding, service_instance: instance, app: application) } before do stub_request(:delete, "#{instance.service_broker.broker_url}/v2/service_instances/#{instance.guid}/service_bindings/#{service_binding.guid}"). @@ -3475,12 +3455,12 @@ def check_filtered_instances(*instances) end context 'when there are bindings' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: %w[route_forwarding]) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } - let!(:route_binding) { VCAP::CloudController::RouteBinding.make(service_instance: instance) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: instance) } - let!(:service_key) { VCAP::CloudController::ServiceKey.make(service_instance: instance) } + let(:service_offering) { create(:service, requires: %w[route_forwarding]) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:instance) { create(:managed_service_instance, space:, service_plan:) } + let!(:route_binding) { create(:route_binding, service_instance: instance) } + let!(:service_binding) { create(:service_binding, service_instance: instance) } + let!(:service_key) { create(:service_key, service_instance: instance) } context 'and the broker responds synchronously to the bindings being deleted' do before do @@ -3588,12 +3568,12 @@ def check_filtered_instances(*instances) context 'when purge is true' do let(:query_params) { 'purge=true' } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:instance) { create(:managed_service_instance, space:, service_plan:) } context 'when broker is space scoped' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let(:service_offering) { VCAP::CloudController::Service.make(requires: %w[route_forwarding], service_broker: service_broker) } + let(:service_broker) { create(:service_broker, space:) } + let(:service_offering) { create(:service, requires: %w[route_forwarding], service_broker: service_broker) } context 'as developer' do let(:space_dev_headers) do @@ -3621,12 +3601,12 @@ def check_filtered_instances(*instances) end context 'when broker is global' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: %w[route_forwarding]) } + let(:service_offering) { create(:service, requires: %w[route_forwarding]) } before do - @binding = VCAP::CloudController::ServiceBinding.make(service_instance: instance) - @key = VCAP::CloudController::ServiceKey.make(service_instance: instance) - @route = VCAP::CloudController::RouteBinding.make(service_instance: instance) + @binding = create(:service_binding, service_instance: instance) + @key = create(:service_key, service_instance: instance) + @route = create(:route_binding, service_instance: instance) end context 'as developer' do @@ -3793,8 +3773,8 @@ def check_filtered_instances(*instances) describe 'POST /v3/service_instances/:guid/relationships/shared_spaces' do let(:api_call) { ->(user_headers) { post "/v3/service_instances/#{guid}/relationships/shared_spaces", request_body.to_json, user_headers } } - let(:target_space_1) { VCAP::CloudController::Space.make(organization: org) } - let(:target_space_2) { VCAP::CloudController::Space.make(organization: org) } + let(:target_space_1) { create(:space, organization: org) } + let(:target_space_2) { create(:space, organization: org) } let(:request_body) do { 'data' => [ @@ -3803,7 +3783,7 @@ def check_filtered_instances(*instances) ] } end - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:guid) { service_instance.guid } let(:space_dev_headers) do org.add_user(user) @@ -3811,7 +3791,7 @@ def check_filtered_instances(*instances) headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'service_instance_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'service_instance_sharing', enabled: true, error_message: nil) end before do @@ -3829,7 +3809,7 @@ def check_filtered_instances(*instances) context 'when target organization is suspended' do let(:target_space_1) do - space = VCAP::CloudController::Space.make + space = create(:space) space.organization.add_user(user) space.organization.update(status: VCAP::CloudController::Organization::SUSPENDED) space @@ -3976,7 +3956,7 @@ def check_filtered_instances(*instances) end context 'user does not have access to one of the target spaces' do - let(:no_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_access_target_space) { create(:space, organization: org) } let(:request_body) do { 'data' => [ @@ -4006,7 +3986,7 @@ def check_filtered_instances(*instances) end context 'owns the space' do - let(:no_access_target_space) { VCAP::CloudController::Space.make(organization: org) } + let(:no_access_target_space) { create(:space, organization: org) } let(:request_body) do { 'data' => [ @@ -4038,7 +4018,7 @@ def check_filtered_instances(*instances) describe 'errors while sharing' do context 'service instance is user provided' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'responds with 422 and the error' do api_call.call(space_dev_headers) @@ -4059,8 +4039,8 @@ def check_filtered_instances(*instances) describe 'DELETE /v3/service_instances/:guid/relationships/shared_spaces/:space_guid' do let(:api_call) { ->(user_headers) { delete "/v3/service_instances/#{guid}/relationships/shared_spaces/#{space_guid}", nil, user_headers } } - let(:target_space) { VCAP::CloudController::Space.make(organization: org) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:target_space) { create(:space, organization: org) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:guid) { service_instance.guid } let(:space_guid) { target_space.guid } let(:space_dev_headers) do @@ -4069,7 +4049,7 @@ def check_filtered_instances(*instances) headers_for(user) end let!(:feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: 'service_instance_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'service_instance_sharing', enabled: true, error_message: nil) end before do @@ -4109,11 +4089,11 @@ def check_filtered_instances(*instances) end describe 'when there are bindings in the shared space' do - let(:app_1) { VCAP::CloudController::AppModel.make(space: target_space) } - let(:app_2) { VCAP::CloudController::AppModel.make(space: target_space) } + let(:app_1) { create(:app_model, space: target_space) } + let(:app_2) { create(:app_model, space: target_space) } - let(:binding_1) { VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: app_1) } - let(:binding_2) { VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: app_2) } + let(:binding_1) { create(:service_binding, service_instance: service_instance, app: app_1) } + let(:binding_2) { create(:service_binding, service_instance: service_instance, app: app_2) } context 'and the bindings can be deleted synchronously' do before do @@ -4194,7 +4174,7 @@ def check_filtered_instances(*instances) end context 'when instance was not shared to the space' do - let(:space_guid) { VCAP::CloudController::Space.make(organization: org).guid } + let(:space_guid) { create(:space, organization: org).guid } it 'responds with 204' do api_call.call(space_dev_headers) @@ -4207,8 +4187,8 @@ def check_filtered_instances(*instances) describe 'GET /v3/service_instances/:guid/relationships/shared_spaces' do let(:user_header) { headers_for(user) } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:other_space) { VCAP::CloudController::Space.make } + let(:instance) { create(:managed_service_instance, space:) } + let(:other_space) { create(:space) } before do share_service_instance(instance, other_space) @@ -4327,10 +4307,10 @@ def check_filtered_instances(*instances) describe 'GET /v3/service_instances/:guid/relationships/shared_spaces/usage_summary' do let(:guid) { instance.guid } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:space_1) { VCAP::CloudController::Space.make } - let(:space_2) { VCAP::CloudController::Space.make } - let(:space_3) { VCAP::CloudController::Space.make } + let(:instance) { create(:managed_service_instance, space:) } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } + let(:space_3) { create(:space) } let(:url) { "/v3/service_instances/#{guid}/relationships/shared_spaces/usage_summary" } let(:api_call) { ->(user_headers) { get url, nil, user_headers } } let(:bindings_on_space_1) { 1 } @@ -4338,10 +4318,9 @@ def check_filtered_instances(*instances) def create_bindings(instance, space:, count:) (1..count).each do - VCAP::CloudController::ServiceBinding.make( - app: VCAP::CloudController::AppModel.make(space:), - service_instance: instance - ) + create(:service_binding, + app: create(:app_model, space:), + service_instance: instance) end end @@ -4388,7 +4367,7 @@ def create_bindings(instance, space:, count:) context 'when the user has access to the service through a shared space' do it 'responds with 200 ok' do - user = VCAP::CloudController::User.make + user = create(:user) set_current_user_as_role(role: 'space_developer', org: space_2.organization, space: space_2, user: user) api_call.call(headers_for(user)) @@ -4421,7 +4400,7 @@ def create_bindings(instance, space:, count:) end context 'when the user is a member of the org or space the service instance exists in' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:guid) { instance.guid } let(:expected_codes_and_responses) do @@ -4470,7 +4449,7 @@ def create_bindings(instance, space:, count:) end context 'when the user is not a member of the org or space the service instance exists in' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:guid) { instance.guid } let(:expected_codes_and_responses) do diff --git a/spec/request/service_offerings_spec.rb b/spec/request/service_offerings_spec.rb index 4076abeba89..1506a9da625 100644 --- a/spec/request/service_offerings_spec.rb +++ b/spec/request/service_offerings_spec.rb @@ -5,9 +5,9 @@ UNAUTHENTICATED = %w[unauthenticated].freeze RSpec.describe 'V3 service offerings' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } describe 'GET /v3/service_offerings/:guid' do let(:api_call) { ->(user_headers) { get "/v3/service_offerings/#{service_offering.guid}", nil, user_headers } } @@ -30,7 +30,7 @@ end context 'when service plan is not available in any orgs' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:service_plan) { create(:service_plan, public: false, active: true) } let(:service_offering) { service_plan.service } let(:expected_codes_and_responses) do @@ -45,7 +45,7 @@ end context 'when service offering is publicly available' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } + let(:service_plan) { create(:service_plan, public: true, active: true) } let(:service_offering) { service_plan.service } let(:expected_codes_and_responses) do @@ -70,14 +70,13 @@ end context 'when a service offering plan is available only in some orgs' do - let(:org) { VCAP::CloudController::Organization.make } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, active: true) } + let(:org) { create(:organization) } + let(:service_plan) { create(:service_plan, public: false, active: true) } let(:service_offering) { service_plan.service } let!(:service_plan_visibility) do - VCAP::CloudController::ServicePlanVisibility.make( - service_plan: service_plan, - organization: org - ) + create(:service_plan_visibility, + service_plan: service_plan, + organization: org) end let(:expected_codes_and_responses) do @@ -91,15 +90,15 @@ end context 'when service offering comes from space scoped broker' do - let!(:broker_org) { VCAP::CloudController::Organization.make } - let!(:broker_space) { VCAP::CloudController::Space.make(organization: broker_org) } - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make(space: broker_space) } - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } + let!(:broker_org) { create(:organization) } + let!(:broker_space) { create(:space, organization: broker_org) } + let!(:service_broker) { create(:service_broker, space: broker_space) } + let!(:service_offering) { create(:service, service_broker:) } + let!(:service_plan) { create(:service_plan, service: service_offering) } let!(:guid) { service_offering.guid } context 'the user is in the same space as the service broker' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:org) { broker_org } let(:space) { broker_space } @@ -122,9 +121,9 @@ end context 'the user is in a different space to the service broker' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) @@ -138,9 +137,9 @@ end context 'the user is a SpaceDeveloper in the space of the broker, but is targeting a different space' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } before do broker_org.add_user(user) @@ -158,14 +157,14 @@ end context 'when the service offering has labels and annotations' do - let(:service_offering) { VCAP::CloudController::ServicePlan.make.service } + let(:service_offering) { create(:service_plan).service } let(:guid) { service_offering.guid } before do - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: guid, key_name: 'one', value: 'foo') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: guid, key_name: 'two', value: 'bar') - VCAP::CloudController::ServiceOfferingAnnotationModel.make(resource_guid: guid, key_name: 'alpha', value: 'A1') - VCAP::CloudController::ServiceOfferingAnnotationModel.make(resource_guid: guid, key_name: 'beta', value: 'B2') + create(:service_offering_label_model, resource_guid: guid, key_name: 'one', value: 'foo') + create(:service_offering_label_model, resource_guid: guid, key_name: 'two', value: 'bar') + create(:service_offering_annotation_model, resource_guid: guid, key_name: 'alpha', value: 'A1') + create(:service_offering_annotation_model, resource_guid: guid, key_name: 'beta', value: 'B2') end it 'displays the metadata correctly' do @@ -187,7 +186,7 @@ end describe 'fields' do - let!(:service_offering) { VCAP::CloudController::Service.make } + let!(:service_offering) { create(:service) } it 'can include service broker name and guid' do get "/v3/service_offerings/#{service_offering.guid}?fields[service_broker]=name,guid", nil, admin_headers @@ -237,15 +236,15 @@ end describe 'visibility of service offerings' do - let!(:public_service_offering) { VCAP::CloudController::ServicePlan.make(public: true, name: 'public').service } - let!(:private_service_offering) { VCAP::CloudController::ServicePlan.make(public: false, name: 'private').service } + let!(:public_service_offering) { create(:service_plan, public: true, name: 'public').service } + let!(:private_service_offering) { create(:service_plan, public: false, name: 'private').service } let!(:space_scoped_service_offering) do - broker = VCAP::CloudController::ServiceBroker.make(space:) - VCAP::CloudController::Service.make(service_broker: broker) + broker = create(:service_broker, space:) + create(:service, service_broker: broker) end let!(:org_restricted_service_offering) do - service_plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: service_plan) + service_plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: service_plan) service_plan.service end @@ -306,8 +305,8 @@ end describe 'pagination' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let!(:service_offering_1) { create(:service_plan, public: true, active: true).service } + let!(:service_offering_2) { create(:service_plan, public: true, active: true).service } let(:resources) { [service_offering_1, service_offering_2] } @@ -317,16 +316,16 @@ end context 'when the service offerings have labels and annotations' do - let(:service_offering_1) { VCAP::CloudController::ServicePlan.make.service } - let(:service_offering_2) { VCAP::CloudController::ServicePlan.make.service } + let(:service_offering_1) { create(:service_plan).service } + let(:service_offering_2) { create(:service_plan).service } let(:guid_1) { service_offering_1.guid } let(:guid_2) { service_offering_2.guid } before do - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: guid_1, key_name: 'one', value: 'foo') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: guid_2, key_name: 'two', value: 'bar') - VCAP::CloudController::ServiceOfferingAnnotationModel.make(resource_guid: guid_1, key_name: 'alpha', value: 'A1') - VCAP::CloudController::ServiceOfferingAnnotationModel.make(resource_guid: guid_2, key_name: 'beta', value: 'B2') + create(:service_offering_label_model, resource_guid: guid_1, key_name: 'one', value: 'foo') + create(:service_offering_label_model, resource_guid: guid_2, key_name: 'two', value: 'bar') + create(:service_offering_annotation_model, resource_guid: guid_1, key_name: 'alpha', value: 'A1') + create(:service_offering_annotation_model, resource_guid: guid_2, key_name: 'beta', value: 'B2') end it 'displays the metadata correctly' do @@ -352,10 +351,10 @@ describe 'available' do let(:api_call) { ->(user_headers) { get "/v3/service_offerings?available=#{available}", nil, user_headers } } - let!(:service_offering_available) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let!(:service_offering_available) { create(:service_plan, public: true, active: true).service } let!(:service_offering_unavailable) do - offering = VCAP::CloudController::Service.make(active: false) - VCAP::CloudController::ServicePlan.make(public: true, active: true, service: offering) + offering = create(:service, active: false) + create(:service_plan, public: true, active: true, service: offering) offering end @@ -375,10 +374,10 @@ end describe 'broker_catalog_ids' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:service_offering_1) { create(:service_plan, public: true).service } + let!(:service_offering_2) { create(:service_plan, public: true).service } + let!(:service_offering_3) { create(:service_plan, public: true).service } + let!(:service_offering_4) { create(:service_plan, public: true).service } it 'filters by broker catalog id' do expect_filtered_service_offerings( @@ -389,18 +388,18 @@ end describe 'guids' do - let!(:service_broker_1) { VCAP::CloudController::ServiceBroker.make(space:) } - let!(:service_offering_1) { VCAP::CloudController::Service.make(service_broker: service_broker_1) } + let!(:service_broker_1) { create(:service_broker, space:) } + let!(:service_offering_1) { create(:service, service_broker: service_broker_1) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org) } - let(:service_broker_2) { VCAP::CloudController::ServiceBroker.make(space: space_2) } - let!(:service_offering_2) { VCAP::CloudController::Service.make(service_broker: service_broker_2) } + let(:space_2) { create(:space, organization: org) } + let(:service_broker_2) { create(:service_broker, space: space_2) } + let!(:service_offering_2) { create(:service, service_broker: service_broker_2) } - let(:space_3) { VCAP::CloudController::Space.make(organization: org) } - let(:service_broker_3) { VCAP::CloudController::ServiceBroker.make(space: space_3) } - let!(:service_offering_3) { VCAP::CloudController::Service.make(service_broker: service_broker_3) } + let(:space_3) { create(:space, organization: org) } + let(:service_broker_3) { create(:service_broker, space: space_3) } + let!(:service_offering_3) { create(:service, service_broker: service_broker_3) } - let!(:public_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let!(:public_plan) { create(:service_plan, public: true) } let!(:public_service_offering) { public_plan.service } let!(:guids) { [service_offering_1.guid, service_offering_2.guid] } @@ -414,23 +413,23 @@ end describe 'space_guids' do - let(:org_1) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } - let!(:org_plan_1) { VCAP::CloudController::ServicePlan.make(public: false) } - let!(:org_plan_2) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let!(:org_plan_1) { create(:service_plan, public: false) } + let!(:org_plan_2) { create(:service_plan, public: false) } let!(:org_offering_1) { org_plan_1.service } let!(:org_offering_2) { org_plan_2.service } - let(:space_1) { VCAP::CloudController::Space.make(organization: org_1) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org_2) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } let!(:space_offering_1) { generate_space_scoped_offering(space_1) } let!(:space_offering_2) { generate_space_scoped_offering(space_2) } - let!(:public_offering) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:public_offering) { create(:service_plan, public: true).service } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_1, organization: org_1) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_2, organization: org_2) + create(:service_plan_visibility, service_plan: org_plan_1, organization: org_1) + create(:service_plan_visibility, service_plan: org_plan_2, organization: org_2) end it 'selects on space plans, org plans, and public plans' do @@ -447,23 +446,23 @@ end describe 'organization_guids' do - let(:org_1) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } - let!(:org_plan_1) { VCAP::CloudController::ServicePlan.make(public: false) } - let!(:org_plan_2) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let!(:org_plan_1) { create(:service_plan, public: false) } + let!(:org_plan_2) { create(:service_plan, public: false) } let!(:org_offering_1) { org_plan_1.service } let!(:org_offering_2) { org_plan_2.service } - let(:space_1) { VCAP::CloudController::Space.make(organization: org_1) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org_2) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } let!(:space_offering_1) { generate_space_scoped_offering(space_1) } let!(:space_offering_2) { generate_space_scoped_offering(space_2) } - let!(:public_offering) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:public_offering) { create(:service_plan, public: true).service } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_1, organization: org_1) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_2, organization: org_2) + create(:service_plan_visibility, service_plan: org_plan_1, organization: org_1) + create(:service_plan_visibility, service_plan: org_plan_2, organization: org_2) end it 'selects on space plans, org plans, and public plans' do @@ -480,19 +479,19 @@ end describe 'service_broker_guids' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } let!(:service_offering_1) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end let!(:service_offering_2) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make.service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make.service } + let!(:service_offering_3) { create(:service_plan).service } + let!(:service_offering_4) { create(:service_plan).service } let(:service_broker_guids) { [service_broker.guid, service_offering_3.service_broker.guid] } it 'filters by broker guid' do @@ -508,19 +507,19 @@ end describe 'service_broker_names' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } let!(:service_offering_1) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end let!(:service_offering_2) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make.service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make.service } + let!(:service_offering_3) { create(:service_plan).service } + let!(:service_offering_4) { create(:service_plan).service } let(:service_broker_names) { [service_broker.name, service_offering_4.service_broker.name] } it 'filters by broker name' do @@ -536,10 +535,10 @@ end describe 'names' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:service_offering_1) { create(:service_plan, public: true).service } + let!(:service_offering_2) { create(:service_plan, public: true).service } + let!(:service_offering_3) { create(:service_plan, public: true).service } + let!(:service_offering_4) { create(:service_plan, public: true).service } let(:service_offering_names) { [service_offering_1.name, service_offering_4.name] } it 'filters by name' do @@ -554,14 +553,14 @@ end describe 'label_selector' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let!(:service_offering_1) { create(:service_plan, public: true, active: true).service } + let!(:service_offering_2) { create(:service_plan, public: true, active: true).service } + let!(:service_offering_3) { create(:service_plan, public: true, active: true).service } before do - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_1.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_2.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_3.guid, key_name: 'flavor', value: 'apple') + create(:service_offering_label_model, resource_guid: service_offering_1.guid, key_name: 'flavor', value: 'orange') + create(:service_offering_label_model, resource_guid: service_offering_2.guid, key_name: 'flavor', value: 'orange') + create(:service_offering_label_model, resource_guid: service_offering_3.guid, key_name: 'flavor', value: 'apple') end it 'filters by label' do @@ -578,10 +577,10 @@ describe 'order_by' do context 'name' do # can't use shared example as it sets 'name' rather than 'label' - let!(:resource_1) { VCAP::CloudController::Service.make(guid: '1', label: 'flopsy') } - let!(:resource_2) { VCAP::CloudController::Service.make(guid: '2', label: 'mopsy') } - let!(:resource_3) { VCAP::CloudController::Service.make(guid: '3', label: 'cottontail') } - let!(:resource_4) { VCAP::CloudController::Service.make(guid: '4', label: 'peter') } + let!(:resource_1) { create(:service, guid: '1', label: 'flopsy') } + let!(:resource_2) { create(:service, guid: '2', label: 'mopsy') } + let!(:resource_3) { create(:service, guid: '3', label: 'cottontail') } + let!(:resource_4) { create(:service, guid: '4', label: 'peter') } it 'sorts ascending' do get('/v3/service_offerings?order_by=name', nil, admin_headers) @@ -617,11 +616,10 @@ describe 'fields' do let!(:service_1) do - VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make(created_at: Time.now.utc - 1.second) - ) + create(:service, + service_broker: create(:service_broker, created_at: Time.now.utc - 1.second)) end - let!(:service_2) { VCAP::CloudController::Service.make } + let!(:service_2) { create(:service) } it 'can include service broker name and guid' do get '/v3/service_offerings?fields[service_broker]=name,guid', nil, admin_headers @@ -678,7 +676,7 @@ end context 'when the service offering exists and has no plans' do - let!(:service_offering) { VCAP::CloudController::Service.make } + let!(:service_offering) { create(:service) } let(:guid) { service_offering.guid } let(:expected_codes_and_responses) do @@ -703,7 +701,7 @@ end context 'when the service offering exists and has public plans' do - let!(:service_offering) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:service_offering) { create(:service_plan, public: true).service } let(:guid) { service_offering.guid } let(:expected_codes_and_responses) do @@ -717,12 +715,12 @@ end context 'when the service offering exists and has org-scoped plans' do - let(:org) { VCAP::CloudController::Organization.make } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:org) { create(:organization) } + let!(:service_plan) { create(:service_plan, public: false) } let(:guid) { service_plan.service.guid } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) + create(:service_plan_visibility, service_plan: service_plan, organization: org) end let(:expected_codes_and_responses) do @@ -737,17 +735,17 @@ end context 'when the service offering is from a space-scoped service broker' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:service_broker) { create(:service_broker, space:) } + let!(:service_offering) { create(:service, service_broker:) } let(:guid) { service_offering.guid } before do # Being a SpaceDeveloper in another space should make no difference - alternative_org = VCAP::CloudController::Organization.make + alternative_org = create(:organization) alternative_org.add_user(user) - alternative_space = VCAP::CloudController::Space.make(organization: alternative_org) + alternative_space = create(:space, organization: alternative_org) alternative_space.add_developer(user) end @@ -770,7 +768,7 @@ describe 'audit events' do let(:email) { Sham.email } let(:admin_headers) { admin_headers_for(user, email:) } - let(:service_offering) { VCAP::CloudController::Service.make } + let(:service_offering) { create(:service) } it 'emits an audit event' do delete "/v3/service_offerings/#{service_offering.guid}", nil, admin_headers @@ -789,8 +787,8 @@ end context 'when broker is space-scoped' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } + let(:service_broker) { create(:service_broker, space:) } + let(:service_offering) { create(:service, service_broker:) } it 'deletes the service offering and its dependencies' do delete "/v3/service_offerings/#{service_offering.guid}?purge=true", nil, headers_for(user) @@ -804,7 +802,7 @@ end context 'when broker is global' do - let(:service_offering) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let(:service_offering) { create(:service_plan, public: true, active: true).service } it 'responds with 403' do delete "/v3/service_offerings/#{service_offering.guid}?purge=true", nil, headers_for(user) @@ -815,9 +813,9 @@ end context 'when user is admin' do - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance:) } - let!(:service_key) { VCAP::CloudController::ServiceKey.make(service_instance:) } + let!(:service_instance) { create(:managed_service_instance) } + let!(:service_binding) { create(:service_binding, service_instance:) } + let!(:service_key) { create(:service_key, service_instance:) } let(:guid) { service_instance.service_plan.service.guid } let(:email) { Sham.email } let(:admin_header) { admin_headers_for(user, email:) } @@ -859,7 +857,7 @@ end it 'can update labels and annotations' do - service_offering = VCAP::CloudController::ServicePlan.make(public: true, active: true).service + service_offering = create(:service_plan, public: true, active: true).service patch "/v3/service_offerings/#{service_offering.guid}", update_request_body.to_json, admin_headers @@ -869,7 +867,7 @@ context 'when some labels are invalid' do let(:labels) { { potato: 'sweet invalid potato' } } - let!(:service_offering) { VCAP::CloudController::Service.make(active: true) } + let!(:service_offering) { create(:service, active: true) } it 'returns a proper failure' do patch "/v3/service_offerings/#{service_offering.guid}", update_request_body.to_json, admin_headers @@ -881,7 +879,7 @@ context 'when some annotations are invalid' do let(:annotations) { { '/style' => 'sweet invalid style' } } - let!(:service_offering) { VCAP::CloudController::Service.make(active: true) } + let!(:service_offering) { create(:service, active: true) } it 'returns a proper failure' do patch "/v3/service_offerings/#{service_offering.guid}", update_request_body.to_json, admin_headers @@ -904,7 +902,7 @@ let(:guid) { service_offering.guid } context 'when the service offering exists and has no plans' do - let!(:service_offering) { VCAP::CloudController::Service.make(active: true) } + let!(:service_offering) { create(:service, active: true) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -922,7 +920,7 @@ end context 'when the service offering exists and has public plans' do - let!(:service_offering) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let!(:service_offering) { create(:service_plan, public: true, active: true).service } let(:expected_codes_and_responses) do Hash.new({ code: 403 }.freeze).tap do |h| @@ -938,11 +936,11 @@ end context 'when the service offering exists and has org-scoped plans' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } let!(:service_offering) { service_plan.service } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) + create(:service_plan_visibility, service_plan: service_plan, organization: org) end let(:expected_codes_and_responses) do @@ -960,14 +958,14 @@ end context 'when the service offering is from a space-scoped service broker' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } + let(:service_broker) { create(:service_broker, space:) } + let!(:service_offering) { create(:service, service_broker:) } before do # Being a SpaceDeveloper in another space should make no difference - alternative_org = VCAP::CloudController::Organization.make + alternative_org = create(:organization) alternative_org.add_user(user) - alternative_space = VCAP::CloudController::Space.make(organization: alternative_org) + alternative_space = create(:space, organization: alternative_org) alternative_space.add_developer(user) end @@ -1055,7 +1053,7 @@ def expect_filtered_service_offerings(filter, list) end def generate_space_scoped_offering(space) - broker = VCAP::CloudController::ServiceBroker.make(space:) - VCAP::CloudController::Service.make(service_broker: broker) + broker = create(:service_broker, space:) + create(:service, service_broker: broker) end end diff --git a/spec/request/service_plan_visibility_spec.rb b/spec/request/service_plan_visibility_spec.rb index 8ebd9bc4d26..5b391834ee8 100644 --- a/spec/request/service_plan_visibility_spec.rb +++ b/spec/request/service_plan_visibility_spec.rb @@ -3,10 +3,10 @@ require 'models/services/service_plan' RSpec.describe 'V3 service plan visibility' do - let(:user) { VCAP::CloudController::User.make } - let!(:org) { VCAP::CloudController::Organization.make } - let!(:other_org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let!(:org) { create(:organization) } + let!(:other_org) { create(:organization) } + let(:space) { create(:space, organization: org) } describe 'GET /v3/service_plans/:guid/visibility' do let(:api_call) { ->(user_headers) { get "/v3/service_plans/#{guid}/visibility", {}, user_headers } } @@ -23,7 +23,7 @@ end context 'for public plans' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make } + let!(:service_plan) { create(:service_plan) } let(:expected_codes_and_responses) do Hash.new( { code: 200, @@ -35,7 +35,7 @@ end context 'for admin-only plans' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } let(:admin_only_response) do { code: 200, @@ -55,9 +55,9 @@ context 'for space-scoped plans' do let!(:service_plan) do - broker = VCAP::CloudController::ServiceBroker.make(space:) - offering = VCAP::CloudController::Service.make(service_broker: broker) - VCAP::CloudController::ServicePlan.make(public: false, service: offering) + broker = create(:service_broker, space:) + offering = create(:service, service_broker: broker) + create(:service_plan, public: false, service: offering) end let(:response_object) do @@ -96,12 +96,12 @@ end context 'for org-restricted plans' do - let(:other_org) { VCAP::CloudController::Organization.make } + let(:other_org) { create(:organization) } let!(:service_plan) do - plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: plan) - VCAP::CloudController::ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end @@ -155,7 +155,7 @@ let(:req_body) { { type: 'public' } } context 'when the plan current visibility is "admin"' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -189,7 +189,7 @@ end context 'when the plan current visibility is "public"' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let(:service_plan) { create(:service_plan, public: true) } let(:expected_codes_and_responses) do Hash.new({ code: 403 }.freeze).tap do |h| h['admin'] = successful_response @@ -221,14 +221,14 @@ context 'when the plan current visibility is "organization"' do let!(:service_plan) do - plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: plan) - VCAP::CloudController::ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end context 'and another PATCH with organizations is sent' do - let(:third_org) { VCAP::CloudController::Organization.make } + let(:third_org) { create(:organization) } it 'fails if the list of orgs is empty' do body = { type: 'organization', organizations: [] }.to_json @@ -269,8 +269,8 @@ end it 'returns a 404 for users of other orgs' do - new_org = VCAP::CloudController::Organization.make - user = VCAP::CloudController::User.make + new_org = create(:organization) + user = create(:user) user.add_organization(new_org) patch api_url, req_body.to_json, headers_for(user) @@ -299,8 +299,8 @@ end it 'returns a 404 for users of other orgs' do - new_org = VCAP::CloudController::Organization.make - user = VCAP::CloudController::User.make + new_org = create(:organization) + user = create(:user) user.add_organization(new_org) patch api_url, req_body.to_json, headers_for(user) @@ -311,13 +311,10 @@ context 'when the plan current visibility is "space"' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - service: VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make( - space: VCAP::CloudController::Space.make - ) - ) - ) + create(:service_plan, + service: create(:service, + service_broker: create(:service_broker, + space: create(:space)))) end it 'cannot be updated' do @@ -328,7 +325,7 @@ end context 'regardless of the current plan visibility' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let(:service_plan) { create(:service_plan, public: true) } context 'when the plan does not exist' do let(:guid) { 'invalid-plan-guid' } @@ -363,14 +360,14 @@ context 'when type is "organization" but the org does not exist' do let(:service_plan) do - plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: plan) - VCAP::CloudController::ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end it 'returns an error and rolls back any changes' do - third_org = VCAP::CloudController::Organization.make + third_org = create(:organization) body = { type: 'organization', organizations: [{ guid: third_org.guid }, { guid: 'invalid-guid' }] }.to_json patch api_url, body, admin_headers @@ -384,15 +381,15 @@ end describe 'POST /v3/service_plans/:guid/visibility' do - let(:third_org) { VCAP::CloudController::Organization.make } - let(:yet_another_org) { VCAP::CloudController::Organization.make } + let(:third_org) { create(:organization) } + let(:yet_another_org) { create(:organization) } let(:api_url) { "/v3/service_plans/#{guid}/visibility" } let(:api_call) { ->(user_headers) { post api_url, req_body.to_json, user_headers } } let(:guid) { service_plan.guid } let(:service_plan) do - plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: plan) - VCAP::CloudController::ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end let(:body) { { type: 'organization', organizations: [{ guid: third_org.guid }, { guid: yet_another_org.guid }] } } @@ -451,7 +448,7 @@ end context 'when the current visibility type is not organization' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let(:service_plan) { create(:service_plan, public: true) } let(:body) { { type: 'organization', organizations: [{ guid: org.guid }] } } it 'updates the visibility type AND add the orgs' do @@ -474,7 +471,7 @@ context 'when an org in the list does not exist' do it 'returns an error and rolls back any changes' do - third_org = VCAP::CloudController::Organization.make + third_org = create(:organization) body = { type: 'organization', organizations: [{ guid: third_org.guid }, { guid: 'invalid-guid' }] }.to_json post api_url, body, admin_headers @@ -498,13 +495,10 @@ context 'when the plan current visibility is "space"' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - service: VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make( - space: VCAP::CloudController::Space.make - ) - ) - ) + create(:service_plan, + service: create(:service, + service_broker: create(:service_broker, + space: create(:space)))) end it 'cannot be updated' do @@ -554,8 +548,8 @@ it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS it 'returns a 404 for users of other orgs' do - new_org = VCAP::CloudController::Organization.make - user = VCAP::CloudController::User.make + new_org = create(:organization) + user = create(:user) user.add_organization(new_org) post api_url, req_body.to_json, headers_for(user) @@ -571,9 +565,9 @@ let(:org_guid) { org.guid } let(:service_plan) do - plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: plan) - VCAP::CloudController::ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end @@ -587,7 +581,7 @@ end context 'when the plan is not visible on the organization' do - let(:third_org) { VCAP::CloudController::Organization.make } + let(:third_org) { create(:organization) } let(:org_guid) { third_org.guid } it 'returns a 404' do @@ -606,7 +600,7 @@ end context 'when the plan is not org restricted' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let(:service_plan) { create(:service_plan, public: true) } it 'returns a 422' do delete api_url, {}, admin_headers diff --git a/spec/request/service_plans_spec.rb b/spec/request/service_plans_spec.rb index aaf5ba5963e..72b746ef801 100644 --- a/spec/request/service_plans_spec.rb +++ b/spec/request/service_plans_spec.rb @@ -5,9 +5,9 @@ UNAUTHENTICATED = %w[unauthenticated].freeze RSpec.describe 'V3 service plans' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } describe 'GET /v3/service_plans/:guid' do let(:api_call) { ->(user_headers) { get "/v3/service_plans/#{guid}", nil, user_headers } } @@ -29,7 +29,7 @@ description: 'best plan ever' } end - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true, maintenance_info: maintenance_info) } + let!(:service_plan) { create(:service_plan, public: true, maintenance_info: maintenance_info) } let(:guid) { service_plan.guid } let(:expected_codes_and_responses) do @@ -56,8 +56,8 @@ context 'when there is a non-public service plan' do context 'global broker' do - let!(:visibility) { VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:visibility) { create(:service_plan_visibility, service_plan: service_plan, organization: org) } + let!(:service_plan) { create(:service_plan, public: false) } let(:guid) { service_plan.guid } let(:expected_codes_and_responses) do @@ -71,9 +71,9 @@ end context 'space scoped broker' do - let!(:broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker: broker) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } + let!(:broker) { create(:service_broker, space:) } + let!(:service_offering) { create(:service, service_broker: broker) } + let!(:service_plan) { create(:service_plan, public: false, service: service_offering) } let(:guid) { service_plan.guid } let(:expected_codes_and_responses) do @@ -96,7 +96,7 @@ end context 'validity of links' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let!(:service_plan) { create(:service_plan, public: true) } let(:guid) { service_plan.guid } before do @@ -132,7 +132,7 @@ end describe 'fields' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make } + let!(:service_plan) { create(:service_plan) } let(:guid) { service_plan.guid } it 'can include service broker name and guid' do @@ -161,8 +161,8 @@ end it 'can include `service_offering`' do - offering = VCAP::CloudController::Service.make - plan = VCAP::CloudController::ServicePlan.make(service: offering) + offering = create(:service) + plan = create(:service_plan, service: offering) guid = plan.guid get "/v3/service_plans/#{guid}?include=service_offering", nil, admin_headers @@ -215,12 +215,12 @@ end describe 'visibility of service plans' do - let!(:public_service_plan) { VCAP::CloudController::ServicePlan.make(public: true, name: 'public') } - let!(:private_service_plan) { VCAP::CloudController::ServicePlan.make(public: false, name: 'private') } + let!(:public_service_plan) { create(:service_plan, public: true, name: 'public') } + let!(:private_service_plan) { create(:service_plan, public: false, name: 'private') } let!(:space_scoped_service_plan) { generate_space_scoped_plan(space) } let!(:org_restricted_service_plan) do - service_plan = VCAP::CloudController::ServicePlan.make(public: false) - VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: service_plan) + service_plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: service_plan) service_plan end @@ -293,8 +293,8 @@ end describe 'pagination' do - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } + let!(:service_plan_1) { create(:service_plan, public: true, active: true) } + let!(:service_plan_2) { create(:service_plan, public: true, active: true) } let(:resources) { [service_plan_1, service_plan_2] } @@ -304,16 +304,16 @@ end context 'when the service plans have labels and annotations' do - let(:service_plan_1) { VCAP::CloudController::ServicePlan.make } - let(:service_plan_2) { VCAP::CloudController::ServicePlan.make } + let(:service_plan_1) { create(:service_plan) } + let(:service_plan_2) { create(:service_plan) } let(:guid_1) { service_plan_1.guid } let(:guid_2) { service_plan_2.guid } before do - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: guid_1, key_name: 'one', value: 'foo') - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: guid_2, key_name: 'two', value: 'bar') - VCAP::CloudController::ServicePlanAnnotationModel.make(resource_guid: guid_1, key_name: 'alpha', value: 'A1') - VCAP::CloudController::ServicePlanAnnotationModel.make(resource_guid: guid_2, key_name: 'beta', value: 'B2') + create(:service_plan_label_model, resource_guid: guid_1, key_name: 'one', value: 'foo') + create(:service_plan_label_model, resource_guid: guid_2, key_name: 'two', value: 'bar') + create(:service_plan_annotation_model, resource_guid: guid_1, key_name: 'alpha', value: 'A1') + create(:service_plan_annotation_model, resource_guid: guid_2, key_name: 'beta', value: 'B2') end it 'displays the metadata correctly' do @@ -337,21 +337,21 @@ describe 'filters' do describe 'organization_guids' do - let(:org_1) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } - let!(:org_plan_1) { VCAP::CloudController::ServicePlan.make(public: false) } - let!(:org_plan_2) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let!(:org_plan_1) { create(:service_plan, public: false) } + let!(:org_plan_2) { create(:service_plan, public: false) } - let(:space_1) { VCAP::CloudController::Space.make(organization: org_1) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org_2) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } let!(:space_plan_1) { generate_space_scoped_plan(space_1) } let!(:space_plan_2) { generate_space_scoped_plan(space_2) } - let!(:public_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let!(:public_plan) { create(:service_plan, public: true) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_1, organization: org_1) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_2, organization: org_2) + create(:service_plan_visibility, service_plan: org_plan_1, organization: org_1) + create(:service_plan_visibility, service_plan: org_plan_2, organization: org_2) end it 'selects on org plans, space plans and public plans' do @@ -364,21 +364,21 @@ end describe 'space_guids' do - let(:org_1) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } - let!(:org_plan_1) { VCAP::CloudController::ServicePlan.make(public: false) } - let!(:org_plan_2) { VCAP::CloudController::ServicePlan.make(public: false) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let!(:org_plan_1) { create(:service_plan, public: false) } + let!(:org_plan_2) { create(:service_plan, public: false) } - let(:space_1) { VCAP::CloudController::Space.make(organization: org_1) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org_2) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } let!(:space_plan_1) { generate_space_scoped_plan(space_1) } let!(:space_plan_2) { generate_space_scoped_plan(space_2) } - let!(:public_plan) { VCAP::CloudController::ServicePlan.make(public: true) } + let!(:public_plan) { create(:service_plan, public: true) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_1, organization: org_1) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: org_plan_2, organization: org_2) + create(:service_plan_visibility, service_plan: org_plan_1, organization: org_1) + create(:service_plan_visibility, service_plan: org_plan_2, organization: org_2) end it 'selects on org plans, space plans and public plans' do @@ -391,32 +391,32 @@ end describe 'service_broker_names' do - let(:org_system) { VCAP::CloudController::Organization.make(name: 'system') } - let!(:org_dev) { VCAP::CloudController::Organization.make(name: 'dev') } + let(:org_system) { create(:organization, name: 'system') } + let!(:org_dev) { create(:organization, name: 'dev') } - let(:space_1) { VCAP::CloudController::Space.make(organization: org_system) } + let(:space_1) { create(:space, organization: org_system) } - let(:global_broker) { VCAP::CloudController::ServiceBroker.make(name: 'global_broker') } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker: global_broker) } - let!(:plan_1) { VCAP::CloudController::ServicePlan.make(public: true, service: service_offering) } - let!(:plan_2) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } - let(:plan_3) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } - let(:plan_4) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } + let(:global_broker) { create(:service_broker, name: 'global_broker') } + let(:service_offering) { create(:service, service_broker: global_broker) } + let!(:plan_1) { create(:service_plan, public: true, service: service_offering) } + let!(:plan_2) { create(:service_plan, public: false, service: service_offering) } + let(:plan_3) { create(:service_plan, public: false, service: service_offering) } + let(:plan_4) { create(:service_plan, public: false, service: service_offering) } - let(:space_broker) { VCAP::CloudController::ServiceBroker.make(name: 'space_broker', space: space_1) } - let(:space_offering) { VCAP::CloudController::Service.make(service_broker: space_broker) } - let!(:space_plan_1) { VCAP::CloudController::ServicePlan.make(public: false, service: space_offering) } - let!(:space_plan_2) { VCAP::CloudController::ServicePlan.make(public: false, service: space_offering) } + let(:space_broker) { create(:service_broker, name: 'space_broker', space: space_1) } + let(:space_offering) { create(:service, service_broker: space_broker) } + let!(:space_plan_1) { create(:service_plan, public: false, service: space_offering) } + let!(:space_plan_2) { create(:service_plan, public: false, service: space_offering) } - let(:global_broker2) { VCAP::CloudController::ServiceBroker.make(name: 'global_broker2') } - let(:global_offering) { VCAP::CloudController::Service.make(service_broker: global_broker2) } - let!(:filtered_out_plan) { VCAP::CloudController::ServicePlan.make(public: true, service: global_offering) } + let(:global_broker2) { create(:service_broker, name: 'global_broker2') } + let(:global_offering) { create(:service, service_broker: global_broker2) } + let!(:filtered_out_plan) { create(:service_plan, public: true, service: global_offering) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan_3, organization: org_system) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan_4, organization: org_dev) + create(:service_plan_visibility, service_plan: plan_3, organization: org_system) + create(:service_plan_visibility, service_plan: plan_4, organization: org_dev) space_1.organization.add_user(user) space_1.add_developer(user) @@ -440,37 +440,37 @@ end describe 'service_offering_names' do - let(:org_system) { VCAP::CloudController::Organization.make(name: 'system') } - let!(:org_dev) { VCAP::CloudController::Organization.make(name: 'dev') } + let(:org_system) { create(:organization, name: 'system') } + let!(:org_dev) { create(:organization, name: 'dev') } let(:space_1) do - space = VCAP::CloudController::Space.make(organization: org_system) + space = create(:space, organization: org_system) space.organization.add_user(user) space.add_developer(user) space end - let(:global_broker) { VCAP::CloudController::ServiceBroker.make(name: 'global_broker') } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker: global_broker) } - let!(:plan_1) { VCAP::CloudController::ServicePlan.make(public: true, service: service_offering) } - let!(:plan_2) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } - let(:plan_3) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } - let(:plan_4) { VCAP::CloudController::ServicePlan.make(public: false, service: service_offering) } + let(:global_broker) { create(:service_broker, name: 'global_broker') } + let(:service_offering) { create(:service, service_broker: global_broker) } + let!(:plan_1) { create(:service_plan, public: true, service: service_offering) } + let!(:plan_2) { create(:service_plan, public: false, service: service_offering) } + let(:plan_3) { create(:service_plan, public: false, service: service_offering) } + let(:plan_4) { create(:service_plan, public: false, service: service_offering) } - let(:space_broker) { VCAP::CloudController::ServiceBroker.make(name: 'space_broker') } - let(:space_offering) { VCAP::CloudController::Service.make(service_broker: space_broker) } - let!(:space_plan_1) { VCAP::CloudController::ServicePlan.make(public: false, service: space_offering) } - let!(:space_plan_2) { VCAP::CloudController::ServicePlan.make(public: false, service: space_offering) } + let(:space_broker) { create(:service_broker, name: 'space_broker') } + let(:space_offering) { create(:service, service_broker: space_broker) } + let!(:space_plan_1) { create(:service_plan, public: false, service: space_offering) } + let!(:space_plan_2) { create(:service_plan, public: false, service: space_offering) } - let(:global_broker2) { VCAP::CloudController::ServiceBroker.make(name: 'global_broker2') } - let(:global_offering) { VCAP::CloudController::Service.make(service_broker: global_broker2) } - let!(:filtered_out_plan) { VCAP::CloudController::ServicePlan.make(public: true, service: global_offering) } + let(:global_broker2) { create(:service_broker, name: 'global_broker2') } + let(:global_offering) { create(:service, service_broker: global_broker2) } + let!(:filtered_out_plan) { create(:service_plan, public: true, service: global_offering) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan_3, organization: org_system) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan_4, organization: org_dev) + create(:service_plan_visibility, service_plan: plan_3, organization: org_system) + create(:service_plan_visibility, service_plan: plan_4, organization: org_dev) space_1.add_service_broker(space_broker) end @@ -491,9 +491,9 @@ end describe 'service_instance_guids' do - let!(:instance_1) { VCAP::CloudController::ManagedServiceInstance.make } - let!(:instance_2) { VCAP::CloudController::ManagedServiceInstance.make } - let!(:instance_3) { VCAP::CloudController::ManagedServiceInstance.make } + let!(:instance_1) { create(:managed_service_instance) } + let!(:instance_2) { create(:managed_service_instance) } + let!(:instance_3) { create(:managed_service_instance) } it 'filters by service instance guid' do filter = [instance_1.guid, instance_3.guid].join(',') @@ -503,14 +503,14 @@ end describe 'label_selector' do - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } - let!(:service_plan_3) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } + let!(:service_plan_1) { create(:service_plan, public: true, active: true) } + let!(:service_plan_2) { create(:service_plan, public: true, active: true) } + let!(:service_plan_3) { create(:service_plan, public: true, active: true) } before do - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_1.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_2.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_3.guid, key_name: 'flavor', value: 'apple') + create(:service_plan_label_model, resource_guid: service_plan_1.guid, key_name: 'flavor', value: 'orange') + create(:service_plan_label_model, resource_guid: service_plan_2.guid, key_name: 'flavor', value: 'orange') + create(:service_plan_label_model, resource_guid: service_plan_3.guid, key_name: 'flavor', value: 'apple') end it 'can filter on labels' do @@ -524,8 +524,8 @@ end describe 'other filters' do - let!(:selected_plan) { VCAP::CloudController::ServicePlan.make(active: true) } - let!(:alternate_plan) { VCAP::CloudController::ServicePlan.make(active: false) } + let!(:selected_plan) { create(:service_plan, active: true) } + let!(:alternate_plan) { create(:service_plan, active: false) } it 'gets the available plans' do [ @@ -559,12 +559,11 @@ describe 'includes' do let(:space_1) do - VCAP::CloudController::Space.make( - organization: VCAP::CloudController::Organization.make(created_at: Time.now.utc - 1.second), - created_at: Time.now.utc - 1.second - ) + create(:space, + organization: create(:organization, created_at: Time.now.utc - 1.second), + created_at: Time.now.utc - 1.second) end - let(:space_2) { VCAP::CloudController::Space.make } + let(:space_2) { create(:space) } context 'when including `space.organization`' do before do @@ -598,11 +597,11 @@ end it 'can include `service_offering`' do - offering_1 = VCAP::CloudController::Service.make - offering_2 = VCAP::CloudController::Service.make - VCAP::CloudController::ServicePlan.make(service: offering_1) - VCAP::CloudController::ServicePlan.make(service: offering_2) - VCAP::CloudController::ServicePlan.make(service: offering_2) + offering_1 = create(:service) + offering_2 = create(:service) + create(:service_plan, service: offering_1) + create(:service_plan, service: offering_2) + create(:service_plan, service: offering_2) get '/v3/service_plans?include=service_offering', nil, admin_headers expect(last_response).to have_status_code(200) @@ -614,13 +613,11 @@ describe 'fields' do let!(:plan_1) do - VCAP::CloudController::ServicePlan.make( - service: VCAP::CloudController::Service.make( - service_broker: VCAP::CloudController::ServiceBroker.make(created_at: Time.now.utc - 1.second) - ) - ) + create(:service_plan, + service: create(:service, + service_broker: create(:service_broker, created_at: Time.now.utc - 1.second))) end - let!(:plan_2) { VCAP::CloudController::ServicePlan.make } + let!(:plan_2) { create(:service_plan) } it 'can include service broker name and guid' do get '/v3/service_plans?fields[service_offering.service_broker]=name,guid', nil, admin_headers @@ -678,7 +675,7 @@ let(:guid) { service_plan.guid } context 'when the plan is only visible to global scope users' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -693,7 +690,7 @@ end context 'when the plan is public' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make } + let!(:service_plan) { create(:service_plan) } let(:expected_codes_and_responses) do Hash.new({ code: 403 }.freeze).tap do |h| @@ -706,10 +703,10 @@ end context 'when the plan is visible only on some orgs' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) + create(:service_plan_visibility, service_plan: service_plan, organization: org) end let(:expected_codes_and_responses) do @@ -724,9 +721,9 @@ end context 'when the plan is from a space-scoped service broker' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, public: false) } + let(:service_broker) { create(:service_broker, space:) } + let(:service_offering) { create(:service, service_broker:) } + let!(:service_plan) { create(:service_plan, service: service_offering, public: false) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -746,7 +743,7 @@ end context 'when the service plan exists and has service instances' do - let!(:service_plan) { VCAP::CloudController::ManagedServiceInstance.make.service_plan } + let!(:service_plan) { create(:managed_service_instance).service_plan } it 'fails with a 422 unprocessable entity' do delete "/v3/service_plans/#{service_plan.guid}", {}, admin_headers @@ -757,7 +754,7 @@ end describe 'audit events' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make } + let(:service_plan) { create(:service_plan) } let(:email) { Sham.email } let(:admin_headers) { admin_headers_for(user, email:) } @@ -787,7 +784,7 @@ let(:guid) { service_plan.guid } it 'can update labels and annotations' do - service_plan = VCAP::CloudController::ServicePlan.make(public: true, active: true) + service_plan = create(:service_plan, public: true, active: true) patch "/v3/service_plans/#{service_plan.guid}", update_request_body.to_json, admin_headers @@ -797,7 +794,7 @@ context 'when some labels are invalid' do let(:labels) { { potato: 'sweet invalid potato' } } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(active: true) } + let!(:service_plan) { create(:service_plan, active: true) } it 'returns a proper failure' do patch "/v3/service_plans/#{service_plan.guid}", update_request_body.to_json, admin_headers @@ -809,7 +806,7 @@ context 'when some annotations are invalid' do let(:annotations) { { '/style' => 'sweet invalid style' } } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(active: true) } + let!(:service_plan) { create(:service_plan, active: true) } it 'returns a proper failure' do patch "/v3/service_plans/#{service_plan.guid}", update_request_body.to_json, admin_headers @@ -829,7 +826,7 @@ context 'permissions' do context 'when the plan is only visible to global scope users' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -844,7 +841,7 @@ end context 'when the plan is public' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make } + let!(:service_plan) { create(:service_plan) } let(:expected_codes_and_responses) do Hash.new({ code: 403 }.freeze).tap do |h| @@ -857,10 +854,10 @@ end context 'when the plan is visible only on some orgs' do - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(public: false) } + let!(:service_plan) { create(:service_plan, public: false) } before do - VCAP::CloudController::ServicePlanVisibility.make(service_plan: service_plan, organization: org) + create(:service_plan_visibility, service_plan: service_plan, organization: org) end let(:expected_codes_and_responses) do @@ -875,9 +872,9 @@ end context 'when the plan is from a space-scoped service broker' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, public: false) } + let(:service_broker) { create(:service_broker, space:) } + let(:service_offering) { create(:service, service_broker:) } + let!(:service_plan) { create(:service_plan, service: service_offering, public: false) } let(:expected_codes_and_responses) do Hash.new({ code: 404 }.freeze).tap do |h| @@ -978,8 +975,8 @@ def check_filtered_plans(*plans) end def generate_space_scoped_plan(space) - broker = VCAP::CloudController::ServiceBroker.make(space:) - offering = VCAP::CloudController::Service.make(service_broker: broker) - VCAP::CloudController::ServicePlan.make(service: offering) + broker = create(:service_broker, space:) + offering = create(:service, service_broker: broker) + create(:service_plan, service: offering) end end diff --git a/spec/request/service_route_bindings_spec.rb b/spec/request/service_route_bindings_spec.rb index af2cde52cc0..667191acc1c 100644 --- a/spec/request/service_route_bindings_spec.rb +++ b/spec/request/service_route_bindings_spec.rb @@ -9,11 +9,11 @@ headers_for(user) end let(:route_service_url) { 'https://route_service_url.com' } - let!(:space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } - let(:org) { VCAP::CloudController::Organization.make } - let(:user) { VCAP::CloudController::User.make } + let!(:space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', space: space) } + let(:space) { create(:space, organization: org) } + let!(:org_annotation) { create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: org.guid) } + let(:org) { create(:organization) } + let(:user) { create(:user) } let(:parameters_mixed_data_types_as_json_string) do '{"boolean":true,"string":"a string","int":123,"float":3.14159,"optional":null,"object":{"a":"b"},"array":["c","d"]}' end @@ -32,7 +32,7 @@ describe 'GET /v3/service_route_bindings' do # Because route bindings don't have names, we can't use the 'paginated response' shared example describe 'behaving like a paginated resource' do - let!(:resources) { Array.new(2) { VCAP::CloudController::RouteBinding.make } } + let!(:resources) { create_list(:route_binding, 2) } it 'returns pagination information' do get '/v3/service_route_bindings?per_page=1', nil, admin_headers @@ -89,9 +89,9 @@ end describe 'a mix of bindings' do - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:service_instance_1) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing, space:, route_service_url:) } - let(:service_instance_2) { VCAP::CloudController::ManagedServiceInstance.make(:routing, space:, route_service_url:) } + let(:route) { create(:route, space:) } + let(:service_instance_1) { create(:user_provided_service_instance, :routing, space:, route_service_url:) } + let(:service_instance_2) { create(:managed_service_instance, :routing, space:, route_service_url:) } let(:route_binding_1) do bind_service_to_route(service_instance_1, route) end @@ -152,8 +152,8 @@ describe 'filtering' do it 'can be filtered by service instance guids' do - VCAP::CloudController::RouteBinding.make - filtered_route_bindings = Array.new(2) { VCAP::CloudController::RouteBinding.make } + create(:route_binding) + filtered_route_bindings = create_list(:route_binding, 2) service_instance_guids = filtered_route_bindings. map(&:service_instance). map(&:guid). @@ -167,8 +167,8 @@ end it 'can be filtered by service instance names' do - VCAP::CloudController::RouteBinding.make - filtered_route_bindings = Array.new(2) { VCAP::CloudController::RouteBinding.make } + create(:route_binding) + filtered_route_bindings = create_list(:route_binding, 2) service_instance_names = filtered_route_bindings. map(&:service_instance). map(&:name). @@ -182,8 +182,8 @@ end it 'can be filtered by route guids' do - VCAP::CloudController::RouteBinding.make - filtered_route_bindings = Array.new(2) { VCAP::CloudController::RouteBinding.make } + create(:route_binding) + filtered_route_bindings = create_list(:route_binding, 2) route_guids = filtered_route_bindings. map(&:route). map(&:guid). @@ -197,21 +197,21 @@ end it 'filters by label' do - rb1 = VCAP::CloudController::RouteBinding.make - rb2 = VCAP::CloudController::RouteBinding.make - rb3 = VCAP::CloudController::RouteBinding.make - rb4 = VCAP::CloudController::RouteBinding.make - rb5 = VCAP::CloudController::RouteBinding.make + rb1 = create(:route_binding) + rb2 = create(:route_binding) + rb3 = create(:route_binding) + rb4 = create(:route_binding) + rb5 = create(:route_binding) filtered_route_bindings = [rb2, rb3] - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'fruit', value: 'strawberry', route_binding: rb1) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'animal', value: 'horse', route_binding: rb1) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'env', value: 'prod', route_binding: rb2) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'animal', value: 'dog', route_binding: rb2) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'env', value: 'prod', route_binding: rb3) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'animal', value: 'horse', route_binding: rb3) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'env', value: 'prod', route_binding: rb4) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'env', value: 'staging', route_binding: rb5) - VCAP::CloudController::RouteBindingLabelModel.make(key_name: 'animal', value: 'dog', route_binding: rb5) + create(:route_binding_label_model, key_name: 'fruit', value: 'strawberry', route_binding: rb1) + create(:route_binding_label_model, key_name: 'animal', value: 'horse', route_binding: rb1) + create(:route_binding_label_model, key_name: 'env', value: 'prod', route_binding: rb2) + create(:route_binding_label_model, key_name: 'animal', value: 'dog', route_binding: rb2) + create(:route_binding_label_model, key_name: 'env', value: 'prod', route_binding: rb3) + create(:route_binding_label_model, key_name: 'animal', value: 'horse', route_binding: rb3) + create(:route_binding_label_model, key_name: 'env', value: 'prod', route_binding: rb4) + create(:route_binding_label_model, key_name: 'env', value: 'staging', route_binding: rb5) + create(:route_binding_label_model, key_name: 'animal', value: 'dog', route_binding: rb5) get '/v3/service_route_bindings?label_selector=!fruit,env=prod,animal in (dog,horse)', nil, admin_headers @@ -229,12 +229,12 @@ describe 'include' do context 'when including `service_instance`' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing, created_at: Time.now.utc - 1.second) } - let(:other_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing) } + let(:instance) { create(:user_provided_service_instance, :routing, created_at: Time.now.utc - 1.second) } + let(:other_instance) { create(:user_provided_service_instance, :routing) } before do - VCAP::CloudController::RouteBinding.make(service_instance: instance) - 2.times { VCAP::CloudController::RouteBinding.make(service_instance: other_instance) } + create(:route_binding, service_instance: instance) + 2.times { create(:route_binding, service_instance: other_instance) } end it 'includes service instances`' do @@ -258,15 +258,15 @@ end it 'can include `route`' do - route = VCAP::CloudController::Route.make(created_at: Time.now.utc - 1.second) - other_route = VCAP::CloudController::Route.make + route = create(:route, created_at: Time.now.utc - 1.second) + other_route = create(:route) - si = VCAP::CloudController::ManagedServiceInstance.make(:routing, space: route.space) - VCAP::CloudController::RouteBinding.make(route: route, service_instance: si) + si = create(:managed_service_instance, :routing, space: route.space) + create(:route_binding, route: route, service_instance: si) 2.times do - si = VCAP::CloudController::ManagedServiceInstance.make(:routing, space: other_route.space) - VCAP::CloudController::RouteBinding.make(route: other_route, service_instance: si) + si = create(:managed_service_instance, :routing, space: other_route.space) + create(:route_binding, route: other_route, service_instance: si) end get '/v3/service_route_bindings?include=route', nil, admin_headers @@ -304,7 +304,7 @@ describe 'GET /v3/service_route_bindings/:guid' do let(:api_call) { ->(user_headers) { get "/v3/service_route_bindings/#{guid}", nil, user_headers } } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:route_binding) do VCAP::CloudController::RouteBinding.new.save_with_new_operation( { service_instance:, route:, route_service_url: }, @@ -335,7 +335,7 @@ end context 'user-provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } before do VCAP::CloudController::LabelsUpdate.update(route_binding, metadata[:labels], VCAP::CloudController::RouteBindingLabelModel) @@ -346,9 +346,9 @@ end context 'managed service instance' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } before do VCAP::CloudController::LabelsUpdate.update(route_binding, metadata[:labels], VCAP::CloudController::RouteBindingLabelModel) @@ -376,7 +376,7 @@ end describe 'include' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(:routing, space:) } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } before do VCAP::CloudController::LabelsUpdate.update(route_binding, metadata[:labels], VCAP::CloudController::RouteBindingLabelModel) @@ -410,7 +410,7 @@ describe 'POST /v3/service_route_bindings' do let(:api_call) { ->(user_headers) { post '/v3/service_route_bindings', request.to_json, user_headers } } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:metadata) do { labels: { peanut: 'butter' }, @@ -501,7 +501,7 @@ end context 'cannot read route' do - let(:route) { VCAP::CloudController::Route.make } + let(:route) { create(:route) } it 'fails with a 422 unprocessable' do api_call.call(space_dev_headers) @@ -520,8 +520,8 @@ end context 'route is internal' do - let(:domain) { VCAP::CloudController::SharedDomain.make(internal: true, name: 'my.domain.com') } - let(:route) { VCAP::CloudController::Route.make(domain:, space:) } + let(:domain) { create(:shared_domain, internal: true, name: 'my.domain.com') } + let(:route) { create(:route, domain:, space:) } it 'fails with a 422 unprocessable' do api_call.call(admin_headers) @@ -540,7 +540,7 @@ end context 'route and service instance in different spaces' do - let(:route) { VCAP::CloudController::Route.make } + let(:route) { create(:route) } it 'fails with a 422 unprocessable' do api_call.call(admin_headers) @@ -559,13 +559,12 @@ end context 'route is bound to a different service instance' do - let(:other_service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:other_service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } before do - VCAP::CloudController::RouteBinding.make( - route: route, - service_instance: other_service_instance - ) + create(:route_binding, + route: route, + service_instance: other_service_instance) end it 'fails with a 422 unprocessable' do @@ -584,10 +583,9 @@ context 'binding already exists' do before do - VCAP::CloudController::RouteBinding.make( - route:, - service_instance: - ) + create(:route_binding, + route:, + service_instance:) end it 'fails with a specific error' do @@ -605,13 +603,12 @@ end context 'service instance is bound to a different route' do - let(:other_route) { VCAP::CloudController::Route.make(space:) } + let(:other_route) { create(:route, space:) } before do - VCAP::CloudController::RouteBinding.make( - route: other_route, - service_instance: service_instance - ) + create(:route_binding, + route: other_route, + service_instance: service_instance) end it 'succeeds' do @@ -623,9 +620,9 @@ end context 'managed service instance' do - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } let(:binding) { VCAP::CloudController::RouteBinding.last } let(:job) { VCAP::CloudController::PollableJobModel.last } @@ -890,7 +887,7 @@ end context 'binding not retrievable' do - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: false, requires: ['route_forwarding']) } + let(:offering) { create(:service, bindings_retrievable: false, requires: ['route_forwarding']) } it 'fails the job with an appropriate error' do execute_all_jobs(expected_successes: 0, expected_failures: 1) @@ -948,7 +945,7 @@ end context 'service offering not configured for route binding' do - let(:offering) { VCAP::CloudController::Service.make(requires: []) } + let(:offering) { create(:service, requires: []) } it 'fails with a 422 unprocessable' do post '/v3/service_route_bindings', request.to_json, space_dev_headers @@ -967,7 +964,7 @@ end context 'service offering not bindable' do - let(:offering) { VCAP::CloudController::Service.make(bindable: false, requires: ['route_forwarding']) } + let(:offering) { create(:service, bindable: false, requires: ['route_forwarding']) } it 'fails with a 422 unprocessable' do post '/v3/service_route_bindings', request.to_json, space_dev_headers @@ -986,7 +983,7 @@ end context 'cannot read service instance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan: plan) } + let(:service_instance) { create(:managed_service_instance, service_plan: plan) } it 'fails with a 422 unprocessable' do api_call.call(space_dev_headers) @@ -1065,7 +1062,7 @@ end context 'user-provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } it_behaves_like 'create route binding' @@ -1145,7 +1142,7 @@ end context 'service instance not configured for route binding' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'fails with a 422 unprocessable' do api_call.call(space_dev_headers) @@ -1164,7 +1161,7 @@ end context 'cannot read service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it 'fails with a 422 unprocessable' do api_call.call(space_dev_headers) @@ -1188,7 +1185,7 @@ let(:api_call) { ->(user_headers) { delete "/v3/service_route_bindings/#{guid}", nil, user_headers } } context 'route binding exists' do - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:binding) do VCAP::CloudController::RouteBinding.new.save_with_new_operation( { service_instance:, route:, route_service_url: }, @@ -1205,7 +1202,7 @@ end context 'user-provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } let(:db_check) do lambda do @@ -1246,9 +1243,9 @@ end context 'managed service instance' do - let(:service_offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:db_check) { -> {} } let(:job) { VCAP::CloudController::PollableJobModel.last } @@ -1622,11 +1619,11 @@ end describe 'GET /v3/service_route_bindings/:guid/parameters' do - let(:offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding'], bindings_retrievable: true) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:offering) { create(:service, requires: ['route_forwarding'], bindings_retrievable: true) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } let(:binding) { bind_service_to_route(service_instance, route) } let(:api_call) { ->(user_headers) { get "/v3/service_route_bindings/#{binding.guid}/parameters", nil, user_headers } } @@ -1685,7 +1682,7 @@ end context 'when bindings are not retrievable' do - let(:offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } + let(:offering) { create(:service, requires: ['route_forwarding']) } it 'returns the appropriate error' do api_call.call(admin_headers) @@ -1816,7 +1813,7 @@ end context 'user provided service instances' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space: space, route_service_url: 'https://route.example.com') } + let(:service_instance) { create(:user_provided_service_instance, space: space, route_service_url: 'https://route.example.com') } let(:error_response) do { code: 'CF-BadRequest', @@ -1870,10 +1867,10 @@ describe 'PATCH /v3/service_route_bindings/:guid' do let(:api_call) { ->(user_headers) { patch "/v3/service_route_bindings/#{guid}", update_request_body.to_json, user_headers } } - let(:offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding'], bindings_retrievable: true) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan, route_service_url: route_service_url) } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:offering) { create(:service, requires: ['route_forwarding'], bindings_retrievable: true) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan, route_service_url: route_service_url) } + let(:route) { create(:route, space:) } let(:binding) { bind_service_to_route(service_instance, route) } let(:guid) { binding.guid } let(:labels) { { potato: 'sweet' } } diff --git a/spec/request/service_usage_events_spec.rb b/spec/request/service_usage_events_spec.rb index 3accf28c0fd..933f305aac9 100644 --- a/spec/request/service_usage_events_spec.rb +++ b/spec/request/service_usage_events_spec.rb @@ -4,13 +4,13 @@ RSpec.describe 'Service Usage Events' do let(:user) { make_user } let(:admin_header) { admin_headers_for(user) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } describe 'GET /v3/service_usage_events/:guid' do let(:api_call) { ->(user_headers) { get "/v3/service_usage_events/#{usage_event.guid}", nil, user_headers } } - let(:usage_event) { VCAP::CloudController::ServiceUsageEvent.make } + let(:usage_event) { create(:service_usage_event) } let(:usage_event_json) { build_usage_event_json(usage_event) } @@ -56,19 +56,17 @@ let(:api_call) { ->(user_headers) { get '/v3/service_usage_events', nil, user_headers } } let!(:service_usage_event) do - VCAP::CloudController::ServiceUsageEvent.make( - created_at: Time.now, - service_instance_type: 'managed_service_instance', - service_guid: 'offering-guid' - ) + create(:service_usage_event, + created_at: Time.now, + service_instance_type: 'managed_service_instance', + service_guid: 'offering-guid') end let!(:service_usage_event_2) do - VCAP::CloudController::ServiceUsageEvent.make( - created_at: Time.now, - service_instance_type: 'user_provided_service_instance', - service_guid: 'offering-guid-2' - ) + create(:service_usage_event, + created_at: Time.now, + service_instance_type: 'user_provided_service_instance', + service_guid: 'offering-guid-2') end let(:service_usage_event_json) { build_usage_event_json(service_usage_event) } @@ -122,10 +120,10 @@ end context 'filtering by timestamps' do - let!(:event_1) { VCAP::CloudController::ServiceUsageEvent.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:event_2) { VCAP::CloudController::ServiceUsageEvent.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:event_3) { VCAP::CloudController::ServiceUsageEvent.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:event_4) { VCAP::CloudController::ServiceUsageEvent.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:event_1) { create(:service_usage_event, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:event_2) { create(:service_usage_event, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:event_3) { create(:service_usage_event, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:event_4) { create(:service_usage_event, guid: '4', created_at: '2020-05-26T18:47:04Z') } it 'filters by the created at' do get "/v3/service_usage_events?created_ats[lt]=#{event_3.created_at.iso8601}", nil, admin_header @@ -173,11 +171,11 @@ let(:api_call) { ->(user_headers) { post '/v3/service_usage_events/actions/destructively_purge_all_and_reseed', nil, user_headers } } let!(:service_instance) do - VCAP::CloudController::ServiceInstance.make + create(:service_instance) end let!(:usage_event) do - VCAP::CloudController::ServiceUsageEvent.make(guid: 'some-guid') + create(:service_usage_event, guid: 'some-guid') end let(:expected_codes_and_responses) do diff --git a/spec/request/sidecars_spec.rb b/spec/request/sidecars_spec.rb index b5f85a31df4..914037b3c60 100644 --- a/spec/request/sidecars_spec.rb +++ b/spec/request/sidecars_spec.rb @@ -2,8 +2,8 @@ require 'request_spec_shared_examples' RSpec.describe 'Sidecars' do - let(:app_model) { VCAP::CloudController::AppModel.make } - let(:user) { VCAP::CloudController::User.make } + let(:app_model) { create(:app_model) } + let(:user) { create(:user) } let(:user_header) { headers_for(user) } describe 'POST /v3/apps/:guid/sidecars' do @@ -112,7 +112,7 @@ end describe 'validates sidecar memory' do - let!(:process) { VCAP::CloudController::ProcessModel.make(app_guid: app_model.guid, memory: 100, type: 'other_worker') } + let!(:process) { create(:process, app: app_model, memory: 100, type: 'other_worker') } let(:sidecar_params) do { name: 'sidecar_one', @@ -170,9 +170,9 @@ app_model.space.add_developer(user) end - let!(:sidecar) { VCAP::CloudController::SidecarModel.make(name: 'My sidecar', command: 'rackdown', app: app_model, memory: 400) } + let!(:sidecar) { create(:sidecar_model, name: 'My sidecar', command: 'rackdown', app: app_model, memory: 400) } let!(:sidecar_process_type) do - VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'other_worker', app_guid: app_model.guid) + create(:sidecar_process_type_model, sidecar: sidecar, type: 'other_worker', app_guid: app_model.guid) end let(:sidecar_params) do @@ -242,7 +242,7 @@ end describe 'duplicate name' do - let!(:other_sidecar) { VCAP::CloudController::SidecarModel.make(name: 'other sidecar', command: 'rackdown', app: app_model) } + let!(:other_sidecar) { create(:sidecar_model, name: 'other sidecar', command: 'rackdown', app: app_model) } let(:sidecar_params) do { name: 'My sidecar' } @@ -311,7 +311,7 @@ end describe 'validates sidecar memory' do - let!(:process) { VCAP::CloudController::ProcessModel.make(app_guid: app_model.guid, memory: 500, type: 'other_worker') } + let!(:process) { create(:process, app: app_model, memory: 500, type: 'other_worker') } let(:sidecar_params) do { name: 'sidecar_one', @@ -364,9 +364,9 @@ end describe 'GET /v3/sidecars/:guid' do - let(:sidecar) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar', command: 'smarch', memory: 300) } - let!(:sidecar_spider) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'spider') } - let!(:sidecar_web) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') } + let(:sidecar) { create(:sidecar_model, app: app_model, name: 'sidecar', command: 'smarch', memory: 300) } + let!(:sidecar_spider) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'spider') } + let!(:sidecar_web) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') } context 'as a permitted user' do before do @@ -425,42 +425,40 @@ end describe 'GET /v3/processes/:process_guid/sidecars' do - let!(:sidecar1a) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar1a', command: 'missile1a') } - let!(:sidecar_worker1a) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1a, type: 'worker') } - let!(:sidecar_web1a) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1a, type: 'web') } + let!(:sidecar1a) { create(:sidecar_model, app: app_model, name: 'sidecar1a', command: 'missile1a') } + let!(:sidecar_worker1a) { create(:sidecar_process_type_model, sidecar: sidecar1a, type: 'worker') } + let!(:sidecar_web1a) { create(:sidecar_process_type_model, sidecar: sidecar1a, type: 'web') } - let!(:sidecar1b) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar1b', command: 'missile1b') } - let!(:sidecar_worker1b) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1b, type: 'worker') } - let!(:sidecar_web1b) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1b, type: 'web') } + let!(:sidecar1b) { create(:sidecar_model, app: app_model, name: 'sidecar1b', command: 'missile1b') } + let!(:sidecar_worker1b) { create(:sidecar_process_type_model, sidecar: sidecar1b, type: 'worker') } + let!(:sidecar_web1b) { create(:sidecar_process_type_model, sidecar: sidecar1b, type: 'web') } - let!(:sidecar1c) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar1c', command: 'missile1c') } - let!(:sidecar_worker1c) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1c, type: 'worker') } - let!(:sidecar_web1c) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1c, type: 'web') } + let!(:sidecar1c) { create(:sidecar_model, app: app_model, name: 'sidecar1c', command: 'missile1c') } + let!(:sidecar_worker1c) { create(:sidecar_process_type_model, sidecar: sidecar1c, type: 'worker') } + let!(:sidecar_web1c) { create(:sidecar_process_type_model, sidecar: sidecar1c, type: 'web') } - let!(:sidecar1d) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar1d', command: 'missile1d') } - let!(:sidecar_worker1d) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1d, type: 'fish') } - let!(:sidecar_web1d) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1d, type: 'cows') } + let!(:sidecar1d) { create(:sidecar_model, app: app_model, name: 'sidecar1d', command: 'missile1d') } + let!(:sidecar_worker1d) { create(:sidecar_process_type_model, sidecar: sidecar1d, type: 'fish') } + let!(:sidecar_web1d) { create(:sidecar_process_type_model, sidecar: sidecar1d, type: 'cows') } let!(:process1) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model, - type: 'web', - command: 'rackup' - ) - end - - let!(:app_model2) { VCAP::CloudController::AppModel.make(space: app_model.space, name: 'app2') } - let!(:sidecar_for_app2) { VCAP::CloudController::SidecarModel.make(app: app_model2, name: 'sidecar2', command: 'missile2') } - let!(:sidecar_worker2) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_for_app2, type: 'worker') } - let!(:sidecar_web2) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_for_app2, type: 'web') } + create(:process, + :process, + app: app_model, + type: 'web', + command: 'rackup') + end + + let!(:app_model2) { create(:app_model, space: app_model.space, name: 'app2') } + let!(:sidecar_for_app2) { create(:sidecar_model, app: app_model2, name: 'sidecar2', command: 'missile2') } + let!(:sidecar_worker2) { create(:sidecar_process_type_model, sidecar: sidecar_for_app2, type: 'worker') } + let!(:sidecar_web2) { create(:sidecar_process_type_model, sidecar: sidecar_for_app2, type: 'web') } let!(:process2) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model2, - type: 'web', - command: 'rackup' - ) + create(:process, + :process, + app: app_model2, + type: 'web', + command: 'rackup') end context 'as a space developer' do @@ -548,14 +546,13 @@ end context 'filtering on created_ats and updated_ats' do - let(:app_model3) { VCAP::CloudController::AppModel.make } + let(:app_model3) { create(:app_model) } let!(:process3) do - VCAP::CloudController::ProcessModel.make( - :process, - app: app_model3, - type: 'web', - command: 'rackup' - ) + create(:process, + :process, + app: app_model3, + type: 'web', + command: 'rackup') end it_behaves_like 'list_endpoint_with_common_filters' do @@ -564,7 +561,7 @@ let(:headers) { admin_headers } let(:api_call) do app_model3.sidecars_dataset.each do |sidecar| - VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') + create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') end ->(headers, filters) { get "/v3/processes/#{process3.guid}/sidecars?#{filters}", nil, headers } end @@ -611,12 +608,12 @@ end describe 'GET /v3/apps/:app_guid/sidecars' do - let!(:sidecar1) { VCAP::CloudController::SidecarModel.make(name: 'sidecar1', app: app_model) } - let!(:sidecar1_processes) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1, type: 'one') } - let!(:sidecar2) { VCAP::CloudController::SidecarModel.make(name: 'sidecar2', app: app_model) } - let!(:sidecar2_processes) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar2, type: 'two') } - let!(:sidecar3) { VCAP::CloudController::SidecarModel.make(name: 'sidecar3', app: app_model) } - let!(:sidecar3_processes) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar3, type: 'three') } + let!(:sidecar1) { create(:sidecar_model, name: 'sidecar1', app: app_model) } + let!(:sidecar1_processes) { create(:sidecar_process_type_model, sidecar: sidecar1, type: 'one') } + let!(:sidecar2) { create(:sidecar_model, name: 'sidecar2', app: app_model) } + let!(:sidecar2_processes) { create(:sidecar_process_type_model, sidecar: sidecar2, type: 'two') } + let!(:sidecar3) { create(:sidecar_model, name: 'sidecar3', app: app_model) } + let!(:sidecar3_processes) { create(:sidecar_process_type_model, sidecar: sidecar3, type: 'three') } context 'with a user in the space' do before do @@ -693,7 +690,7 @@ it_behaves_like 'list_endpoint_with_common_filters' do let(:resource_klass) { VCAP::CloudController::SidecarModel } - let(:app_model2) { VCAP::CloudController::AppModel.make } + let(:app_model2) { create(:app_model) } let(:additional_resource_params) { { app: app_model2 } } let(:headers) { admin_headers } let(:api_call) do @@ -741,9 +738,9 @@ end describe 'DELETE /v3/sidecars/:guid' do - let!(:sidecar) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar', command: 'smarch') } - let!(:sidecar_spider) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'spider') } - let!(:sidecar_web) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') } + let!(:sidecar) { create(:sidecar_model, app: app_model, name: 'sidecar', command: 'smarch') } + let!(:sidecar_spider) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'spider') } + let!(:sidecar_web) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') } before do app_model.space.organization.add_user(user) diff --git a/spec/request/space_features_spec.rb b/spec/request/space_features_spec.rb index 94a344b3ae8..27f55dfd604 100644 --- a/spec/request/space_features_spec.rb +++ b/spec/request/space_features_spec.rb @@ -3,9 +3,9 @@ require 'controllers/v3/space_features_controller' RSpec.describe 'Space Features' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } - let(:space) { VCAP::CloudController::Space.make(allow_ssh: true) } + let(:space) { create(:space, allow_ssh: true) } let(:org) { space.organization } describe 'GET /v3/spaces/:guid/features' do diff --git a/spec/request/space_manifests_spec.rb b/spec/request/space_manifests_spec.rb index 95990d37b76..a29ad31e11a 100644 --- a/spec/request/space_manifests_spec.rb +++ b/spec/request/space_manifests_spec.rb @@ -2,24 +2,24 @@ require 'request_spec_shared_examples' RSpec.describe 'Space Manifests' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user, email: Sham.email, user_name: 'some-username') } - let(:space) { VCAP::CloudController::Space.make } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route) { VCAP::CloudController::Route.make(domain: shared_domain, space: space, host: 'a_host') } + let(:space) { create(:space) } + let(:shared_domain) { create(:shared_domain) } + let(:route) { create(:route, domain: shared_domain, space: space, host: 'a_host') } let(:second_route) do - VCAP::CloudController::Route.make(domain: shared_domain, space: space, path: '/path', host: 'b_host') + create(:route, domain: shared_domain, space: space, path: '/path', host: 'b_host') end describe 'POST /v3/spaces/:guid/actions/apply_manifest' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } - let(:service_instance_1) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:service_instance_2) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:buildpack) { create(:buildpack) } + let(:service_instance_1) { create(:managed_service_instance, space:) } + let(:service_instance_2) { create(:managed_service_instance, space:) } let(:binding_name) { Sham.name } - let(:app1_model) { VCAP::CloudController::AppModel.make(name: 'Tryggvi', space: space) } - let!(:process1) { VCAP::CloudController::ProcessModel.make(app: app1_model) } - let(:app2_model) { VCAP::CloudController::AppModel.make(name: 'Sigurlaug', space: space) } - let!(:process2) { VCAP::CloudController::ProcessModel.make(app: app2_model) } + let(:app1_model) { create(:app_model, name: 'Tryggvi', space: space) } + let!(:process1) { create(:process, app: app1_model) } + let(:app2_model) { create(:app_model, name: 'Sigurlaug', space: space) } + let!(:process2) { create(:process, app: app2_model) } let(:yml_manifest) do { 'applications' => [ @@ -221,7 +221,7 @@ context 'when the manifest contains binary-encoded URL(s) for the buildpack(s)' do context 'and it contains non-valid data' do context 'in the buildpacks section' do - let(:app1_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app1_model) { create(:app_model, space:) } let(:yml_manifest_with_binary_invalid_buildpacks) do "--- applications: @@ -240,7 +240,7 @@ end context 'in the buildpack part' do - let(:app1_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app1_model) { create(:app_model, space:) } let(:yml_manifest_with_binary_invalid_buildpack) do "--- applications: @@ -258,7 +258,7 @@ end context 'mixed with valid data for the buildpacks' do - let(:app1_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app1_model) { create(:app_model, space:) } let(:yml_manifest_with_binary_buildpacks) do "--- applications: @@ -281,7 +281,7 @@ context 'and it contains valid data' do context 'for the buildpacks' do - let(:app1_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app1_model) { create(:app_model, space:) } let(:yml_manifest_with_binary_valid_buildpacks) do "--- applications: @@ -310,7 +310,7 @@ end context 'for single buildpack' do - let(:app1_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app1_model) { create(:app_model, space:) } let(:yml_manifest_with_binary_valid_buildpack) do "--- applications: @@ -445,8 +445,8 @@ end context 'when there is an existing app with Docker lifecycle-type' do - let!(:docker_route) { VCAP::CloudController::Route.make(domain: shared_domain, space: space) } - let!(:docker_app) { VCAP::CloudController::AppModel.make(:docker, name: 'docker-app', space: space) } + let!(:docker_route) { create(:route, domain: shared_domain, space: space) } + let!(:docker_app) { create(:app_model, :docker, name: 'docker-app', space: space) } let!(:yml_manifest) do { 'applications' => [ @@ -480,7 +480,7 @@ end context 'when the app name is not a valid host name and the default-route flag is set to true' do - let(:app1_model) { VCAP::CloudController::AppModel.make(name: 'a' * 64, space: space) } + let(:app1_model) { create(:app_model, name: 'a' * 64, space: space) } let(:yml_manifest) do { 'applications' => [ @@ -606,7 +606,7 @@ before do app1_model.web_processes.first.update(state: VCAP::CloudController::ProcessModel::STARTED, instances: 4) space.update(space_quota_definition: - VCAP::CloudController::SpaceQuotaDefinition.make(organization: space.organization, log_rate_limit: 0)) + create(:space_quota_definition, organization: space.organization, log_rate_limit: 0)) end it 'successfully applies the manifest' do @@ -960,10 +960,10 @@ end describe 'POST /v3/spaces/:guid/manifest_diff' do - let(:app1_model) { VCAP::CloudController::AppModel.make(name: 'app-1', space: space) } - let!(:process1) { VCAP::CloudController::ProcessModel.make(app: app1_model) } - let!(:process2) { VCAP::CloudController::ProcessModel.make(app: app1_model, type: 'worker', memory: 2048, disk_quota: 2048) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: app1_model, process_type: process1.type, route: route) } + let(:app1_model) { create(:app_model, name: 'app-1', space: space) } + let!(:process1) { create(:process, app: app1_model) } + let!(:process2) { create(:process, app: app1_model, type: 'worker', memory: 2048, disk_quota: 2048) } + let!(:route_mapping) { create(:route_mapping_model, app: app1_model, process_type: process1.type, route: route) } let!(:default_manifest) do { 'applications' => [ diff --git a/spec/request/space_quotas_spec.rb b/spec/request/space_quotas_spec.rb index 07f844dc921..06df73d30e1 100644 --- a/spec/request/space_quotas_spec.rb +++ b/spec/request/space_quotas_spec.rb @@ -3,10 +3,10 @@ module VCAP::CloudController RSpec.describe 'space_quotas' do - let(:user) { VCAP::CloudController::User.make(guid: 'user-guid') } - let(:org) { VCAP::CloudController::Organization.make(guid: 'organization-guid') } - let!(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'space-quota-guid', organization: org) } - let(:space) { VCAP::CloudController::Space.make(guid: 'space-guid', organization: org, space_quota_definition: space_quota) } + let(:user) { create(:user, guid: 'user-guid') } + let(:org) { create(:organization, guid: 'organization-guid') } + let!(:space_quota) { create(:space_quota_definition, guid: 'space-quota-guid', organization: org) } + let(:space) { create(:space, guid: 'space-guid', organization: org, space_quota_definition: space_quota) } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } describe 'GET /v3/space_quotas/:guid' do @@ -32,7 +32,7 @@ module VCAP::CloudController context 'when the space quota has no associated spaces' do let(:api_call) { ->(user_headers) { get "/v3/space_quotas/#{unapplied_space_quota.guid}", nil, user_headers } } - let(:unapplied_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org) } + let(:unapplied_space_quota) { create(:space_quota_definition, organization: org) } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) @@ -48,8 +48,8 @@ module VCAP::CloudController context 'when the space quota is owned by an org where the current user does not have a role' do let(:api_call) { ->(user_headers) { get "/v3/space_quotas/#{other_space_quota.guid}", nil, user_headers } } - let(:other_org) { VCAP::CloudController::Organization.make } - let(:other_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: other_org) } + let(:other_org) { create(:organization) } + let(:other_space_quota) { create(:space_quota_definition, organization: other_org) } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) @@ -180,13 +180,12 @@ module VCAP::CloudController context 'update partial values' do let(:space_quota_to_update) do - VCAP::CloudController::SpaceQuotaDefinition.make( - organization: org, - guid: 'space_quota_to_update_guid', - name: 'update-me', - memory_limit: 8, - non_basic_services_allowed: true - ) + create(:space_quota_definition, + organization: org, + guid: 'space_quota_to_update_guid', + name: 'update-me', + memory_limit: 8, + non_basic_services_allowed: true) end let(:partial_params) do @@ -231,7 +230,7 @@ module VCAP::CloudController end context 'when trying to update name to a pre-existing name' do - let!(:new_space_quota) { SpaceQuotaDefinition.make(organization: org) } + let!(:new_space_quota) { create(:space_quota_definition, organization: org) } let(:params) do { @@ -263,8 +262,8 @@ module VCAP::CloudController end context 'when trying to set a log rate limit and there are apps with unlimited log rates' do - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let!(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do patch "/v3/space_quotas/#{space_quota.guid}", params.to_json, admin_header @@ -289,10 +288,10 @@ module VCAP::CloudController end context 'when listing space quotas without filters' do - let!(:unapplied_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, guid: 'unapplied-space-quota') } + let!(:unapplied_space_quota) { create(:space_quota_definition, organization: org, guid: 'unapplied-space-quota') } - let(:other_org) { VCAP::CloudController::Organization.make } - let!(:other_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: other_org, guid: 'other-space-quota') } + let(:other_org) { create(:organization) } + let!(:other_space_quota) { create(:space_quota_definition, organization: other_org, guid: 'other-space-quota') } let(:expected_codes_and_responses) do h = Hash.new({ code: 200, response_objects: [] }.freeze) @@ -338,14 +337,14 @@ module VCAP::CloudController end context 'with filters' do - let!(:space_quota_2) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'second-guid', name: 'second-name', organization: org) } - let(:space_2) { VCAP::CloudController::Space.make(guid: 'space-2-guid', organization: org, space_quota_definition: space_quota_2) } + let!(:space_quota_2) { create(:space_quota_definition, guid: 'second-guid', name: 'second-name', organization: org) } + let(:space_2) { create(:space, guid: 'space-2-guid', organization: org, space_quota_definition: space_quota_2) } - let!(:space_quota_3) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'third-guid', name: 'third-name', organization: org) } - let(:space_3) { VCAP::CloudController::Space.make(guid: 'space-3-guid', organization: org, space_quota_definition: space_quota_3) } + let!(:space_quota_3) { create(:space_quota_definition, guid: 'third-guid', name: 'third-name', organization: org) } + let(:space_3) { create(:space, guid: 'space-3-guid', organization: org, space_quota_definition: space_quota_3) } - let(:org_alien) { VCAP::CloudController::Organization.make(guid: 'organization-alien-guid') } - let!(:space_quota_alien) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'space-quota-alien-guid', organization: org_alien) } + let(:org_alien) { create(:organization, guid: 'organization-alien-guid') } + let!(:space_quota_alien) { create(:space_quota_definition, guid: 'space-quota-alien-guid', organization: org_alien) } it 'returns the list of quotas filtered by names and guids' do get "/v3/space_quotas?guids=#{space_quota.guid},second-guid&names=#{space_quota.name},third-name", nil, admin_header @@ -383,11 +382,10 @@ module VCAP::CloudController context 'when the quota is applied to spaces that are not visible to the user' do let!(:other_space) do - VCAP::CloudController::Space.make( - guid: 'other-space-guid', - organization: org, - space_quota_definition: space_quota - ) + create(:space, + guid: 'other-space-guid', + organization: org, + space_quota_definition: space_quota) end let(:expected_response) { make_space_quota_json(space_quota, [space]) } @@ -740,7 +738,7 @@ module VCAP::CloudController describe 'POST /v3/space_quotas/:guid/relationships/spaces' do let(:api_call) { ->(user_headers) { post "/v3/space_quotas/#{space_quota.guid}/relationships/spaces", params.to_json, user_headers } } - let(:other_space) { VCAP::CloudController::Space.make(organization: org, guid: 'other-space-guid') } + let(:other_space) { create(:space, organization: org, guid: 'other-space-guid') } let(:params) do { @@ -823,10 +821,10 @@ module VCAP::CloudController end context 'when the quota has a finite log rate limit and there are apps with unlimited log rates' do - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'space-quota-guid', organization: org, log_rate_limit: 100) } - let!(:other_space) { VCAP::CloudController::Space.make(guid: 'other-space-guid', organization: org, space_quota_definition: space_quota) } - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: other_space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let(:space_quota) { create(:space_quota_definition, guid: 'space-quota-guid', organization: org, log_rate_limit: 100) } + let!(:other_space) { create(:space, guid: 'other-space-guid', organization: org, space_quota_definition: space_quota) } + let!(:app_model) { create(:app_model, name: 'name1', space: other_space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do post "/v3/space_quotas/#{space_quota.guid}/relationships/spaces", params.to_json, admin_header @@ -888,7 +886,7 @@ module VCAP::CloudController end context 'when the space is not associated with the quota' do - let(:other_space) { VCAP::CloudController::Space.make(guid: 'not-related-space') } + let(:other_space) { create(:space, guid: 'not-related-space') } it 'returns a helpful error message' do delete "/v3/space_quotas/#{space_quota.guid}/relationships/spaces/#{other_space.guid}", {}, admin_header @@ -902,7 +900,7 @@ module VCAP::CloudController describe 'DELETE /v3/space_quotas/:guid' do context 'when deleting a space quota that is not applied to any spaces' do let(:api_call) { ->(user_headers) { delete "/v3/space_quotas/#{unapplied_space_quota.guid}", {}, user_headers } } - let!(:unapplied_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, guid: 'unapplied-space-quota') } + let!(:unapplied_space_quota) { create(:space_quota_definition, organization: org, guid: 'unapplied-space-quota') } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) @@ -959,7 +957,7 @@ module VCAP::CloudController end context 'when the space quota is still applied to a space' do - let!(:space) { VCAP::CloudController::Space.make(space_quota_definition: space_quota, organization: org) } + let!(:space) { create(:space, space_quota_definition: space_quota, organization: org) } let(:api_call) { ->(user_headers) { delete "/v3/space_quotas/#{space_quota.guid}", {}, user_headers } } let(:expected_codes_and_responses) do diff --git a/spec/request/spaces_spec.rb b/spec/request/spaces_spec.rb index 589028b6cb1..f2bf349ddb4 100644 --- a/spec/request/spaces_spec.rb +++ b/spec/request/spaces_spec.rb @@ -4,13 +4,13 @@ NON_SPACE_PERMISSIONS = (ALL_PERMISSIONS - %w[space_developer space_manager space_auditor space_supporter]).freeze RSpec.describe 'Spaces' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user) } let(:admin_header) { admin_headers_for(user) } - let(:org) { VCAP::CloudController::Organization.make name: 'Boardgames', created_at: 2.days.ago } - let!(:space1) { VCAP::CloudController::Space.make name: 'Catan', organization: org } - let!(:space2) { VCAP::CloudController::Space.make name: 'Ticket to Ride', organization: org } - let!(:space3) { VCAP::CloudController::Space.make name: 'Agricola', organization: org } + let(:org) { create(:organization, name: 'Boardgames', created_at: 2.days.ago) } + let!(:space1) { create(:space, name: 'Catan', organization: org) } + let!(:space2) { create(:space, name: 'Ticket to Ride', organization: org) } + let!(:space3) { create(:space, name: 'Agricola', organization: org) } before do TestConfig.override(kubernetes: {}) @@ -183,7 +183,7 @@ end context 'when the space has a quota applied to it' do - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: space1.organization) } + let(:space_quota) { create(:space_quota_definition, organization: space1.organization) } before do space1.add_developer(user) @@ -347,29 +347,29 @@ end context 'when a label_selector is provided' do - let!(:spaceA) { VCAP::CloudController::Space.make(organization: org) } - let!(:spaceAFruit) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'fruit', value: 'strawberry', space: spaceA) } - let!(:spaceAAnimal) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'horse', space: spaceA) } + let!(:spaceA) { create(:space, organization: org) } + let!(:spaceAFruit) { create(:space_label_model, key_name: 'fruit', value: 'strawberry', space: spaceA) } + let!(:spaceAAnimal) { create(:space_label_model, key_name: 'animal', value: 'horse', space: spaceA) } - let!(:spaceB) { VCAP::CloudController::Space.make(organization: org) } - let!(:spaceBEnv) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'env', value: 'prod', space: spaceB) } - let!(:spaceBAnimal) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'dog', space: spaceB) } + let!(:spaceB) { create(:space, organization: org) } + let!(:spaceBEnv) { create(:space_label_model, key_name: 'env', value: 'prod', space: spaceB) } + let!(:spaceBAnimal) { create(:space_label_model, key_name: 'animal', value: 'dog', space: spaceB) } - let!(:spaceC) { VCAP::CloudController::Space.make(organization: org) } - let!(:spaceCEnv) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'env', value: 'prod', space: spaceC) } - let!(:spaceCAnimal) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'horse', space: spaceC) } + let!(:spaceC) { create(:space, organization: org) } + let!(:spaceCEnv) { create(:space_label_model, key_name: 'env', value: 'prod', space: spaceC) } + let!(:spaceCAnimal) { create(:space_label_model, key_name: 'animal', value: 'horse', space: spaceC) } - let!(:spaceD) { VCAP::CloudController::Space.make(organization: org) } - let!(:spaceDEnv) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'env', value: 'prod', space: spaceD) } + let!(:spaceD) { create(:space, organization: org) } + let!(:spaceDEnv) { create(:space_label_model, key_name: 'env', value: 'prod', space: spaceD) } - let!(:spaceE) { VCAP::CloudController::Space.make(organization: org) } - let!(:spaceEEnv) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'env', value: 'staging', space: spaceE) } - let!(:spaceEAnimal) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'dog', space: spaceE) } + let!(:spaceE) { create(:space, organization: org) } + let!(:spaceEEnv) { create(:space_label_model, key_name: 'env', value: 'staging', space: spaceE) } + let!(:spaceEAnimal) { create(:space_label_model, key_name: 'animal', value: 'dog', space: spaceE) } - let!(:orgF) { VCAP::CloudController::Organization.make(name: 'orgF', guid: 'orgF') } - let!(:spaceF) { VCAP::CloudController::Space.make(organization: orgF, guid: 'spaceF') } - let!(:spaceFEnv) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'env', value: 'prod', space: spaceF) } - let!(:spaceFAnimal) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'cat', space: spaceF) } + let!(:orgF) { create(:organization, name: 'orgF', guid: 'orgF') } + let!(:spaceF) { create(:space, organization: orgF, guid: 'spaceF') } + let!(:spaceFEnv) { create(:space_label_model, key_name: 'env', value: 'prod', space: spaceF) } + let!(:spaceFAnimal) { create(:space_label_model, key_name: 'animal', value: 'cat', space: spaceF) } it 'returns the correct spaces' do get '/v3/spaces?label_selector=!fruit,env=prod,animal in (dog,horse)', nil, admin_header @@ -390,8 +390,8 @@ context('including org') do # space with org1 - let!(:other_org_space) { VCAP::CloudController::Space.make name: 'Agricola', organization: org2 } - let!(:org2) { VCAP::CloudController::Organization.make name: 'Videogames', created_at: 1.day.ago } + let!(:other_org_space) { create(:space, name: 'Agricola', organization: org2) } + let!(:org2) { create(:organization, name: 'Videogames', created_at: 1.day.ago) } it 'can includes all orgs for spaces' do get '/v3/spaces?include=organization', nil, admin_header @@ -501,9 +501,9 @@ end describe 'GET /v3/spaces/:space_guid/staging_security_groups' do - let!(:space) { VCAP::CloudController::Space.make } + let!(:space) { create(:space) } let!(:org) { space.organization } - let(:security_group) { VCAP::CloudController::SecurityGroup.make name: 'my_super_sec_group' } + let(:security_group) { create(:security_group, name: 'my_super_sec_group') } before do security_group.add_staging_space(space) @@ -546,7 +546,7 @@ } }] end - let(:other_sec_group) { VCAP::CloudController::SecurityGroup.make } + let(:other_sec_group) { create(:security_group) } it 'returns the filtered list' do get "/v3/spaces/#{space.guid}/staging_security_groups?names=my_super_sec_group", nil, admin_header @@ -633,8 +633,8 @@ ] end - let(:unaffiliated_sec_group) { VCAP::CloudController::SecurityGroup.make } - let(:global_sec_group) { VCAP::CloudController::SecurityGroup.make staging_default: true, name: 'global' } + let(:unaffiliated_sec_group) { create(:security_group) } + let(:global_sec_group) { create(:security_group, staging_default: true, name: 'global') } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) @@ -654,9 +654,9 @@ end describe 'GET /v3/spaces/:space_guid/running_security_groups' do - let!(:space) { VCAP::CloudController::Space.make } + let!(:space) { create(:space) } let!(:org) { space.organization } - let(:security_group) { VCAP::CloudController::SecurityGroup.make name: 'my_super_sec_group' } + let(:security_group) { create(:security_group, name: 'my_super_sec_group') } before do security_group.add_space(space) @@ -699,7 +699,7 @@ } }] end - let(:other_sec_group) { VCAP::CloudController::SecurityGroup.make } + let(:other_sec_group) { create(:security_group) } it 'returns the filtered list' do get "/v3/spaces/#{space.guid}/running_security_groups?names=my_super_sec_group", nil, admin_header @@ -786,8 +786,8 @@ ] end - let(:unaffiliated_sec_group) { VCAP::CloudController::SecurityGroup.make } - let(:global_sec_group) { VCAP::CloudController::SecurityGroup.make running_default: true, name: 'global' } + let(:unaffiliated_sec_group) { create(:security_group) } + let(:global_sec_group) { create(:security_group, running_default: true, name: 'global') } let(:expected_codes_and_responses) do h = Hash.new({ code: 404 }.freeze) h['admin'] = { code: 200, response_objects: response_object } @@ -807,8 +807,8 @@ describe 'PATCH /v3/spaces/:guid' do context 'updating the space to a duplicate name' do - let(:space1) { VCAP::CloudController::Space.make(name: 'space1', organization: org) } - let!(:space2) { VCAP::CloudController::Space.make(name: 'space2', organization: org) } + let(:space1) { create(:space, name: 'space1', organization: org) } + let!(:space2) { create(:space, name: 'space2', organization: org) } it 'returns a 422 with a helpful error message' do patch "/v3/spaces/#{space1.guid}", { name: 'space2' }.to_json, admin_header @@ -819,7 +819,7 @@ end context 'updates the requested space' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } request_body = { @@ -926,8 +926,8 @@ end context 'removing labels' do - let!(:space1Label) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'fruit', value: 'mango', space: space1) } - let!(:space1Label) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'animal', value: 'monkey', space: space1) } + let!(:space1Label) { create(:space_label_model, key_name: 'fruit', value: 'mango', space: space1) } + let!(:space1Label) { create(:space_label_model, key_name: 'animal', value: 'monkey', space: space1) } it 'removes a label from a space when the value is set to null' do patch "/v3/spaces/#{space1.guid}", { metadata: { labels: { fruit: nil } } }.to_json, admin_header @@ -961,7 +961,7 @@ end context 'updating labels' do - let!(:space1_label) { VCAP::CloudController::SpaceLabelModel.make(key_name: 'fruit', value: 'mango', space: space1) } + let!(:space1_label) { create(:space_label_model, key_name: 'fruit', value: 'mango', space: space1) } it 'Updates the spaces label' do patch "/v3/spaces/#{space1.guid}", { metadata: { labels: { fruit: 'strawberry' } } }.to_json, admin_header @@ -996,22 +996,22 @@ end describe 'DELETE /v3/spaces/:guid' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:associated_user) { VCAP::CloudController::User.make(default_space: space) } + let(:associated_user) { create(:user, default_space: space) } let(:shared_service_instance) do - s = VCAP::CloudController::ServiceInstance.make + s = create(:service_instance) s.add_shared_space(space) s end before do - VCAP::CloudController::AppModel.make(space:) - VCAP::CloudController::Route.make(space:) + create(:app_model, space:) + create(:route, space:) org.add_user(associated_user) space.add_developer(associated_user) - VCAP::CloudController::ServiceInstance.make(space:) - VCAP::CloudController::ServiceBroker.make(space:) + create(:service_instance, space:) + create(:service_broker, space:) end let(:db_check) do @@ -1104,13 +1104,13 @@ end describe 'DELETE /v3/spaces/:guid/routes?unmapped=true' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } - let!(:unmapped_route) { VCAP::CloudController::Route.make(space:, domain:) } - let!(:mapped_route) { VCAP::CloudController::Route.make(space: space, domain: domain, host: 'mapped') } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let!(:destination) { VCAP::CloudController::RouteMappingModel.make(route: mapped_route, app: app_model) } + let(:domain) { create(:private_domain, owning_organization: org) } + let!(:unmapped_route) { create(:route, space:, domain:) } + let!(:mapped_route) { create(:route, space: space, domain: domain, host: 'mapped') } + let(:app_model) { create(:app_model, space:) } + let!(:destination) { create(:route_mapping_model, route: mapped_route, app: app_model) } let(:api_call) { ->(user_headers) { delete "/v3/spaces/#{space.guid}/routes?unmapped=true", nil, user_headers } } @@ -1169,9 +1169,9 @@ end describe 'GET /v3/spaces/:guid/relationships/isolation_segment' do - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'seg') } - let(:org) { VCAP::CloudController::Organization.make(name: 'iso farm') } - let(:space) { VCAP::CloudController::Space.make name: 'space', organization: org } + let(:isolation_segment) { create(:isolation_segment_model, name: 'seg') } + let(:org) { create(:organization, name: 'iso farm') } + let(:space) { create(:space, name: 'space', organization: org) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } before do @@ -1232,9 +1232,9 @@ end describe 'PATCH /v3/spaces/:guid/relationships/isolation_segment' do - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'seg') } - let(:org) { VCAP::CloudController::Organization.make(name: 'iso farm') } - let(:space) { VCAP::CloudController::Space.make name: 'space', organization: org } + let(:isolation_segment) { create(:isolation_segment_model, name: 'seg') } + let(:org) { create(:organization, name: 'iso farm') } + let(:space) { create(:space, name: 'space', organization: org) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } before do @@ -1267,7 +1267,7 @@ describe 'GET /v3/spaces/:guid/users' do let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } - let(:client) { VCAP::CloudController::User.make(guid: 'client-user') } + let(:client) { create(:user, guid: 'client-user') } context 'filters' do before do @@ -1359,8 +1359,8 @@ end context 'by usernames and origins' do - let(:user_in_different_origin) { VCAP::CloudController::User.make(guid: 'user_in_different_origin') } - let(:user_with_different_username) { VCAP::CloudController::User.make(guid: 'user_with_different_username') } + let(:user_in_different_origin) { create(:user, guid: 'user_in_different_origin') } + let(:user_with_different_username) { create(:user, guid: 'user_with_different_username') } before do org.add_user(user_in_different_origin) @@ -1396,7 +1396,7 @@ end context 'by labels' do - let!(:user_label) { VCAP::CloudController::UserLabelModel.make(resource_guid: user.guid, key_name: 'animal', value: 'dog') } + let!(:user_label) { create(:user_label_model, resource_guid: user.guid, key_name: 'animal', value: 'dog') } it 'returns a 200 and the filtered users for "in" label selector' do get "/v3/spaces/#{space1.guid}/users?label_selector=animal in (dog)", nil, admin_header @@ -1418,10 +1418,10 @@ # normally this would be under request_spec_shared_examples; we copy it here because this test brings up issues with UAA context 'by timestamps on creation' do - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', created_at: '2020-05-26T18:47:04Z') } before do org.add_user(resource_1) @@ -1449,10 +1449,10 @@ allow(uaa_client).to receive(:users_for_ids).and_return({}) end - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', updated_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', updated_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', updated_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', updated_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', updated_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', updated_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', updated_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', updated_at: '2020-05-26T18:47:04Z') } after do VCAP::CloudController::User.plugin :timestamps, update_on_create: true diff --git a/spec/request/stacks_spec.rb b/spec/request/stacks_spec.rb index 644ce145ea7..acff9384930 100644 --- a/spec/request/stacks_spec.rb +++ b/spec/request/stacks_spec.rb @@ -4,8 +4,8 @@ RSpec.describe 'Stacks Request' do let(:stack_config_file) { File.join(Paths::FIXTURES, 'config/stacks.yml') } let(:default_stack_name) { 'default-stack-name' } - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } before { VCAP::CloudController::Stack.configure(stack_config_file) } @@ -62,8 +62,8 @@ let(:expected_codes_and_responses) do Hash.new({ code: 200, response_objects: stacks_response_objects }.freeze) end - let!(:stack1) { VCAP::CloudController::Stack.make } - let!(:stack2) { VCAP::CloudController::Stack.make(name: default_stack_name) } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack, name: default_stack_name) } end end @@ -92,13 +92,13 @@ updated_ats: { gt: Time.now.utc.iso8601 } } end - let!(:stack) { VCAP::CloudController::Stack.make(name: default_stack_name) } + let!(:stack) { create(:stack, name: default_stack_name) } end context 'When stacks exist' do - let!(:stack1) { VCAP::CloudController::Stack.make } - let!(:stack2) { VCAP::CloudController::Stack.make(name: default_stack_name) } - let!(:stack3) { VCAP::CloudController::Stack.make } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack, name: default_stack_name) } + let!(:stack3) { create(:stack) } it 'returns a paginated list of stacks' do get '/v3/stacks?page=1&per_page=2', nil, user_header @@ -263,18 +263,16 @@ context 'when there are labels' do let!(:stack1_label) do - VCAP::CloudController::StackLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: stack1.guid - ) + create(:stack_label_model, + key_name: 'release', + value: 'stable', + resource_guid: stack1.guid) end let!(:stack2_label) do - VCAP::CloudController::StackLabelModel.make( - key_name: 'release', - value: 'unstable', - resource_guid: stack2.guid - ) + create(:stack_label_model, + key_name: 'release', + value: 'unstable', + resource_guid: stack2.guid) end it 'returns a list of label filtered stacks' do @@ -331,7 +329,7 @@ let(:user) { make_user } let(:user_header) { headers_for(user) } let(:api_call) { ->(user_header) { get "/v3/stacks/#{stack.guid}", nil, user_header } } - let!(:stack) { VCAP::CloudController::Stack.make } + let!(:stack) { create(:stack) } let(:stacks_response_object) do { 'name' => stack.name, @@ -362,16 +360,15 @@ describe 'GET /v3/stacks/:guid/apps' do let(:user) { make_user } let(:headers) { headers_for(user) } - let!(:stack) { VCAP::CloudController::Stack.make(name: 'stack-name') } - let!(:buildpack) { VCAP::CloudController::Buildpack.make(name: 'bp-name') } - let!(:space2) { VCAP::CloudController::Space.make } - let!(:app_model1) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:app_model2) { VCAP::CloudController::AppModel.make(name: 'name2', space: space2) } + let!(:stack) { create(:stack, name: 'stack-name') } + let!(:buildpack) { create(:buildpack, name: 'bp-name') } + let!(:space2) { create(:space) } + let!(:app_model1) { create(:app_model, name: 'name1', space: space) } + let!(:app_model2) { create(:app_model, name: 'name2', space: space2) } let!(:app_model3) do - VCAP::CloudController::AppModel.make( - :docker, - name: 'name2' - ) + create(:app_model, + :docker, + name: 'name2') end before do @@ -705,7 +702,7 @@ let(:name) { 'the-name' } before do - VCAP::CloudController::Stack.make name: + create(:stack, name:) end it 'responds with 422' do @@ -718,7 +715,7 @@ describe 'PATCH /v3/stacks/:guid' do let(:user) { make_user(admin: true) } - let(:stack) { VCAP::CloudController::Stack.make } + let(:stack) { create(:stack) } let(:request_body) do { metadata: { @@ -771,7 +768,7 @@ describe 'DELETE /v3/stacks/:guid' do let(:user) { make_user(admin: true) } let(:headers) { admin_headers_for(user) } - let(:stack) { VCAP::CloudController::Stack.make } + let(:stack) { create(:stack) } it 'destroys the stack' do delete "/v3/stacks/#{stack.guid}", {}, headers diff --git a/spec/request/stacks_state_spec.rb b/spec/request/stacks_state_spec.rb index 9959e16909e..c194e9c4090 100644 --- a/spec/request/stacks_state_spec.rb +++ b/spec/request/stacks_state_spec.rb @@ -129,7 +129,7 @@ end describe 'PATCH /v3/stacks/:guid with state' do - let!(:stack) { VCAP::CloudController::Stack.make(name: 'test-stack', state: 'ACTIVE') } + let!(:stack) { create(:stack, name: 'test-stack', state: 'ACTIVE') } context 'when updating state through lifecycle' do it 'transitions from ACTIVE to DEPRECATED' do @@ -295,7 +295,7 @@ end describe 'GET /v3/stacks/:guid' do - let!(:deprecated_stack) { VCAP::CloudController::Stack.make(state: 'DEPRECATED') } + let!(:deprecated_stack) { create(:stack, state: 'DEPRECATED') } let(:reader_user) { make_user } let(:reader_headers) { headers_for(reader_user) } @@ -308,10 +308,9 @@ context 'when stack has state_reason' do let!(:stack_with_reason) do - VCAP::CloudController::Stack.make( - state: 'DEPRECATED', - state_reason: 'EOL on 2026-12-31' - ) + create(:stack, + state: 'DEPRECATED', + state_reason: 'EOL on 2026-12-31') end it 'returns state_reason in response' do @@ -325,7 +324,7 @@ context 'when stack has no state_reason' do let!(:stack_without_reason) do - VCAP::CloudController::Stack.make(state: 'ACTIVE', state_reason: nil) + create(:stack, state: 'ACTIVE', state_reason: nil) end it 'returns null state_reason in response' do @@ -341,10 +340,10 @@ describe 'GET /v3/stacks' do before { VCAP::CloudController::Stack.dataset.destroy } - let!(:active_stack) { VCAP::CloudController::Stack.make(name: 'active', state: 'ACTIVE') } - let!(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'deprecated', state: 'DEPRECATED', state_reason: 'Deprecated reason') } - let!(:restricted_stack) { VCAP::CloudController::Stack.make(name: 'restricted', state: 'RESTRICTED') } - let!(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'disabled', state: 'DISABLED', state_reason: 'Disabled reason') } + let!(:active_stack) { create(:stack, name: 'active', state: 'ACTIVE') } + let!(:deprecated_stack) { create(:stack, name: 'deprecated', state: 'DEPRECATED', state_reason: 'Deprecated reason') } + let!(:restricted_stack) { create(:stack, name: 'restricted', state: 'RESTRICTED') } + let!(:disabled_stack) { create(:stack, name: 'disabled', state: 'DISABLED', state_reason: 'Disabled reason') } let(:reader_user) { make_user } let(:reader_headers) { headers_for(reader_user) } diff --git a/spec/request/tasks_spec.rb b/spec/request/tasks_spec.rb index 8fa34e57a70..f4d3e980a98 100644 --- a/spec/request/tasks_spec.rb +++ b/spec/request/tasks_spec.rb @@ -2,20 +2,19 @@ require 'request_spec_shared_examples' RSpec.describe 'Tasks' do - let(:org_quota_definition) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: org_log_rate_limit) } - let(:space_quota_definition) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, log_rate_limit: space_log_rate_limit) } + let(:org_quota_definition) { create(:quota_definition, log_rate_limit: org_log_rate_limit) } + let(:space_quota_definition) { create(:space_quota_definition, organization: org, log_rate_limit: space_log_rate_limit) } let(:space_log_rate_limit) { -1 } let(:org_log_rate_limit) { -1 } let(:task_log_rate_limit_in_bytes_per_second) { -1 } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make(quota_definition: org_quota_definition) } - let(:space) { VCAP::CloudController::Space.make(space_quota_definition: space_quota_definition, organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } + let(:user) { create(:user) } + let(:org) { create(:organization, quota_definition: org_quota_definition) } + let(:space) { create(:space, space_quota_definition: space_quota_definition, organization: org) } + let(:app_model) { create(:app_model, space: space) } let(:droplet) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app_guid: app_model.guid, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end let(:developer_headers) { headers_for(user, email: user_email, user_name: user_name) } let(:user_email) { 'user@email.example.com' } @@ -23,7 +22,7 @@ let(:bbs_task_client) { instance_double(VCAP::CloudController::Diego::BbsTaskClient) } before do - VCAP::CloudController::FeatureFlag.make(name: 'task_creation', enabled: true, error_message: nil) + create(:feature_flag, name: 'task_creation', enabled: true, error_message: nil) app_model.droplet = droplet app_model.save end @@ -100,29 +99,26 @@ let(:user) { make_developer_for_space(space) } it 'returns a paginated list of tasks' do - task1 = VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - user: 'TestUser', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - disk_in_mb: 10, - log_rate_limit: 20 - ) - task2 = VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 100, - disk_in_mb: 500, - log_rate_limit: 1024 - ) - VCAP::CloudController::TaskModel.make( - app_guid: app_model.guid, - droplet: app_model.droplet - ) + task1 = create(:task_model, + name: 'task one', + command: 'echo task', + user: 'TestUser', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + disk_in_mb: 10, + log_rate_limit: 20) + task2 = create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 100, + disk_in_mb: 500, + log_rate_limit: 1024) + create(:task_model, + app_guid: app_model.guid, + droplet: app_model.droplet) get '/v3/tasks?per_page=2', nil, developer_headers @@ -213,25 +209,23 @@ it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get '/v3/tasks', nil, user_headers } } let(:task1) do - VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - user: 'TestUser', - app_guid: app_model.guid, - droplet: app_model.droplet - ) + create(:task_model, + name: 'task one', + command: 'echo task', + user: 'TestUser', + app_guid: app_model.guid, + droplet: app_model.droplet) end let(:task2) do - VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - disk_in_mb: 10, - log_rate_limit: 20 - ) + create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + disk_in_mb: 10, + log_rate_limit: 20) end let(:expected_response) do @@ -319,27 +313,24 @@ let(:user) { make_developer_for_space(space) } it 'returns a paginated list of tasks' do - task1 = VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE - ) - task2 = VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 100 - ) - VCAP::CloudController::TaskModel.make( - app_guid: app_model.guid, - droplet: app_model.droplet - ) - VCAP::CloudController::TaskLabelModel.make(key_name: 'boomerang', value: 'gel', task: task1) - VCAP::CloudController::TaskLabelModel.make(key_name: 'boomerang', value: 'gunnison', task: task2) + task1 = create(:task_model, + name: 'task one', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE) + task2 = create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 100) + create(:task_model, + app_guid: app_model.guid, + droplet: app_model.droplet) + create(:task_label_model, key_name: 'boomerang', value: 'gel', task: task1) + create(:task_label_model, key_name: 'boomerang', value: 'gunnison', task: task2) query = { app_guids: app_model.guid, @@ -373,27 +364,24 @@ end it 'filters by label selectors' do - task1 = VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE - ) - VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 100 - ) - VCAP::CloudController::TaskModel.make( - app_guid: app_model.guid, - droplet: app_model.droplet - ) - - VCAP::CloudController::TaskLabelModel.make(key_name: 'boomerang', value: 'gel', task: task1) + task1 = create(:task_model, + name: 'task one', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE) + create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 100) + create(:task_model, + app_guid: app_model.guid, + droplet: app_model.droplet) + + create(:task_label_model, key_name: 'boomerang', value: 'gel', task: task1) get '/v3/tasks?label_selector=boomerang=gel', {}, developer_headers @@ -419,15 +407,14 @@ describe 'GET /v3/tasks/:guid' do it_behaves_like 'permissions for single object endpoint', ALL_PERMISSIONS do let(:task) do - VCAP::CloudController::TaskModel.make( - name: 'task', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - disk_in_mb: 50, - log_rate_limit: 64 - ) + create(:task_model, + name: 'task', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + disk_in_mb: 50, + log_rate_limit: 64) end let(:api_call) { ->(user_headers) { get "/v3/tasks/#{task.guid}", nil, user_headers } } let(:expected_response) do @@ -484,7 +471,7 @@ end it 'returns a json representation of the task with the requested guid' do - task = VCAP::CloudController::TaskModel.make name: 'task', command: 'echo task', app_guid: app_model.guid + task = create(:task_model, name: 'task', command: 'echo task', app: app_model) put "/v3/tasks/#{task.guid}/cancel", nil, developer_headers @@ -516,15 +503,14 @@ describe 'PATCH /v3/tasks/:guid' do let(:user) { make_developer_for_space(space) } let(:task) do - VCAP::CloudController::TaskModel.make( - name: 'task', - command: 'echo task', - app_guid: app_model.guid, - droplet_guid: app_model.droplet.guid, - disk_in_mb: 50, - memory_in_mb: 5, - log_rate_limit: 10 - ) + create(:task_model, + name: 'task', + command: 'echo task', + app_guid: app_model.guid, + droplet_guid: app_model.droplet.guid, + disk_in_mb: 50, + memory_in_mb: 5, + log_rate_limit: 10) end let(:request_body) do { @@ -621,7 +607,7 @@ end describe 'POST /v3/tasks/:guid/actions/cancel' do - let(:task) { VCAP::CloudController::TaskModel.make name: 'task', command: 'echo task', app_guid: app_model.guid } + let(:task) { create(:task_model, name: 'task', command: 'echo task', app: app_model) } let(:api_call) { ->(user_headers) { post "/v3/tasks/#{task.guid}/actions/cancel", nil, user_headers } } let(:expected_response) do { @@ -705,28 +691,25 @@ let(:user) { make_developer_for_space(space) } it 'returns a paginated list of tasks' do - task1 = VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - disk_in_mb: 50, - log_rate_limit: 64 - ) - task2 = VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 100, - disk_in_mb: 500, - log_rate_limit: 256 - ) - VCAP::CloudController::TaskModel.make( - app_guid: app_model.guid, - droplet: app_model.droplet - ) + task1 = create(:task_model, + name: 'task one', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + disk_in_mb: 50, + log_rate_limit: 64) + task2 = create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 100, + disk_in_mb: 500, + log_rate_limit: 256) + create(:task_model, + app_guid: app_model.guid, + droplet: app_model.droplet) get "/v3/apps/#{app_model.guid}/tasks?per_page=2", nil, developer_headers @@ -822,23 +805,21 @@ it_behaves_like 'permissions for list endpoint', ALL_PERMISSIONS do let(:api_call) { ->(user_headers) { get "/v3/apps/#{app_model.guid}/tasks", nil, user_headers } } let(:task1) do - VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet - ) + create(:task_model, + name: 'task one', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet) end let(:task2) do - VCAP::CloudController::TaskModel.make( - name: 'task two', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5, - disk_in_mb: 10 - ) + create(:task_model, + name: 'task two', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5, + disk_in_mb: 10) end let(:expected_response) do @@ -923,13 +904,12 @@ describe 'perms' do it 'exlcudes secrets when the user should not see them' do - VCAP::CloudController::TaskModel.make( - name: 'task one', - command: 'echo task', - app_guid: app_model.guid, - droplet: app_model.droplet, - memory_in_mb: 5 - ) + create(:task_model, + name: 'task one', + command: 'echo task', + app_guid: app_model.guid, + droplet: app_model.droplet, + memory_in_mb: 5) get "/v3/apps/#{app_model.guid}/tasks", nil, headers_for(make_auditor_for_space(space)) @@ -942,8 +922,8 @@ let(:user) { make_developer_for_space(space) } it 'filters by name' do - expected_task = VCAP::CloudController::TaskModel.make(name: 'task one', app: app_model) - VCAP::CloudController::TaskModel.make(name: 'task two', app: app_model) + expected_task = create(:task_model, name: 'task one', app: app_model) + create(:task_model, name: 'task two', app: app_model) query = { names: 'task one' } @@ -968,8 +948,8 @@ end it 'filters by state' do - expected_task = VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE, app: app_model) - VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::FAILED_STATE, app: app_model) + expected_task = create(:task_model, state: VCAP::CloudController::TaskModel::SUCCEEDED_STATE, app: app_model) + create(:task_model, state: VCAP::CloudController::TaskModel::FAILED_STATE, app: app_model) query = { states: 'SUCCEEDED' } @@ -994,8 +974,8 @@ end it 'filters by sequence_id' do - expected_task = VCAP::CloudController::TaskModel.make(app: app_model) - VCAP::CloudController::TaskModel.make(app: app_model) + expected_task = create(:task_model, app: app_model) + create(:task_model, app: app_model) query = { sequence_ids: expected_task.sequence_id } @@ -1195,10 +1175,9 @@ context 'when requesting a specific droplet' do let(:non_assigned_droplet) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app_guid: app_model.guid, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end it 'uses the requested droplet' do @@ -1222,7 +1201,7 @@ end context 'when the client specifies a template' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app_model, command: 'start', user: 'TestUser') } + let(:process) { create(:process, app: app_model, command: 'start', user: 'TestUser') } it 'uses the command from the template process' do body = { diff --git a/spec/request/users_spec.rb b/spec/request/users_spec.rb index bf15263c0ca..ac4e31930af 100644 --- a/spec/request/users_spec.rb +++ b/spec/request/users_spec.rb @@ -2,10 +2,10 @@ require 'request_spec_shared_examples' RSpec.describe 'Users Request' do - let(:actee) { VCAP::CloudController::User.make(guid: actee_guid) } - let(:user) { VCAP::CloudController::User.make(guid: 'user') } - let(:client) { VCAP::CloudController::User.make(guid: 'client-user') } - let(:space) { VCAP::CloudController::Space.make } + let(:actee) { create(:user, guid: actee_guid) } + let(:user) { create(:user, guid: 'user') } + let(:client) { create(:user, guid: 'client-user') } + let(:space) { create(:space) } let(:org) { space.organization } let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } @@ -264,8 +264,8 @@ end context 'when filtering by usernames and origins' do - let(:user_in_different_origin) { VCAP::CloudController::User.make(guid: 'user_in_different_origin') } - let(:user_with_different_username) { VCAP::CloudController::User.make(guid: 'user_in_different_origin') } + let(:user_in_different_origin) { create(:user, guid: 'user_in_different_origin') } + let(:user_with_different_username) { create(:user, guid: 'user_in_different_origin') } let(:endpoint) { '/v3/users?usernames=bob-mcjames&origins=Okta' } let(:api_call) { ->(user_headers) { get endpoint, nil, user_headers } } let(:user_in_different_origin_json) do @@ -360,9 +360,9 @@ end context 'when filtering by labels' do - let!(:user_label) { VCAP::CloudController::UserLabelModel.make(resource_guid: user.guid, key_name: 'animal', value: 'dog') } + let!(:user_label) { create(:user_label_model, resource_guid: user.guid, key_name: 'animal', value: 'dog') } - let!(:actee_label) { VCAP::CloudController::UserLabelModel.make(resource_guid: actee.guid, key_name: 'animal', value: 'cow') } + let!(:actee_label) { create(:user_label_model, resource_guid: actee.guid, key_name: 'animal', value: 'cow') } it 'returns a 200 and the filtered routes for "in" label selector' do get '/v3/users?label_selector=animal in (dog)', nil, admin_header @@ -390,10 +390,10 @@ allow(uaa_client).to receive(:users_for_ids).and_return({}) end - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', created_at: '2020-05-26T18:47:04Z') } it 'filters' do get "/v3/users?created_ats[lt]=#{resource_3.created_at.iso8601}", nil, admin_headers @@ -413,10 +413,10 @@ allow(uaa_client).to receive(:users_for_ids).and_return({}) end - let!(:resource_1) { VCAP::CloudController::User.make(guid: '1', updated_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::User.make(guid: '2', updated_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::User.make(guid: '3', updated_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::User.make(guid: '4', updated_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:user, guid: '1', updated_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:user, guid: '2', updated_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:user, guid: '3', updated_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:user, guid: '4', updated_at: '2020-05-26T18:47:04Z') } after do VCAP::CloudController::User.plugin :timestamps, update_on_create: true @@ -530,7 +530,7 @@ end context 'when the user has a guid with strange characters' do - let(:weird_user) { VCAP::CloudController::User.make(guid: 'weird-/(%)') } + let(:weird_user) { create(:user, guid: 'weird-/(%)') } before do allow(uaa_client).to receive(:users_for_ids).with([weird_user.guid]).and_return({}) @@ -846,7 +846,7 @@ end context 'with an existing user' do - let!(:existing_user) { VCAP::CloudController::User.make } + let!(:existing_user) { create(:user) } let(:params) do { @@ -1157,7 +1157,7 @@ end describe 'DELETE /v3/users/:guid' do - let(:user_to_delete) { VCAP::CloudController::User.make } + let(:user_to_delete) { create(:user) } let(:api_call) { ->(user_headers) { delete "/v3/users/#{user_to_delete.guid}", nil, user_headers } } let(:db_check) do lambda do diff --git a/spec/request/v2/apps_spec.rb b/spec/request/v2/apps_spec.rb index a3233e90b77..9dc794c79e3 100644 --- a/spec/request/v2/apps_spec.rb +++ b/spec/request/v2/apps_spec.rb @@ -2,8 +2,8 @@ require 'diego/lrp_constants' RSpec.describe 'Apps' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:build_client) { instance_double(HTTPClient, post: nil) } before do @@ -15,10 +15,9 @@ describe 'GET /v2/apps' do let(:shared_app_model) do - VCAP::CloudController::AppModel.make( - space: space, - environment_variables: { 'RAILS_ENV' => 'staging' } - ) + create(:app_model, + space: space, + environment_variables: { 'RAILS_ENV' => 'staging' }) end let!(:process) do VCAP::CloudController::ProcessModelFactory.make(:unstaged, @@ -112,25 +111,22 @@ let(:one_day_from_now) { 1.day.from_now } let!(:newer_web_process) do - VCAP::CloudController::ProcessModel.make( - app: shared_app_model, - created_at: one_day_from_now, - guid: 'newer_web_process-for-same-app' - ) + create(:process, + app: shared_app_model, + created_at: one_day_from_now, + guid: 'newer_web_process-for-same-app') end let!(:newer_web_process_same_time) do - VCAP::CloudController::ProcessModel.make( - app: shared_app_model, - created_at: one_day_from_now, - guid: 'newer_web_process-for-same-app-same-time' - ) + create(:process, + app: shared_app_model, + created_at: one_day_from_now, + guid: 'newer_web_process-for-same-app-same-time') end let!(:web_process_for_different_app) do VCAP::CloudController::ProcessModelFactory.make(:unstaged, - app: VCAP::CloudController::AppModel.make( - space: space, - environment_variables: { 'RAILS_ENV' => 'staging' } - ), + app: create(:app_model, + space: space, + environment_variables: { 'RAILS_ENV' => 'staging' }), command: 'hello_world', health_check_type: 'http', health_check_http_endpoint: '/health', @@ -150,10 +146,9 @@ context 'pagination' do let!(:another_new_process) do VCAP::CloudController::ProcessModelFactory.make(:unstaged, - app: VCAP::CloudController::AppModel.make( - space: space, - environment_variables: { 'RAILS_ENV' => 'staging' } - ), + app: create(:app_model, + space: space, + environment_variables: { 'RAILS_ENV' => 'staging' }), guid: 'another_new_process-guid', command: 'hello_world', health_check_type: 'http', @@ -177,11 +172,10 @@ context 'when there is one web and a non-web process' do let!(:worker_process) do - VCAP::CloudController::ProcessModel.make( - app: shared_app_model, - created_at: 2.days.ago, - type: 'worker' - ) + create(:process, + app: shared_app_model, + created_at: 2.days.ago, + type: 'worker') end it 'does not filter out the web process even if it is older than the worker process' do @@ -193,9 +187,9 @@ context 'with inline-relations-depth' do it 'includes related records' do - route = VCAP::CloudController::Route.make(space:) - VCAP::CloudController::RouteMappingModel.make(app: process.app, route: route, process_type: process.type) - service_binding = VCAP::CloudController::ServiceBinding.make(app: process.app, service_instance: VCAP::CloudController::ManagedServiceInstance.make(space:)) + route = create(:route, space:) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) + service_binding = create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space:)) get '/v2/apps?inline-relations-depth=1', nil, headers_for(user) expect(last_response.status).to eq(200) @@ -416,11 +410,9 @@ describe 'GET /v2/apps/:guid' do let!(:process) do - VCAP::CloudController::ProcessModelFactory.make( - space: space, - name: 'app-name', - command: 'app-command' - ) + VCAP::CloudController::ProcessModelFactory.make(space: space, + name: 'app-name', + command: 'app-command') end it 'displays the app' do @@ -492,7 +484,7 @@ describe 'POST /v2/apps' do it 'creates an app' do - stack = VCAP::CloudController::Stack.make + stack = create(:stack) post_params = Oj.dump({ name: 'maria', space_guid: space.guid, @@ -590,7 +582,7 @@ end let(:post_params) do - stack = VCAP::CloudController::Stack.make + stack = create(:stack) { name: 'maria', space_guid: space.guid, @@ -692,7 +684,7 @@ describe 'stack state validation' do context 'when stack is DISABLED' do - let(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'disabled-stack', state: 'DISABLED') } + let(:disabled_stack) { create(:stack, name: 'disabled-stack', state: 'DISABLED') } it 'returns 422 with error message' do post_params = Oj.dump({ @@ -710,7 +702,7 @@ end context 'when stack is RESTRICTED' do - let(:restricted_stack) { VCAP::CloudController::Stack.make(name: 'restricted-stack', state: 'RESTRICTED') } + let(:restricted_stack) { create(:stack, name: 'restricted-stack', state: 'RESTRICTED') } it 'returns 422 with error message for new apps' do post_params = Oj.dump({ @@ -728,7 +720,7 @@ end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'deprecated-stack', state: 'DEPRECATED') } + let(:deprecated_stack) { create(:stack, name: 'deprecated-stack', state: 'DEPRECATED') } it 'creates the app with warnings in X-Cf-Warnings header' do post_params = Oj.dump({ @@ -747,7 +739,7 @@ end context 'when stack is ACTIVE' do - let(:active_stack) { VCAP::CloudController::Stack.make(name: 'active-stack', state: 'ACTIVE') } + let(:active_stack) { create(:stack, name: 'active-stack', state: 'ACTIVE') } it 'creates the app without warnings' do post_params = Oj.dump({ @@ -767,12 +759,10 @@ describe 'PUT /v2/apps/:guid' do let!(:process) do - VCAP::CloudController::ProcessModelFactory.make( - space: space, - name: 'mario', - environment_json: { 'RAILS_ENV' => 'staging' }, - command: 'hello_world' - ) + VCAP::CloudController::ProcessModelFactory.make(space: space, + name: 'mario', + environment_json: { 'RAILS_ENV' => 'staging' }, + command: 'hello_world') end let(:update_params) do Oj.dump({ @@ -1006,12 +996,12 @@ before do allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:validate_process) allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:stager_for_build).and_return(stager) - VCAP::CloudController::Buildpack.make - VCAP::CloudController::PackageModel.make(app: process.app, state: VCAP::CloudController::PackageModel::READY_STATE) + create(:buildpack) + create(:package_model, app: process.app, state: VCAP::CloudController::PackageModel::READY_STATE) end context 'when stack is DISABLED' do - let(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } + let(:disabled_stack) { create(:stack, name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } let(:update_params) { Oj.dump({ state: 'STARTED' }) } before do @@ -1031,7 +1021,7 @@ end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } + let(:deprecated_stack) { create(:stack, name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } let(:update_params) { Oj.dump({ state: 'STARTED' }) } before do @@ -1054,18 +1044,16 @@ context 'when process memory is being decreased and the new memory allocation is lower than memory of associated sidecars' do let!(:process) do - VCAP::CloudController::ProcessModelFactory.make( - space: space, - name: 'mario', - environment_json: { 'RAILS_ENV' => 'staging' }, - command: 'hello_world', - memory: 400 - ) + VCAP::CloudController::ProcessModelFactory.make(space: space, + name: 'mario', + environment_json: { 'RAILS_ENV' => 'staging' }, + command: 'hello_world', + memory: 400) end - let(:sidecar1) { VCAP::CloudController::SidecarModel.make(app: process.app, memory: 20) } + let(:sidecar1) { create(:sidecar_model, app: process.app, memory: 20) } before do - VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1, type: process.type) + create(:sidecar_process_type_model, sidecar: sidecar1, type: process.type) end it 'throws an error' do @@ -1082,16 +1070,14 @@ end describe 'docker apps' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, name: 'mario', space: space, environment_variables: { 'RAILS_ENV' => 'staging' }) } + let(:app_model) { create(:app_model, :docker, name: 'mario', space: space, environment_variables: { 'RAILS_ENV' => 'staging' }) } let!(:process) do - VCAP::CloudController::ProcessModelFactory.make( - app: app_model, - docker_image: 'cloudfoundry/diego-docker-app:latest' - ) + VCAP::CloudController::ProcessModelFactory.make(app: app_model, + docker_image: 'cloudfoundry/diego-docker-app:latest') end before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true) + create(:feature_flag, name: 'diego_docker', enabled: true) allow_any_instance_of(VCAP::CloudController::V2::AppStage).to receive(:stage).and_return(nil) process.latest_package.update(docker_username: 'bob', docker_password: 'password') end @@ -1280,7 +1266,7 @@ end describe 'docker apps' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, space:) } + let(:app_model) { create(:app_model, :docker, space:) } let!(:process) { VCAP::CloudController::ProcessModelFactory.make(app: app_model, docker_image: 'cloudfoundry/diego-docker-app:latest') } it 'deletes the specified app' do @@ -1357,29 +1343,25 @@ describe 'GET /v2/apps/:guid/env' do let(:process) do - VCAP::CloudController::ProcessModelFactory.make( - space: space, - name: 'potato', - detected_buildpack: 'buildpack-name', - environment_json: { env_var: 'env_val' }, - memory: 1024, - disk_quota: 1024 - ) + VCAP::CloudController::ProcessModelFactory.make(space: space, + name: 'potato', + detected_buildpack: 'buildpack-name', + environment_json: { env_var: 'env_val' }, + memory: 1024, + disk_quota: 1024) end let!(:revision) do - VCAP::CloudController::RevisionModel.make( - app: process.app, - environment_variables: {} - ) + create(:revision_model, + app: process.app, + environment_variables: {}) end before do - VCAP::CloudController::RouteMappingModel.make( - app: process.app, - process_type: process.type, - route: VCAP::CloudController::Route.make(space: space, host: 'potato', domain: VCAP::CloudController::SharedDomain.first) - ) + create(:route_mapping_model, + app: process.app, + process_type: process.type, + route: create(:route, space: space, host: 'potato', domain: VCAP::CloudController::SharedDomain.first)) process.revision_guid = revision.guid process.save @@ -1580,7 +1562,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) before do allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:validate_process) allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:stager_for_build).and_return(stager) - VCAP::CloudController::Buildpack.make + create(:buildpack) end it 'restages the app' do @@ -1664,7 +1646,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) let(:process) { VCAP::CloudController::ProcessModelFactory.make(name: 'maria', space: space, docker_image: 'some-image') } before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'logs the required fields when the app is restaged' do @@ -1697,11 +1679,11 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) before do allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:validate_process) allow_any_instance_of(VCAP::CloudController::Stagers).to receive(:stager_for_build).and_return(stager) - VCAP::CloudController::Buildpack.make + create(:buildpack) end context 'when stack is DISABLED' do - let(:disabled_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } + let(:disabled_stack) { create(:stack, name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } before do process.app.buildpack_lifecycle_data.update(stack: disabled_stack.name) @@ -1728,7 +1710,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) end context 'when stack is RESTRICTED' do - let(:restricted_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } + let(:restricted_stack) { create(:stack, name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } before do process.app.buildpack_lifecycle_data.update(stack: restricted_stack.name) @@ -1754,7 +1736,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) context 'for restaging existing app' do before do - VCAP::CloudController::BuildModel.make(app: process.app, state: 'STAGED') + create(:build_model, app: process.app, state: 'STAGED') end it 'allows restaging without errors' do @@ -1772,7 +1754,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } + let(:deprecated_stack) { create(:stack, name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } before do process.app.buildpack_lifecycle_data.update(stack: deprecated_stack.name) @@ -1805,7 +1787,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) end context 'when stack is ACTIVE' do - let(:active_stack) { VCAP::CloudController::Stack.make(name: 'cflinuxfs5', state: 'ACTIVE') } + let(:active_stack) { create(:stack, name: 'cflinuxfs5', state: 'ACTIVE') } before do process.app.buildpack_lifecycle_data.update(stack: active_stack.name) @@ -1938,13 +1920,12 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'GET /v2/apps/:guid/service_bindings' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: process.space) } + let!(:service_instance) { create(:managed_service_instance, space: process.space) } let!(:service_binding) do - VCAP::CloudController::ServiceBinding.make( - service_instance: service_instance, - app: process.app, - credentials: { 'creds-key' => 'creds-val' } - ) + create(:service_binding, + service_instance: service_instance, + app: process.app, + credentials: { 'creds-key' => 'creds-val' }) end before do @@ -2001,8 +1982,8 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'DELETE /v2/apps/:guid/service_binding/:guid' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: process.space) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: process.app) } + let!(:service_instance) { create(:managed_service_instance, space: process.space) } + let!(:service_binding) { create(:service_binding, service_instance: service_instance, app: process.app) } before do service_instance.add_service_binding(service_binding) @@ -2029,8 +2010,8 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'GET /v2/apps/:guid/routes' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:route) { VCAP::CloudController::Route.make(space: space, host: 'youdontknowme') } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route) } + let!(:route) { create(:route, space: space, host: 'youdontknowme') } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route) } it 'shows the routes associated with an app' do get "/v2/apps/#{process.guid}/routes", nil, headers_for(user) @@ -2071,7 +2052,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'PUT /v2/apps/:guid/routes/:route_guid' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:route) { VCAP::CloudController::Route.make(space:) } + let!(:route) { create(:route, space:) } it 'associates an app and a route' do put "/v2/apps/#{process.guid}/routes/#{route.guid}", nil, headers_for(user) @@ -2139,10 +2120,10 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'DELETE /v2/apps/:guid/routes/:guid' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:route1) { VCAP::CloudController::Route.make(space: space, host: 'youdontknowme') } - let!(:route2) { VCAP::CloudController::Route.make(space: space, host: 'andyouneverwill') } - let!(:route_mapping1) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route1) } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route2) } + let!(:route1) { create(:route, space: space, host: 'youdontknowme') } + let!(:route2) { create(:route, space: space, host: 'andyouneverwill') } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route1) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route2) } it 'removes the associated route' do expect(process.routes).to include(route1) @@ -2158,8 +2139,8 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) describe 'GET /v2/apps/:guid/route_mappings' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:route) { VCAP::CloudController::Route.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route) } + let!(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route) } it 'lists associated route_mappings' do get "/v2/apps/#{process.guid}/route_mappings", nil, headers_for(user) diff --git a/spec/request/v2/auth_spec.rb b/spec/request/v2/auth_spec.rb index f60a9628375..831422df5a1 100644 --- a/spec/request/v2/auth_spec.rb +++ b/spec/request/v2/auth_spec.rb @@ -2,7 +2,7 @@ require 'request_spec_shared_examples' RSpec.describe 'Auth' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:user_header) { headers_for(user) } before do @@ -27,8 +27,8 @@ end context 'when user has a global token inaddtion to the space supporter role' do - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } let(:api_call) { ->(user_headers) { get '/v2/apps', nil, user_headers } } let(:expected_codes_and_responses) { Hash.new({ code: 200 }.freeze) } @@ -41,8 +41,8 @@ end context 'developer without read token' do - let(:org) { VCAP::CloudController::Organization.make(created_at: 3.days.ago) } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, created_at: 3.days.ago) } + let(:space) { create(:space, organization: org) } let(:no_read_headers) { headers_for(user, scopes: %w[cloud_controller.user]) } before do @@ -68,9 +68,9 @@ end context 'space supporter' do - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } - let(:space3) { VCAP::CloudController::Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } context 'user with only space supporter role' do before do diff --git a/spec/request/v2/organizations_spec.rb b/spec/request/v2/organizations_spec.rb index c09e59ddd64..3764f5194f6 100644 --- a/spec/request/v2/organizations_spec.rb +++ b/spec/request/v2/organizations_spec.rb @@ -1,19 +1,19 @@ require 'spec_helper' RSpec.describe 'Organizations' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } before do TestConfig.override(kubernetes: {}) end describe 'GET /v2/organizations/:guid/services' do - let!(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:service_1) { VCAP::CloudController::Service.make } - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(service: service_1) } - let!(:service_2) { VCAP::CloudController::Service.make } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(service: service_2) } + let!(:space) { create(:space, organization: org) } + let!(:service_1) { create(:service) } + let!(:service_plan_1) { create(:service_plan, service: service_1) } + let!(:service_2) { create(:service) } + let!(:service_plan_2) { create(:service_plan, service: service_2) } before do space.organization.add_user(user) @@ -103,7 +103,7 @@ describe 'PUT /v2/organizations/:guid' do context 'when the quota has a finite log rate limit and there are apps with unlimited log rates' do let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: 100) } + let(:org_quota) { create(:quota_definition, log_rate_limit: 100) } let(:params) do { @@ -111,9 +111,9 @@ } end - let!(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let!(:space) { create(:space, organization: org) } + let!(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do put "/v2/organizations/#{org.guid}", params.to_json, admin_header diff --git a/spec/request/v2/private_domains_spec.rb b/spec/request/v2/private_domains_spec.rb index 0cc9405cc3c..ef658be10e9 100644 --- a/spec/request/v2/private_domains_spec.rb +++ b/spec/request/v2/private_domains_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'PrivateDomains' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:organization) { space.organization } before do @@ -14,7 +14,7 @@ end describe 'GET /v2/private_domains' do - let!(:domain) { VCAP::CloudController::PrivateDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } + let!(:domain) { create(:private_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } it 'lists all private domains' do get '/v2/private_domains', nil, headers_for(user) @@ -50,7 +50,7 @@ end describe 'GET /v2/private_domains/:guid' do - let!(:domain) { VCAP::CloudController::PrivateDomain.make(router_group_guid: 'tcp-group', owning_organization: organization) } + let!(:domain) { create(:private_domain, router_group_guid: 'tcp-group', owning_organization: organization) } it 'shows the private domain' do get "/v2/private_domains/#{domain.guid}", nil, admin_headers_for(user) @@ -103,7 +103,7 @@ end describe 'PUT /v2/private_domains/:guid' do - let!(:domain) { VCAP::CloudController::PrivateDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } + let!(:domain) { create(:private_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } it 'updates the private domain' do put "/v2/private_domains/#{domain.guid}", '{"name": "meow.com"}', admin_headers_for(user) @@ -129,7 +129,7 @@ end describe 'DELETE /v2/private_domains/:guid' do - let!(:domain) { VCAP::CloudController::PrivateDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } + let!(:domain) { create(:private_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group', owning_organization: organization) } it 'deletes the private domain' do delete "/v2/private_domains/#{domain.guid}", nil, admin_headers_for(user) diff --git a/spec/request/v2/route_mappings_spec.rb b/spec/request/v2/route_mappings_spec.rb index 2d72ed6c457..57e0f53b6fe 100644 --- a/spec/request/v2/route_mappings_spec.rb +++ b/spec/request/v2/route_mappings_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'RouteMappings' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -13,7 +13,7 @@ describe 'GET /v2/route_mappings/:guid' do let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } let(:route) { route_mapping.route } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app) } it 'displays the route mapping' do get "/v2/route_mappings/#{route_mapping.guid}", nil, headers_for(user) @@ -39,7 +39,7 @@ it 'does not display route mappings without a web process' do non_web_process = VCAP::CloudController::ProcessModelFactory.make(space: space, type: 'non-web') - non_displayed_mapping = VCAP::CloudController::RouteMappingModel.make(app: non_web_process.app, route: route, process_type: non_web_process.type) + non_displayed_mapping = create(:route_mapping_model, app: non_web_process.app, route: route, process_type: non_web_process.type) get "/v2/route_mappings/#{non_displayed_mapping.guid}", nil, headers_for(user) expect(last_response.status).to eq(404) @@ -63,13 +63,13 @@ describe 'GET /v2/route_mappings' do let(:process1) { VCAP::CloudController::ProcessModelFactory.make(space:) } let(:route1) { route_mapping1.route } - let!(:route_mapping1) { VCAP::CloudController::RouteMappingModel.make(app: process1.app) } + let!(:route_mapping1) { create(:route_mapping_model, app: process1.app) } let(:process2) { VCAP::CloudController::ProcessModelFactory.make(space:) } let(:route2) { route_mapping2.route } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: process2.app) } + let!(:route_mapping2) { create(:route_mapping_model, app: process2.app) } - let!(:route_mapping3) { VCAP::CloudController::RouteMappingModel.make } + let!(:route_mapping3) { create(:route_mapping_model) } it 'lists all route mappings' do get '/v2/route_mappings', nil, headers_for(user) @@ -120,7 +120,7 @@ it 'does not list mappings to non-web processes' do non_web_process = VCAP::CloudController::ProcessModelFactory.make(space: space, type: 'non-web') - non_web_route_mapping = VCAP::CloudController::RouteMappingModel.make(app: non_web_process.app, process_type: non_web_process.type) + non_web_route_mapping = create(:route_mapping_model, app: non_web_process.app, process_type: non_web_process.type) get '/v2/route_mappings', nil, headers_for(user) expect(last_response.status).to eq(200) @@ -132,7 +132,7 @@ describe 'POST /v2/route_mappings' do let(:process) { VCAP::CloudController::ProcessModelFactory.make(space: space, diego: true, ports: [9090]) } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } it 'creates a route mapping' do request = Oj.dump( @@ -188,8 +188,8 @@ describe 'DELETE /V2/route_mappings' do let(:process) { VCAP::CloudController::ProcessModelFactory.make(space: space, diego: true, ports: [9090]) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route) } + let(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route) } it 'deletes a route mapping' do delete "/v2/route_mappings/#{route_mapping.guid}", nil, headers_for(user) diff --git a/spec/request/v2/routes_spec.rb b/spec/request/v2/routes_spec.rb index eeaf5caf695..aec4f14641b 100644 --- a/spec/request/v2/routes_spec.rb +++ b/spec/request/v2/routes_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'Routes' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -14,8 +14,8 @@ end describe 'GET /v2/routes' do - let!(:route) { VCAP::CloudController::Route.make(domain:, space:) } - let(:domain) { VCAP::CloudController::SharedDomain.make } + let!(:route) { create(:route, domain:, space:) } + let(:domain) { create(:shared_domain) } it 'lists all routes' do get '/v2/routes', nil, headers_for(user) @@ -55,7 +55,7 @@ context 'with inline-relations-depth' do let!(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, process_type: process.type, route: route) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, process_type: process.type, route: route) } it 'includes related records' do get '/v2/routes?inline-relations-depth=1', nil, headers_for(user) @@ -189,10 +189,10 @@ end describe 'GET /v2/routes/:guid' do - let!(:route) { VCAP::CloudController::Route.make(domain:, space:) } + let!(:route) { create(:route, domain:, space:) } context 'with a shared domain' do - let(:domain) { VCAP::CloudController::SharedDomain.make } + let(:domain) { create(:shared_domain) } it 'maps domain_url to the shared domains controller' do get "/v2/routes/#{route.guid}", nil, headers_for(user) @@ -225,7 +225,7 @@ end context 'with a private domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(router_group_guid: 'tcp-group', owning_organization: space.organization) } + let(:domain) { create(:private_domain, router_group_guid: 'tcp-group', owning_organization: space.organization) } it 'maps domain_url to the shared domains controller' do get "/v2/routes/#{route.guid}", nil, headers_for(user) @@ -239,7 +239,7 @@ describe 'POST /v2/routes' do it 'creates a route' do - domain = VCAP::CloudController::Domain.make + domain = create(:domain) post_params = Oj.dump({ domain_guid: domain.guid, space_guid: space.guid, @@ -278,8 +278,8 @@ describe 'GET /v2/routes/:guid/route_mappings' do let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } it 'lists associated route mappings' do get "/v2/routes/#{route.guid}/route_mappings", nil, headers_for(user) @@ -316,8 +316,8 @@ describe 'GET /v2/routes/:guid/apps' do let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } it 'lists the associated apps' do get "/v2/routes/#{route.guid}/apps", nil, headers_for(user) diff --git a/spec/request/v2/service_bindings_spec.rb b/spec/request/v2/service_bindings_spec.rb index 0cff3d1166a..47ea70f9da9 100644 --- a/spec/request/v2/service_bindings_spec.rb +++ b/spec/request/v2/service_bindings_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'ServiceBindings' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -10,16 +10,16 @@ end describe 'GET /v2/service_bindings' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:process1) { VCAP::CloudController::ProcessModelFactory.make(space:) } let(:process2) { VCAP::CloudController::ProcessModelFactory.make(space:) } let!(:service_binding1) do - VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: process1.app, credentials: { secret: 'key' }) + create(:service_binding, service_instance: service_instance, app: process1.app, credentials: { secret: 'key' }) end let!(:service_binding2) do - VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: process2.app, credentials: { top: 'secret' }) + create(:service_binding, service_instance: service_instance, app: process2.app, credentials: { top: 'secret' }) end - let!(:service_binding3) { VCAP::CloudController::ServiceBinding.make } + let!(:service_binding3) { create(:service_binding) } it 'lists service bindings' do get '/v2/service_bindings', nil, headers_for(user) @@ -98,7 +98,7 @@ it 'does not list service bindings without web processes' do non_web_process = VCAP::CloudController::ProcessModelFactory.make(space: space, type: 'non-web') - non_displayed_binding = VCAP::CloudController::ServiceBinding.make(app: non_web_process.app, service_instance: service_instance) + non_displayed_binding = create(:service_binding, app: non_web_process.app, service_instance: service_instance) get '/v2/service_bindings', nil, headers_for(user) expect(last_response.status).to eq(200) @@ -247,8 +247,8 @@ end it 'filters by service_instance_guid' do - filtered_service_instance = VCAP::CloudController::ManagedServiceInstance.make(space:) - filtered_service_binding = VCAP::CloudController::ServiceBinding.make(service_instance: filtered_service_instance, app: process1.app) + filtered_service_instance = create(:managed_service_instance, space:) + filtered_service_binding = create(:service_binding, service_instance: filtered_service_instance, app: process1.app) get "/v2/service_bindings?q=service_instance_guid:#{filtered_service_instance.guid}", nil, headers_for(user) expect(last_response.status).to eq(200) @@ -260,10 +260,10 @@ end describe 'GET /v2/service_bindings/:guid' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:process1) { VCAP::CloudController::ProcessModelFactory.make(space:) } let!(:service_binding1) do - VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: process1.app, credentials: { secret: 'key' }) + create(:service_binding, service_instance: service_instance, app: process1.app, credentials: { secret: 'key' }) end it 'displays the service binding' do @@ -306,7 +306,7 @@ it 'does not display service bindings without a web process' do non_web_process = VCAP::CloudController::ProcessModelFactory.make(space: space, type: 'non-web') - non_displayed_binding = VCAP::CloudController::ServiceBinding.make(app: non_web_process.app, service_instance: service_instance) + non_displayed_binding = create(:service_binding, app: non_web_process.app, service_instance: service_instance) get "/v2/service_bindings/#{non_displayed_binding.guid}", nil, headers_for(user) expect(last_response.status).to eq(404) @@ -331,7 +331,7 @@ end describe 'POST /v2/service_bindings' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } before do @@ -412,8 +412,8 @@ end describe 'DELETE /v2/service_bindings/:guid' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance:) } + let(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_binding) { create(:service_binding, service_instance:) } before do allow(VCAP::Services::ServiceBrokers::V2::Client).to receive(:new) do |*args, **kwargs, &block| @@ -442,12 +442,12 @@ end describe 'GET /v2/service_bindings/:guid/parameters' do - let(:service) { VCAP::CloudController::Service.make(bindings_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service) { create(:service, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:process1) { VCAP::CloudController::ProcessModelFactory.make(space:) } let!(:service_binding1) do - VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, app: process1.app) + create(:service_binding, service_instance: service_instance, app: process1.app) end before do @@ -482,7 +482,7 @@ it 'does not list service bindings without web processes' do non_web_process = VCAP::CloudController::ProcessModelFactory.make(space: space, type: 'non-web') - non_displayed_binding = VCAP::CloudController::ServiceBinding.make(app: non_web_process.app, service_instance: service_instance) + non_displayed_binding = create(:service_binding, app: non_web_process.app, service_instance: service_instance) get "/v2/service_bindings/#{non_displayed_binding.guid}/parameters", nil, headers_for(user) expect(last_response.status).to eq(404) diff --git a/spec/request/v2/service_brokers_spec.rb b/spec/request/v2/service_brokers_spec.rb index 7f986ce4f1d..59afbab1fac 100644 --- a/spec/request/v2/service_brokers_spec.rb +++ b/spec/request/v2/service_brokers_spec.rb @@ -3,7 +3,7 @@ RSpec.describe 'ServiceBrokers' do describe 'PUT /v2/service_brokers' do context 'when ccng fails to parse the service broker endpoint' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } before do stub_request(:get, 'https://broker.example.com/v2/catalog'). @@ -28,7 +28,7 @@ end context 'when the service broker endpoint returns an error' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } before do stub_request(:get, 'https://broker.example.com/v2/catalog'). diff --git a/spec/request/v2/service_instances_spec.rb b/spec/request/v2/service_instances_spec.rb index 1727e7d8433..13f11eb2cab 100644 --- a/spec/request/v2/service_instances_spec.rb +++ b/spec/request/v2/service_instances_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'ServiceInstances' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -10,7 +10,7 @@ end describe 'POST /v2/service_instances' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make } + let(:service_plan) { create(:service_plan) } before do allow(VCAP::Services::ServiceBrokers::V2::Client).to receive(:new) do |*args, **kwargs, &block| @@ -74,10 +74,10 @@ end describe 'PUT /v2/service_instances/:guid' do - let(:service) { VCAP::CloudController::Service.make(plan_updateable: true) } - let(:old_service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:new_service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: old_service_plan) } + let(:service) { create(:service, plan_updateable: true) } + let(:old_service_plan) { create(:service_plan, service:) } + let(:new_service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: old_service_plan) } before do allow(VCAP::Services::ServiceBrokers::V2::Client).to receive(:new) do |*args, **kwargs, &block| @@ -141,8 +141,8 @@ end describe 'GET /v2/service_instances/:service_instance_guid' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(active: false) } + let(:service_instance) { create(:managed_service_instance, space:) } + let(:service_plan) { create(:service_plan, active: false) } before do service_instance.dashboard_url = 'someurl.com' @@ -295,9 +295,9 @@ end describe 'GET /v2/service_instances/:service_instance_guid/parameters' do - let(:service) { VCAP::CloudController::Service.make(instances_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service) { create(:service, instances_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } context 'with a managed service instance' do before do @@ -336,11 +336,11 @@ end describe 'GET /v2/service_instances/:service_instance_guid/routes/:route_guid/parameters' do - let(:service) { VCAP::CloudController::Service.make(:routing, bindings_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } - let(:route) { VCAP::CloudController::Route.make(space:) } - let!(:route_binding) { VCAP::CloudController::RouteBinding.make(route:, service_instance:) } + let(:service) { create(:service, :routing, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } + let(:route) { create(:route, space:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } before do allow(VCAP::Services::ServiceBrokers::V2::Client).to receive(:new) do |*args, **kwargs, &block| @@ -375,10 +375,10 @@ end describe 'GET /v2/service_instances/:service_instance_guid/shared_from' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } before do - service_instance.add_shared_space(VCAP::CloudController::Space.make) + service_instance.add_shared_space(create(:space)) end it 'returns data about the source space and org' do @@ -395,7 +395,7 @@ end context 'when the user is a member of the space where a service instance has been shared to' do - let(:other_space) { VCAP::CloudController::Space.make } + let(:other_space) { create(:space) } let(:other_user) { make_developer_for_space(other_space) } let(:req_body) do { @@ -406,7 +406,7 @@ end before do - VCAP::CloudController::FeatureFlag.make(name: 'service_instance_sharing', enabled: true, error_message: nil) + create(:feature_flag, name: 'service_instance_sharing', enabled: true, error_message: nil) other_space.organization.add_user(user) other_space.add_developer(user) @@ -431,9 +431,9 @@ end describe 'GET /v2/service_instances/:service_instance_guid/shared_to' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } + let(:service_instance) { create(:managed_service_instance, space:) } + let(:space1) { create(:space) } + let(:space2) { create(:space) } before do service_instance.add_shared_space(space1) @@ -472,8 +472,8 @@ end describe 'DELETE /v2/service_instance/:guid' do - let(:originating_space) { VCAP::CloudController::Space.make } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: originating_space) } + let(:originating_space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, space: originating_space) } context 'when the service instance has been shared' do before do @@ -600,7 +600,7 @@ end describe 'PUT /v2/user_provided_service_instances/:guid' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'updates the user-provided service instance' do put_params = Oj.dump({ diff --git a/spec/request/v2/service_keys_spec.rb b/spec/request/v2/service_keys_spec.rb index f014259a530..3898ddb03a8 100644 --- a/spec/request/v2/service_keys_spec.rb +++ b/spec/request/v2/service_keys_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'ServiceKeys' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -10,9 +10,9 @@ end describe 'GET /v2/service_keys' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let!(:service_key1) { VCAP::CloudController::ServiceKey.make(service_instance: service_instance, credentials: { secret: 'key' }) } - let!(:service_key2) { VCAP::CloudController::ServiceKey.make(service_instance: service_instance, credentials: { secret: 'key' }) } + let(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_key1) { create(:service_key, service_instance: service_instance, credentials: { secret: 'key' }) } + let!(:service_key2) { create(:service_key, service_instance: service_instance, credentials: { secret: 'key' }) } it 'lists service keys' do get '/v2/service_keys', nil, headers_for(user) @@ -63,8 +63,8 @@ end describe 'GET /v2/service_keys/:guid' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let!(:service_key1) { VCAP::CloudController::ServiceKey.make(service_instance: service_instance, credentials: { secret: 'key' }, name: 'key') } + let(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_key1) { create(:service_key, service_instance: service_instance, credentials: { secret: 'key' }, name: 'key') } it 'displays the service key' do get "/v2/service_keys/#{service_key1.guid}", nil, headers_for(user) @@ -109,10 +109,10 @@ end describe 'GET /v2/service_keys/:guid/parameters' do - let(:service) { VCAP::CloudController::Service.make(bindings_retrievable: true) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } - let!(:service_key) { VCAP::CloudController::ServiceKey.make(service_instance:) } + let(:service) { create(:service, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } + let!(:service_key) { create(:service_key, service_instance:) } before do allow(VCAP::Services::ServiceBrokers::V2::Client).to receive(:new) do |*args, **kwargs, &block| diff --git a/spec/request/v2/service_plans_spec.rb b/spec/request/v2/service_plans_spec.rb index 4202ef9638d..f4ad721d3df 100644 --- a/spec/request/v2/service_plans_spec.rb +++ b/spec/request/v2/service_plans_spec.rb @@ -1,15 +1,14 @@ require 'spec_helper' RSpec.describe 'ServicePlans' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } - let(:service) { VCAP::CloudController::Service.make } + let(:service) { create(:service) } let!(:service_plan) do - VCAP::CloudController::ServicePlan.make( - service: service, - maintenance_info: { version: '2.0', description: 'Test description' } - ) + create(:service_plan, + service: service, + maintenance_info: { version: '2.0', description: 'Test description' }) end before do diff --git a/spec/request/v2/services_spec.rb b/spec/request/v2/services_spec.rb index 4daaf05bd07..618f10c1992 100644 --- a/spec/request/v2/services_spec.rb +++ b/spec/request/v2/services_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'Services' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -10,10 +10,10 @@ end describe 'GET /v2/services' do - let!(:service_1) { VCAP::CloudController::Service.make } - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(service: service_1) } - let!(:service_2) { VCAP::CloudController::Service.make } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(service: service_2) } + let!(:service_1) { create(:service) } + let!(:service_plan_1) { create(:service_plan, service: service_1) } + let!(:service_2) { create(:service) } + let!(:service_plan_2) { create(:service_plan, service: service_2) } it 'lists services' do get '/v2/services', nil, headers_for(user) @@ -96,8 +96,8 @@ end describe 'GET /v2/services/:guid' do - let!(:service) { VCAP::CloudController::Service.make } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } + let!(:service) { create(:service) } + let!(:service_plan) { create(:service_plan, service:) } it 'displays the service' do get "/v2/services/#{service.guid}", nil, headers_for(user) diff --git a/spec/request/v2/shared_domains_spec.rb b/spec/request/v2/shared_domains_spec.rb index c9ed155f743..406afed5739 100644 --- a/spec/request/v2/shared_domains_spec.rb +++ b/spec/request/v2/shared_domains_spec.rb @@ -1,8 +1,8 @@ require 'spec_helper' RSpec.describe 'SharedDomains' do - let(:user) { VCAP::CloudController::User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user(user) @@ -15,7 +15,7 @@ end describe 'GET /v2/shared_domains' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group') } + let!(:domain) { create(:shared_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group') } it 'lists all shared domains' do get '/v2/shared_domains', nil, headers_for(user) @@ -79,7 +79,7 @@ end describe 'GET /v2/shared_domains/:guid' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'tcp-group') } + let!(:domain) { create(:shared_domain, router_group_guid: 'tcp-group') } it 'shows the shared domain' do get "/v2/shared_domains/#{domain.guid}", nil, headers_for(user) @@ -198,7 +198,7 @@ end describe 'PUT /v2/shared_domains/:guid' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group') } + let!(:domain) { create(:shared_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group') } it 'ignores everything and returns the original object, suckers!' do put "/v2/shared_domains/#{domain.guid}", '{"name": "meow.com", "route_group_guid": "a-guid"}', admin_headers_for(user) @@ -224,7 +224,7 @@ end describe 'DELETE /v2/shared_domains/:guid' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(name: 'my-domain.edu', router_group_guid: 'tcp-group') } + let!(:domain) { create(:shared_domain, name: 'my-domain.edu', router_group_guid: 'tcp-group') } it 'deletes the shared_domain' do delete "/v2/shared_domains/#{domain.guid}", nil, admin_headers_for(user) diff --git a/spec/request/v2/space_quota_definitions_spec.rb b/spec/request/v2/space_quota_definitions_spec.rb index 9b51bb0f470..42591cda1ce 100644 --- a/spec/request/v2/space_quota_definitions_spec.rb +++ b/spec/request/v2/space_quota_definitions_spec.rb @@ -1,17 +1,17 @@ require 'spec_helper' RSpec.describe 'SpaceQuotaDefinitions' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } describe 'PUT /v2/space_quota_definitions/guid/spaces/space_guid' do context 'when the quota has a finite log rate limit and there are apps with unlimited log rates' do let(:admin_header) { headers_for(user, scopes: %w[cloud_controller.admin]) } - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, log_rate_limit: 100) } + let(:space_quota) { create(:space_quota_definition, organization: org, log_rate_limit: 100) } - let!(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let!(:space) { create(:space, organization: org) } + let!(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process, app: app_model, log_rate_limit: -1) } it 'returns 422' do put "/v2/space_quota_definitions/#{space_quota.guid}/spaces/#{space.guid}", nil, admin_header diff --git a/spec/request/v2/spaces_spec.rb b/spec/request/v2/spaces_spec.rb index f9988c1fbd0..1c411c49088 100644 --- a/spec/request/v2/spaces_spec.rb +++ b/spec/request/v2/spaces_spec.rb @@ -2,9 +2,9 @@ RSpec.describe 'Spaces' do let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:isolation_segment) { create(:isolation_segment_model) } + let(:user) { create(:user) } + let(:org) { create(:organization) } describe 'POST /v2/spaces' do let(:opts) do @@ -64,8 +64,8 @@ describe 'GET /v2/spaces' do context 'when a isolation segment is associated to the space' do - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:isolation_segment) { create(:isolation_segment_model) } + let(:space) { create(:space, organization: org) } before do assigner.assign(isolation_segment, [org]) @@ -121,8 +121,8 @@ describe 'GET /v2/spaces/:guid' do context 'when a isolation segment is associated to the space' do - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:isolation_segment) { create(:isolation_segment_model) } + let(:space) { create(:space, organization: org) } before do assigner.assign(isolation_segment, [org]) @@ -171,9 +171,9 @@ end describe 'GET /v2/spaces/:guid/service_instances' do - let(:originating_space) { VCAP::CloudController::Space.make } - let(:shared_service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: originating_space) } - let(:space) { VCAP::CloudController::Space.make } + let(:originating_space) { create(:space) } + let(:shared_service_instance) { create(:managed_service_instance, space: originating_space) } + let(:space) { create(:space) } before do originating_space.organization.add_user(user) @@ -230,11 +230,11 @@ end describe 'GET /v2/spaces/:guid/services' do - let!(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:service_1) { VCAP::CloudController::Service.make } - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(service: service_1) } - let!(:service_2) { VCAP::CloudController::Service.make } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(service: service_2) } + let!(:space) { create(:space, organization: org) } + let!(:service_1) { create(:service) } + let!(:service_plan_1) { create(:service_plan, service: service_1) } + let!(:service_2) { create(:service) } + let!(:service_plan_2) { create(:service_plan, service: service_2) } before do space.organization.add_user(user) @@ -252,12 +252,12 @@ end describe 'GET /v2/spaces/:guid/summary' do - let!(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let!(:space) { create(:space, organization: org) } + let!(:app_model) { create(:app_model, space:) } let!(:process) { VCAP::CloudController::ProcessModelFactory.make(state: 'STARTED', app: app_model) } let(:maintenance_info) { { version: '1.0.0', desciption: 'this is description about the maintenance' } } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(maintenance_info:) } - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:, maintenance_info:) } + let!(:service_plan) { create(:service_plan, maintenance_info:) } + let!(:service_instance) { create(:managed_service_instance, space:, service_plan:, maintenance_info:) } let(:build_client) { instance_double(HTTPClient, post: nil) } before do @@ -344,7 +344,7 @@ end describe 'DELETE /v2/spaces/:guid/unmapped_routes' do - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:space) { create(:space, organization: org) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(state: 'STARTED') } before do @@ -353,14 +353,14 @@ end it 'deletes orphaned routes, does not delete mapped or bound routes' do - unmapped_route = VCAP::CloudController::Route.make(space:) + unmapped_route = create(:route, space:) - mapped_route = VCAP::CloudController::Route.make(space:) - VCAP::CloudController::RouteMappingModel.make(app: process.app, route: mapped_route, app_port: 9090) + mapped_route = create(:route, space:) + create(:route_mapping_model, app: process.app, route: mapped_route, app_port: 9090) - bound_route = VCAP::CloudController::Route.make(space:) - service_instance = VCAP::CloudController::ManagedServiceInstance.make(:routing, space:) - VCAP::CloudController::RouteBinding.make(service_instance: service_instance, route: bound_route) + bound_route = create(:route, space:) + service_instance = create(:managed_service_instance, :routing, space:) + create(:route_binding, service_instance: service_instance, route: bound_route) delete "/v2/spaces/#{space.guid}/unmapped_routes", {}, headers_for(user) diff --git a/spec/request/v2/staging_security_groups_spec.rb b/spec/request/v2/staging_security_groups_spec.rb index 7ac93f4f8d0..57e6ea75fb9 100644 --- a/spec/request/v2/staging_security_groups_spec.rb +++ b/spec/request/v2/staging_security_groups_spec.rb @@ -2,10 +2,10 @@ RSpec.describe 'Staging Security Groups' do describe 'PUT /v2/spaces/:guid/staging_security_groups/:security_group_guid' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -26,10 +26,10 @@ end describe 'DELETE /v2/spaces/:guid/staging_security_groups/:security_group_guid' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -51,21 +51,20 @@ end describe 'PUT /v2/security_groups/:guid/staging_spaces/:space_guid' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:security_group) do - VCAP::CloudController::SecurityGroup.make( - name: 'my-group-name', - rules: [ - { - 'protocol' => 'tcp', - 'ports' => '443', - 'destination' => '192.168.10.0/24' - } - ] - ) + create(:security_group, + name: 'my-group-name', + rules: [ + { + 'protocol' => 'tcp', + 'ports' => '443', + 'destination' => '192.168.10.0/24' + } + ]) end - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -106,10 +105,10 @@ end describe 'GET /v2/security_groups/:guid/staging_spaces/:space_guid' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -130,10 +129,10 @@ end describe 'DELETE /v2/security_groups/:guid/staging_spaces/:space_guid' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } + let(:user) { create(:user) } before do space.organization.add_user(user) diff --git a/spec/request/vcap_request_context_setter_spec.rb b/spec/request/vcap_request_context_setter_spec.rb index 2ef02d3a2d8..fba3ba1873c 100644 --- a/spec/request/vcap_request_context_setter_spec.rb +++ b/spec/request/vcap_request_context_setter_spec.rb @@ -16,7 +16,7 @@ module VCAP::CloudController end describe 'user agent and request id handling' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:user) { make_developer_for_space(space) } let(:request_id) { 'test-request-123' } let(:user_agent) { 'cf/8.7.0 (go1.21.4; amd64 linux)' } @@ -50,14 +50,14 @@ module VCAP::CloudController end context 'telemetry' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:user) { make_developer_for_space(space) } let(:user_agent) { 'cf/8.7.0 (go1.21.4; amd64 linux)' } let(:user_header) { headers_for(user, user_name: 'roto').merge('HTTP_USER_AGENT' => user_agent) } let(:logger_spy) { spy('logger') } - let(:stack) { VCAP::CloudController::Stack.make } - let(:buildpack) { VCAP::CloudController::Buildpack.make(stack: stack.name) } + let(:stack) { create(:stack) } + let(:buildpack) { create(:buildpack, stack: stack.name) } let(:create_request) do { name: 'my_app', diff --git a/spec/request_spec_shared_examples.rb b/spec/request_spec_shared_examples.rb index ef9606182ba..96e6d0ff979 100644 --- a/spec/request_spec_shared_examples.rb +++ b/spec/request_spec_shared_examples.rb @@ -238,7 +238,7 @@ def errors_without_test_mode_info(parsed_response) # override these let(:resource) do # e.g: - # Space.make + # FactoryBot.create(:space) end let(:api_call) do # e.g: @@ -279,9 +279,9 @@ def errors_without_test_mode_info(parsed_response) let(:additional_resource_params) { {} } context 'filtering guids' do - let!(:resource_1) { resource_klass.make(guid: '1', **additional_resource_params) } - let!(:resource_2) { resource_klass.make(guid: '2', **additional_resource_params) } - let!(:resource_3) { resource_klass.make(guid: '3', **additional_resource_params) } + let!(:resource_1) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', **additional_resource_params) } + let!(:resource_2) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', **additional_resource_params) } + let!(:resource_3) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', **additional_resource_params) } it 'filters on guid' do api_call.call(headers, 'guids=1,2,4') @@ -291,10 +291,10 @@ def errors_without_test_mode_info(parsed_response) end context 'filtering timestamps on creation' do - let!(:resource_1) { resource_klass.make(guid: '1', created_at: '2020-05-26T18:47:01Z', **additional_resource_params) } - let!(:resource_2) { resource_klass.make(guid: '2', created_at: '2020-05-26T18:47:02Z', **additional_resource_params) } - let!(:resource_3) { resource_klass.make(guid: '3', created_at: '2020-05-26T18:47:03Z', **additional_resource_params) } - let!(:resource_4) { resource_klass.make(guid: '4', created_at: '2020-05-26T18:47:04Z', **additional_resource_params) } + let!(:resource_1) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', created_at: '2020-05-26T18:47:01Z', **additional_resource_params) } + let!(:resource_2) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', created_at: '2020-05-26T18:47:02Z', **additional_resource_params) } + let!(:resource_3) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', created_at: '2020-05-26T18:47:03Z', **additional_resource_params) } + let!(:resource_4) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '4', created_at: '2020-05-26T18:47:04Z', **additional_resource_params) } it 'filters' do api_call.call(headers, "created_ats[lt]=#{resource_3.created_at.iso8601}") @@ -314,10 +314,26 @@ def errors_without_test_mode_info(parsed_response) resource_klass.plugin :timestamps, update_on_create: true, allow_manual_update: true end - let!(:resource_1) { resource_klass.make(guid: '1', **additional_resource_params).tap { |r| r.update(updated_at: '2020-05-26T18:47:01Z') } } - let!(:resource_2) { resource_klass.make(guid: '2', **additional_resource_params).tap { |r| r.update(updated_at: '2020-05-26T18:47:02Z') } } - let!(:resource_3) { resource_klass.make(guid: '3', **additional_resource_params).tap { |r| r.update(updated_at: '2020-05-26T18:47:03Z') } } - let!(:resource_4) { resource_klass.make(guid: '4', **additional_resource_params).tap { |r| r.update(updated_at: '2020-05-26T18:47:04Z') } } + let!(:resource_1) do + create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', **additional_resource_params).tap do |r| + r.update(updated_at: '2020-05-26T18:47:01Z') + end + end + let!(:resource_2) do + create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', **additional_resource_params).tap do |r| + r.update(updated_at: '2020-05-26T18:47:02Z') + end + end + let!(:resource_3) do + create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', **additional_resource_params).tap do |r| + r.update(updated_at: '2020-05-26T18:47:03Z') + end + end + let!(:resource_4) do + create(resource_klass.name.demodulize.underscore.to_sym, guid: '4', **additional_resource_params).tap do |r| + r.update(updated_at: '2020-05-26T18:47:04Z') + end + end after do resource_klass.plugin :timestamps, update_on_create: true, allow_manual_update: false @@ -336,10 +352,10 @@ def errors_without_test_mode_info(parsed_response) let(:resource_klass) { raise 'Please define a resource_klass!' } let(:additional_resource_params) { {} } - let!(:resource_1) { resource_klass.make(guid: '1', name: 'flopsy', **additional_resource_params) } - let!(:resource_2) { resource_klass.make(guid: '2', name: 'mopsy', **additional_resource_params) } - let!(:resource_3) { resource_klass.make(guid: '3', name: 'cottontail', **additional_resource_params) } - let!(:resource_4) { resource_klass.make(guid: '4', name: 'peter', **additional_resource_params) } + let!(:resource_1) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', name: 'flopsy', **additional_resource_params) } + let!(:resource_2) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', name: 'mopsy', **additional_resource_params) } + let!(:resource_3) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', name: 'cottontail', **additional_resource_params) } + let!(:resource_4) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '4', name: 'peter', **additional_resource_params) } it 'sorts ascending' do get("#{endpoint}?order_by=name", nil, admin_headers) @@ -365,10 +381,10 @@ def errors_without_test_mode_info(parsed_response) let(:additional_resource_params) { {} } context 'order_by created_at' do - let!(:resource_1) { resource_klass.make(guid: '1', created_at: '2020-05-26T18:47:03Z', **additional_resource_params) } - let!(:resource_2) { resource_klass.make(guid: '2', created_at: '2020-05-26T18:47:02Z', **additional_resource_params) } - let!(:resource_3) { resource_klass.make(guid: '3', created_at: '2020-05-26T18:47:01Z', **additional_resource_params) } - let!(:resource_4) { resource_klass.make(guid: '4', created_at: '2020-05-26T18:47:04Z', **additional_resource_params) } + let!(:resource_1) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', created_at: '2020-05-26T18:47:03Z', **additional_resource_params) } + let!(:resource_2) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', created_at: '2020-05-26T18:47:02Z', **additional_resource_params) } + let!(:resource_3) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', created_at: '2020-05-26T18:47:01Z', **additional_resource_params) } + let!(:resource_4) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '4', created_at: '2020-05-26T18:47:04Z', **additional_resource_params) } it 'sorts ascending' do get("#{endpoint}?order_by=created_at", nil, admin_headers) @@ -396,10 +412,10 @@ def errors_without_test_mode_info(parsed_response) resource_klass.plugin :timestamps, update_on_create: false end - let!(:resource_1) { resource_klass.make(guid: '1', updated_at: '2020-05-26T18:47:03Z', **additional_resource_params) } - let!(:resource_2) { resource_klass.make(guid: '2', updated_at: '2020-05-26T18:47:02Z', **additional_resource_params) } - let!(:resource_3) { resource_klass.make(guid: '3', updated_at: '2020-05-26T18:47:01Z', **additional_resource_params) } - let!(:resource_4) { resource_klass.make(guid: '4', updated_at: '2020-05-26T18:47:04Z', **additional_resource_params) } + let!(:resource_1) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '1', updated_at: '2020-05-26T18:47:03Z', **additional_resource_params) } + let!(:resource_2) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '2', updated_at: '2020-05-26T18:47:02Z', **additional_resource_params) } + let!(:resource_3) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '3', updated_at: '2020-05-26T18:47:01Z', **additional_resource_params) } + let!(:resource_4) { create(resource_klass.name.demodulize.underscore.to_sym, guid: '4', updated_at: '2020-05-26T18:47:04Z', **additional_resource_params) } after do resource_klass.plugin :timestamps, update_on_create: true diff --git a/spec/spec_helper_helper.rb b/spec/spec_helper_helper.rb index 1197a35fe56..278ce6cfeeb 100644 --- a/spec/spec_helper_helper.rb +++ b/spec/spec_helper_helper.rb @@ -19,8 +19,6 @@ def self.init ENV['PB_IGNORE_DEPRECATIONS'] = 'true' ENV['RAILS_ENV'] ||= 'test' - require 'machinist/sequel' - require 'machinist/object' require 'rack/test' require 'timecop' @@ -47,7 +45,14 @@ def self.each_run # Moving SpecBootstrap.init into the init-block means that changes in code files aren't detected. VCAP::CloudController::SpecBootstrap.init(do_schema_migration: !ENV['NO_DB_MIGRATION']) - Dir[File.expand_path('support/**/*.rb', File.dirname(__FILE__))].each { |file| require file } + # FactoryBot factory definitions live under support/factory_definitions/ + # and are loaded by FactoryBot.find_definitions (driven by support/factories.rb). + # Skip them here so factories.rb (which requires factory_bot) loads first. + Dir[File.expand_path('support/**/*.rb', File.dirname(__FILE__))].each do |file| + next if file.include?('/support/factory_definitions/') + + require file + end # each-run here? RSpec.configure do |rspec_config| diff --git a/spec/support/broker_api_helper.rb b/spec/support/broker_api_helper.rb index 649dffd3ef7..c627dbc3965 100644 --- a/spec/support/broker_api_helper.rb +++ b/spec/support/broker_api_helper.rb @@ -85,9 +85,9 @@ def small_catalog end def setup_cc - org = VCAP::CloudController::Organization.make + org = FactoryBot.create(:organization) @org_guid = org.guid - @space = VCAP::CloudController::Space.make(organization: org) + @space = FactoryBot.create(:space, organization: org) @space_guid = @space.guid end diff --git a/spec/support/controller_helpers.rb b/spec/support/controller_helpers.rb index d58cb84a056..ba7aeacb53b 100644 --- a/spec/support/controller_helpers.rb +++ b/spec/support/controller_helpers.rb @@ -97,7 +97,7 @@ def entity def admin_headers unless @admin_headers - user = User.make_unsaved + user = FactoryBot.build(:user) @admin_headers = headers_for(user, scopes: %w[cloud_controller.admin]) end @admin_headers @@ -105,7 +105,7 @@ def admin_headers def admin_read_only_headers unless @admin_read_only_headers - user = User.make_unsaved + user = FactoryBot.build(:user) @admin_read_only_headers = headers_for(user, scopes: %w[cloud_controller.admin_read_only]) end @admin_read_only_headers @@ -113,7 +113,7 @@ def admin_read_only_headers def global_auditor_headers unless @global_auditor_headers - user = User.make_unsaved + user = FactoryBot.build(:user) @global_auditor_headers = headers_for(user, scopes: %w[cloud_controller.global_auditor]) end @global_auditor_headers @@ -121,7 +121,7 @@ def global_auditor_headers def build_state_updater_headers unless @build_state_updater_headers - user = User.make_unsaved + user = FactoryBot.build(:user) @build_state_updater_headers = headers_for(user, scopes: %w[cloud_controller.write cloud_controller.update_build_state]) end @build_state_updater_headers diff --git a/spec/support/factories.rb b/spec/support/factories.rb new file mode 100644 index 00000000000..4d43922c697 --- /dev/null +++ b/spec/support/factories.rb @@ -0,0 +1,80 @@ +require 'factory_bot' + +FactoryBot.definition_file_paths = [File.expand_path('factory_definitions', __dir__)] + +FactoryBot.define do + to_create do |instance| + instance.save + instance.refresh + end + + # Sequences must mirror BOTH the existing top-level sequences AND every name + # defined inside Sham.define in spec/support/fakes/blueprints.rb, because + # surviving blueprints reference them and the lint spec exercises both worlds + # during coexistence. + sequence(:name) { |n| "name-#{n}" } + sequence(:guid) { |_n| SecureRandom.uuid.to_s } + sequence(:domain) { |n| "domain-#{n}.example.com" } + sequence(:host) { |n| "host-#{n}" } + sequence(:uaa_id) { |n| "uaa-id-#{n}" } + sequence(:port) { |n| n + 1024 } + sequence(:label) { |n| "label-#{n}" } + sequence(:description) { |n| "desc-#{n}" } + sequence(:sequence_id) { |n| n } + sequence(:stack_name) { |n| "cflinuxfs-#{n}" } + sequence(:feature_flag_name) do |n| + flags = VCAP::CloudController::FeatureFlag::DEFAULT_FLAGS.keys.map(&:to_s) + flags[(n - 1) % flags.size] + end + sequence(:auth_password) { |n| "auth-password-#{n}" } + sequence(:auth_username) { |n| "auth-username-#{n}" } + sequence(:email) { |n| "user-#{n}@example.com" } + sequence(:error_message) { |n| "error-message-#{n}" } + sequence(:extra) { |n| "extra-#{n}" } + sequence(:instance_index) { |n| n } + sequence(:long_description) { |n| "long-description-#{n}" } + sequence(:provider) { |n| "provider-#{n}" } + sequence(:service_credentials) { |n| { "creds-key-#{n}" => "creds-val-#{n}" } } + sequence(:stack) { |n| "stack-#{n}" } + sequence(:status) { |_n| 'active' } + sequence(:token) { |n| "token-#{n}" } + sequence(:type) { |n| "type-#{n}" } + sequence(:unique_id) { |n| "unique-id-#{n}" } + sequence(:url) { |n| "https://example.com/#{n}" } + sequence(:version) { |n| "1.0.#{n}" } + + # Sequences that mirror the original Sham.define block from + # spec/support/fakes/blueprints.rb byte-for-byte. The Sham compatibility + # shim in spec/support/sham_shim.rb delegates to these. + sequence(:sham_email) { |n| "email-#{n}@somedomain.com" } + sequence(:sham_name) { |n| "name-#{n}" } + sequence(:sham_label) { |n| "label-#{n}" } + sequence(:sham_token) { |n| "token-#{n}" } + sequence(:sham_auth_username) { |n| "auth_username-#{n}" } + sequence(:sham_auth_password) { |n| "auth_password-#{n}" } + sequence(:sham_provider) { |n| "provider-#{n}" } + sequence(:sham_port) { |n| n + 1024 } + sequence(:sham_url) { |n| "https://foo.com/url-#{n}" } + sequence(:sham_type) { |n| "type-#{n}" } + sequence(:sham_description) { |n| "desc-#{n}" } + sequence(:sham_long_description) { |n| "long description-#{n} over 255 characters #{'-' * 255}" } + sequence(:sham_version) { |n| "version-#{n}" } + sequence(:sham_service_credentials) { |n| { "creds-key-#{n}" => "creds-val-#{n}" } } + sequence(:sham_uaa_id) { |n| "uaa-id-#{n}" } + sequence(:sham_domain) { |n| "domain-#{n}.example.com" } + sequence(:sham_host) { |n| "host-#{n}" } + sequence(:sham_guid) { |_n| SecureRandom.uuid.to_s } + sequence(:sham_extra) { |n| "extra-#{n}" } + sequence(:sham_instance_index) { |n| n } + sequence(:sham_unique_id) { |n| "unique-id-#{n}" } + sequence(:sham_status) { |_n| %w[active suspended canceled].sample(1).first } + sequence(:sham_error_message) { |n| "error-message-#{n}" } + sequence(:sham_sequence_id) { |n| n } + sequence(:sham_stack) { |n| "cflinuxfs-#{n}" } +end + +FactoryBot.find_definitions + +RSpec.configure do |config| + config.include FactoryBot::Syntax::Methods +end diff --git a/spec/support/factory_definitions/app_annotation_model.rb b/spec/support/factory_definitions/app_annotation_model.rb new file mode 100644 index 00000000000..61dd243599b --- /dev/null +++ b/spec/support/factory_definitions/app_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :app_annotation_model, class: 'VCAP::CloudController::AppAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/app_event.rb b/spec/support/factory_definitions/app_event.rb new file mode 100644 index 00000000000..d7cafedec5e --- /dev/null +++ b/spec/support/factory_definitions/app_event.rb @@ -0,0 +1,10 @@ +FactoryBot.define do + factory :app_event, class: 'VCAP::CloudController::AppEvent' do + association :app, factory: :process_model + instance_guid { generate(:guid) } + instance_index { generate(:instance_index) } + exit_status { Random.rand(256) } + exit_description { generate(:description) } + timestamp { Time.now.utc } + end +end diff --git a/spec/support/factory_definitions/app_label_model.rb b/spec/support/factory_definitions/app_label_model.rb new file mode 100644 index 00000000000..fa272938275 --- /dev/null +++ b/spec/support/factory_definitions/app_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :app_label_model, class: 'VCAP::CloudController::AppLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/app_model.rb b/spec/support/factory_definitions/app_model.rb new file mode 100644 index 00000000000..c1eafc9e5c4 --- /dev/null +++ b/spec/support/factory_definitions/app_model.rb @@ -0,0 +1,45 @@ +FactoryBot.define do + factory :app_model, class: 'VCAP::CloudController::AppModel' do + name { generate(:name) } + association :space + + transient do + lifecycle { :buildpack } + end + + lifecycle_type do + case lifecycle + when :buildpack then VCAP::CloudController::BuildpackLifecycleDataModel::LIFECYCLE_TYPE + when :cnb then VCAP::CloudController::CNBLifecycleDataModel::LIFECYCLE_TYPE + when :docker then VCAP::CloudController::DockerLifecycleDataModel::LIFECYCLE_TYPE + end + end + + after(:create) do |app, evaluator| + case evaluator.lifecycle + when :buildpack + VCAP::CloudController::BuildpackLifecycleDataModel.create(app: app, buildpacks: nil, stack: create(:stack).name) + when :cnb + VCAP::CloudController::CNBLifecycleDataModel.create(app: app, buildpacks: nil, stack: create(:stack).name) + end + app.reload + end + + trait :buildpack do + lifecycle { :buildpack } + end + + trait :docker do + lifecycle { :docker } + end + + trait :cnb do + lifecycle { :cnb } + end + + trait :all_fields do + association :droplet, factory: :droplet_model + buildpack_cache_sha256_checksum { generate(:guid) } + end + end +end diff --git a/spec/support/factory_definitions/app_usage_event.rb b/spec/support/factory_definitions/app_usage_event.rb new file mode 100644 index 00000000000..f38745c910e --- /dev/null +++ b/spec/support/factory_definitions/app_usage_event.rb @@ -0,0 +1,16 @@ +FactoryBot.define do + factory :app_usage_event, class: 'VCAP::CloudController::AppUsageEvent' do + state { 'STARTED' } + package_state { 'STAGED' } + instance_count { 1 } + memory_in_mb_per_instance { 564 } + app_guid { generate(:guid) } + app_name { generate(:name) } + org_guid { generate(:guid) } + space_guid { generate(:guid) } + space_name { generate(:name) } + buildpack_guid { generate(:guid) } + buildpack_name { generate(:name) } + process_type { 'web' } + end +end diff --git a/spec/support/factory_definitions/build_annotation_model.rb b/spec/support/factory_definitions/build_annotation_model.rb new file mode 100644 index 00000000000..e8cca361e7f --- /dev/null +++ b/spec/support/factory_definitions/build_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :build_annotation_model, class: 'VCAP::CloudController::BuildAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/build_label_model.rb b/spec/support/factory_definitions/build_label_model.rb new file mode 100644 index 00000000000..b107a23ec26 --- /dev/null +++ b/spec/support/factory_definitions/build_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :build_label_model, class: 'VCAP::CloudController::BuildLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/build_model.rb b/spec/support/factory_definitions/build_model.rb new file mode 100644 index 00000000000..45d8239aef5 --- /dev/null +++ b/spec/support/factory_definitions/build_model.rb @@ -0,0 +1,40 @@ +FactoryBot.define do + factory :build_model, class: 'VCAP::CloudController::BuildModel' do + guid { generate(:guid) } + association :app, factory: :app_model + state { VCAP::CloudController::BuildModel::STAGED_STATE } + + transient do + lifecycle { :buildpack } + end + + lifecycle_type do + case lifecycle + when :buildpack then VCAP::CloudController::BuildpackLifecycleDataModel::LIFECYCLE_TYPE + when :cnb then VCAP::CloudController::CNBLifecycleDataModel::LIFECYCLE_TYPE + when :docker then VCAP::CloudController::DockerLifecycleDataModel::LIFECYCLE_TYPE + end + end + + after(:create) do |build, evaluator| + case evaluator.lifecycle + when :buildpack + build.buildpack_lifecycle_data = VCAP::CloudController::BuildpackLifecycleDataModel.create(build: build, buildpacks: nil, stack: create(:stack).name) + when :cnb + build.cnb_lifecycle_data = VCAP::CloudController::CNBLifecycleDataModel.create(build: build, buildpacks: nil, stack: create(:stack).name) + end + end + + trait :docker do + lifecycle { :docker } + state { VCAP::CloudController::BuildModel::STAGING_STATE } + association :app, factory: %i[app_model docker] + end + + trait :cnb do + lifecycle { :cnb } + state { VCAP::CloudController::BuildModel::STAGING_STATE } + association :app, factory: %i[app_model cnb] + end + end +end diff --git a/spec/support/factory_definitions/buildpack.rb b/spec/support/factory_definitions/buildpack.rb new file mode 100644 index 00000000000..29388b6423d --- /dev/null +++ b/spec/support/factory_definitions/buildpack.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :buildpack, class: 'VCAP::CloudController::Buildpack' do + name { generate(:name) } + stack { VCAP::CloudController::Stack.default.name } + key { generate(:guid) } + position { VCAP::CloudController::Buildpack.count + 1 } + enabled { true } + filename { generate(:name) } + locked { false } + + trait :nil_stack do + stack { nil } + end + end +end diff --git a/spec/support/factory_definitions/buildpack_annotation_model.rb b/spec/support/factory_definitions/buildpack_annotation_model.rb new file mode 100644 index 00000000000..7394419ab09 --- /dev/null +++ b/spec/support/factory_definitions/buildpack_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :buildpack_annotation_model, class: 'VCAP::CloudController::BuildpackAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/buildpack_label_model.rb b/spec/support/factory_definitions/buildpack_label_model.rb new file mode 100644 index 00000000000..4ab0dd220b4 --- /dev/null +++ b/spec/support/factory_definitions/buildpack_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :buildpack_label_model, class: 'VCAP::CloudController::BuildpackLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/buildpack_lifecycle_buildpack_model.rb b/spec/support/factory_definitions/buildpack_lifecycle_buildpack_model.rb new file mode 100644 index 00000000000..769bc412962 --- /dev/null +++ b/spec/support/factory_definitions/buildpack_lifecycle_buildpack_model.rb @@ -0,0 +1,17 @@ +FactoryBot.define do + factory :buildpack_lifecycle_buildpack_model, class: 'VCAP::CloudController::BuildpackLifecycleBuildpackModel' do + admin_buildpack_name { create(:buildpack).name } + buildpack_url { nil } + + trait :all_fields do + buildpack_lifecycle_data_guid { create(:buildpack_lifecycle_data_model).guid } + version { generate(:version) } + buildpack_name { generate(:name) } + end + + trait :custom_buildpack do + admin_buildpack_name { nil } + buildpack_url { 'http://example.com/temporary' } + end + end +end diff --git a/spec/support/factory_definitions/buildpack_lifecycle_data_model.rb b/spec/support/factory_definitions/buildpack_lifecycle_data_model.rb new file mode 100644 index 00000000000..658dfc3cd01 --- /dev/null +++ b/spec/support/factory_definitions/buildpack_lifecycle_data_model.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :buildpack_lifecycle_data_model, class: 'VCAP::CloudController::BuildpackLifecycleDataModel' do + buildpacks { nil } + stack { create(:stack).name } + + trait :all_fields do + buildpacks { ['http://example.com/repo.git'] } + stack { create(:stack).name } + app_guid { generate(:guid) } + association :droplet, factory: :droplet_model + admin_buildpack_name { 'admin-bp' } + association :build, factory: :build_model + end + end +end diff --git a/spec/support/factory_definitions/cnb_lifecycle_data_model.rb b/spec/support/factory_definitions/cnb_lifecycle_data_model.rb new file mode 100644 index 00000000000..1b71c9170f1 --- /dev/null +++ b/spec/support/factory_definitions/cnb_lifecycle_data_model.rb @@ -0,0 +1,14 @@ +FactoryBot.define do + factory :cnb_lifecycle_data_model, class: 'VCAP::CloudController::CNBLifecycleDataModel' do + buildpacks { nil } + stack { create(:stack).name } + + trait :all_fields do + buildpacks { ['docker://docker.io/paketobuildpacks/nodejs'] } + stack { create(:stack).name } + app_guid { generate(:guid) } + association :droplet, factory: :droplet_model + association :build, factory: :build_model + end + end +end diff --git a/spec/support/factory_definitions/custom_buildpack.rb b/spec/support/factory_definitions/custom_buildpack.rb new file mode 100644 index 00000000000..0df3e4ec4ef --- /dev/null +++ b/spec/support/factory_definitions/custom_buildpack.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :custom_buildpack, class: 'VCAP::CloudController::CustomBuildpack' do + url { 'http://acme.com' } + + to_create { |instance| instance } + end +end diff --git a/spec/support/factory_definitions/deployment_annotation_model.rb b/spec/support/factory_definitions/deployment_annotation_model.rb new file mode 100644 index 00000000000..e0009bf0fe4 --- /dev/null +++ b/spec/support/factory_definitions/deployment_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :deployment_annotation_model, class: 'VCAP::CloudController::DeploymentAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/deployment_label_model.rb b/spec/support/factory_definitions/deployment_label_model.rb new file mode 100644 index 00000000000..2f99cc28ac5 --- /dev/null +++ b/spec/support/factory_definitions/deployment_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :deployment_label_model, class: 'VCAP::CloudController::DeploymentLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/deployment_model.rb b/spec/support/factory_definitions/deployment_model.rb new file mode 100644 index 00000000000..b18b62a2906 --- /dev/null +++ b/spec/support/factory_definitions/deployment_model.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :deployment_model, class: 'VCAP::CloudController::DeploymentModel' do + state { VCAP::CloudController::DeploymentModel::DEPLOYING_STATE } + status_value { VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE } + status_reason { VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON } + association :app, factory: :app_model + original_web_process_instance_count { 1 } + strategy { 'rolling' } + + after(:build) do |deployment| + deployment.droplet ||= create(:droplet_model, app: deployment.app) + deployment.deploying_web_process ||= create(:process_model, app: deployment.app, type: "web-deployment-#{SecureRandom.uuid}") + end + end +end diff --git a/spec/support/factory_definitions/deployment_model_test_factory.rb b/spec/support/factory_definitions/deployment_model_test_factory.rb new file mode 100644 index 00000000000..bce381b59fe --- /dev/null +++ b/spec/support/factory_definitions/deployment_model_test_factory.rb @@ -0,0 +1,49 @@ +FactoryBot.define do + factory :deployment_model_test_factory, class: 'VCAP::CloudController::DeploymentModel' do + skip_create + + transient do + app { nil } + droplet { nil } + previous_droplet { nil } + deploying_web_process { nil } + last_healthy_at { nil } + status_updated_at { nil } + state { nil } + status_value { nil } + status_reason { nil } + web_instances { nil } + memory_in_mb { nil } + disk_in_mb { nil } + log_rate_limit_in_bytes_per_second { nil } + strategy { nil } + max_in_flight { nil } + canary_steps { nil } + original_web_process_instance_count { nil } + error { nil } + end + + initialize_with do + attrs = {} + attrs[:app] = app if app + attrs[:droplet] = droplet if droplet + attrs[:previous_droplet] = previous_droplet if previous_droplet + attrs[:deploying_web_process] = deploying_web_process if deploying_web_process + attrs[:last_healthy_at] = last_healthy_at if last_healthy_at + attrs[:status_updated_at] = status_updated_at if status_updated_at + attrs[:state] = state if state + attrs[:status_value] = status_value if status_value + attrs[:status_reason] = status_reason if status_reason + attrs[:web_instances] = web_instances unless web_instances.nil? + attrs[:memory_in_mb] = memory_in_mb unless memory_in_mb.nil? + attrs[:disk_in_mb] = disk_in_mb unless disk_in_mb.nil? + attrs[:log_rate_limit_in_bytes_per_second] = log_rate_limit_in_bytes_per_second unless log_rate_limit_in_bytes_per_second.nil? + attrs[:strategy] = strategy if strategy + attrs[:max_in_flight] = max_in_flight unless max_in_flight.nil? + attrs[:canary_steps] = canary_steps if canary_steps + attrs[:original_web_process_instance_count] = original_web_process_instance_count unless original_web_process_instance_count.nil? + attrs[:error] = error if error + VCAP::CloudController::DeploymentModelTestFactory.make(attrs) + end + end +end diff --git a/spec/support/factory_definitions/deployment_process_model.rb b/spec/support/factory_definitions/deployment_process_model.rb new file mode 100644 index 00000000000..0495143c9c8 --- /dev/null +++ b/spec/support/factory_definitions/deployment_process_model.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :deployment_process_model, class: 'VCAP::CloudController::DeploymentProcessModel' do + association :deployment, factory: :deployment_model + process_guid { generate(:guid) } + process_type { VCAP::CloudController::ProcessTypes::WEB } + end +end diff --git a/spec/support/factory_definitions/domain.rb b/spec/support/factory_definitions/domain.rb new file mode 100644 index 00000000000..4711f9879e8 --- /dev/null +++ b/spec/support/factory_definitions/domain.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :domain, class: 'VCAP::CloudController::Domain' do + name { generate(:domain) } + end +end diff --git a/spec/support/factory_definitions/domain_annotation_model.rb b/spec/support/factory_definitions/domain_annotation_model.rb new file mode 100644 index 00000000000..bf0a33970c9 --- /dev/null +++ b/spec/support/factory_definitions/domain_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :domain_annotation_model, class: 'VCAP::CloudController::DomainAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/domain_label_model.rb b/spec/support/factory_definitions/domain_label_model.rb new file mode 100644 index 00000000000..35442a0c6e8 --- /dev/null +++ b/spec/support/factory_definitions/domain_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :domain_label_model, class: 'VCAP::CloudController::DomainLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/droplet_annotation_model.rb b/spec/support/factory_definitions/droplet_annotation_model.rb new file mode 100644 index 00000000000..644a6567d2e --- /dev/null +++ b/spec/support/factory_definitions/droplet_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :droplet_annotation_model, class: 'VCAP::CloudController::DropletAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/droplet_label_model.rb b/spec/support/factory_definitions/droplet_label_model.rb new file mode 100644 index 00000000000..8fdb6d84cd8 --- /dev/null +++ b/spec/support/factory_definitions/droplet_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :droplet_label_model, class: 'VCAP::CloudController::DropletLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/droplet_model.rb b/spec/support/factory_definitions/droplet_model.rb new file mode 100644 index 00000000000..2b0854375d0 --- /dev/null +++ b/spec/support/factory_definitions/droplet_model.rb @@ -0,0 +1,77 @@ +FactoryBot.define do + factory :droplet_model, class: 'VCAP::CloudController::DropletModel' do + guid { generate(:guid) } + process_types { { 'web' => '$HOME/boot.sh' } } + state { VCAP::CloudController::DropletModel::STAGED_STATE } + droplet_hash { generate(:guid) } + sha256_checksum { generate(:guid) } + + transient do + app { :unset } + lifecycle { :buildpack } + set_as_current_droplet { app == :unset } + end + + lifecycle_type do + case lifecycle + when :buildpack then VCAP::CloudController::BuildpackLifecycleDataModel::LIFECYCLE_TYPE + when :cnb then VCAP::CloudController::CNBLifecycleDataModel::LIFECYCLE_TYPE + when :docker then VCAP::CloudController::DockerLifecycleDataModel::LIFECYCLE_TYPE + end + end + + after(:build) do |droplet, evaluator| + if evaluator.app == :unset + droplet.app ||= VCAP::CloudController::AppModel[guid: droplet.app_guid] if droplet.app_guid + droplet.app ||= create(:app_model) + else + droplet.app = evaluator.app + end + end + + after(:create) do |droplet, evaluator| + droplet.app.update(droplet:) if droplet.app && evaluator.set_as_current_droplet && droplet.state == VCAP::CloudController::DropletModel::STAGED_STATE + case evaluator.lifecycle + when :buildpack + VCAP::CloudController::BuildpackLifecycleDataModel.create(droplet: droplet, buildpacks: nil, stack: create(:stack).name) + droplet.reload + when :cnb + VCAP::CloudController::CNBLifecycleDataModel.create(droplet: droplet, buildpacks: nil, stack: create(:stack).name) + droplet.reload + end + droplet.associations.delete(:buildpack_lifecycle_data) + droplet.associations.delete(:cnb_lifecycle_data) + end + + trait :buildpack do + lifecycle { :buildpack } + end + + trait :docker do + droplet_hash { nil } + sha256_checksum { nil } + process_types { nil } + lifecycle { :docker } + end + + trait :cnb do + lifecycle { :cnb } + end + + trait :all_fields do + execution_metadata { 'some-metadata' } + error_id { 'error-id' } + error_description { 'a-error' } + staging_memory_in_mb { 256 } + staging_disk_in_mb { 256 } + buildpack_receipt_buildpack { 'a-buildpack' } + buildpack_receipt_buildpack_guid { generate(:guid) } + buildpack_receipt_detect_output { 'buildpack-output' } + docker_receipt_image { 'docker-image' } + package_guid { generate(:guid) } + build_guid { generate(:guid) } + docker_receipt_username { 'a-user' } + sidecars { 'a-sidecar' } + end + end +end diff --git a/spec/support/factory_definitions/environment_variable_group.rb b/spec/support/factory_definitions/environment_variable_group.rb new file mode 100644 index 00000000000..5e965fcddc4 --- /dev/null +++ b/spec/support/factory_definitions/environment_variable_group.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :environment_variable_group, class: 'VCAP::CloudController::EnvironmentVariableGroup' do + name { "runtime-#{generate(:instance_index)}" } + environment_json do + { + 'MOTD' => 'Because of your smile, you make life more beautiful.', + 'COROPRATE_PROXY_SERVER' => 'abc:8080' + } + end + end +end diff --git a/spec/support/factory_definitions/event.rb b/spec/support/factory_definitions/event.rb new file mode 100644 index 00000000000..bc3af9d9937 --- /dev/null +++ b/spec/support/factory_definitions/event.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :event, class: 'VCAP::CloudController::Event' do + guid { generate(:guid) } + timestamp { Time.now.utc } + type { generate(:name) } + actor { generate(:guid) } + actor_type { generate(:name) } + actor_name { generate(:name) } + actee { generate(:guid) } + actee_type { generate(:name) } + actee_name { generate(:name) } + organization_guid { generate(:guid) } + metadata { {} } + end +end diff --git a/spec/support/factory_definitions/feature_flag.rb b/spec/support/factory_definitions/feature_flag.rb new file mode 100644 index 00000000000..b19827e768e --- /dev/null +++ b/spec/support/factory_definitions/feature_flag.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :feature_flag, class: 'VCAP::CloudController::FeatureFlag' do + name { generate(:feature_flag_name) } + enabled { false } + error_message { nil } + end +end diff --git a/spec/support/factory_definitions/isolation_segment_annotation_model.rb b/spec/support/factory_definitions/isolation_segment_annotation_model.rb new file mode 100644 index 00000000000..03dc50b06d3 --- /dev/null +++ b/spec/support/factory_definitions/isolation_segment_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :isolation_segment_annotation_model, class: 'VCAP::CloudController::IsolationSegmentAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/isolation_segment_label_model.rb b/spec/support/factory_definitions/isolation_segment_label_model.rb new file mode 100644 index 00000000000..20cb3c13bdd --- /dev/null +++ b/spec/support/factory_definitions/isolation_segment_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :isolation_segment_label_model, class: 'VCAP::CloudController::IsolationSegmentLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/isolation_segment_model.rb b/spec/support/factory_definitions/isolation_segment_model.rb new file mode 100644 index 00000000000..7a990c6ad6a --- /dev/null +++ b/spec/support/factory_definitions/isolation_segment_model.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :isolation_segment_model, class: 'VCAP::CloudController::IsolationSegmentModel' do + guid { generate(:guid) } + name { generate(:name) } + end +end diff --git a/spec/support/factory_definitions/job_warning_model.rb b/spec/support/factory_definitions/job_warning_model.rb new file mode 100644 index 00000000000..b9098ffa45f --- /dev/null +++ b/spec/support/factory_definitions/job_warning_model.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :job_warning_model, class: 'VCAP::CloudController::JobWarningModel' do + guid { generate(:guid) } + detail { 'job warning' } + association :job, factory: :pollable_job_model + end +end diff --git a/spec/support/factory_definitions/managed_service_instance.rb b/spec/support/factory_definitions/managed_service_instance.rb new file mode 100644 index 00000000000..bf69b8a0d7c --- /dev/null +++ b/spec/support/factory_definitions/managed_service_instance.rb @@ -0,0 +1,31 @@ +FactoryBot.define do + factory :managed_service_instance, class: 'VCAP::CloudController::ManagedServiceInstance' do + is_gateway_service { true } + name { generate(:name) } + credentials { generate(:service_credentials) } + association :space + association :service_plan + gateway_name { generate(:guid) } + maintenance_info { nil } + + trait :routing do + association :service_plan, factory: %i[service_plan routing] + end + + trait :volume_mount do + association :service_plan, factory: %i[service_plan volume_mount] + end + + trait :all_fields do + gateway_data { 'some data' } + dashboard_url { generate(:url) } + syslog_drain_url { generate(:url) } + tags { %w[a-tag another-tag] } + route_service_url { generate(:url) } + maintenance_info { 'maintenance info' } + end + + trait :v2 do + end + end +end diff --git a/spec/support/factory_definitions/organization.rb b/spec/support/factory_definitions/organization.rb new file mode 100644 index 00000000000..42da8ff116e --- /dev/null +++ b/spec/support/factory_definitions/organization.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :organization, class: 'VCAP::CloudController::Organization' do + name { generate(:name) } + association :quota_definition + status { 'active' } + end +end diff --git a/spec/support/factory_definitions/organization_annotation_model.rb b/spec/support/factory_definitions/organization_annotation_model.rb new file mode 100644 index 00000000000..772563fc787 --- /dev/null +++ b/spec/support/factory_definitions/organization_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :organization_annotation_model, class: 'VCAP::CloudController::OrganizationAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/organization_auditor.rb b/spec/support/factory_definitions/organization_auditor.rb new file mode 100644 index 00000000000..c754efb6ca9 --- /dev/null +++ b/spec/support/factory_definitions/organization_auditor.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :organization_auditor, class: 'VCAP::CloudController::OrganizationAuditor' do + guid { generate(:guid) } + association :user + association :organization + end +end diff --git a/spec/support/factory_definitions/organization_billing_manager.rb b/spec/support/factory_definitions/organization_billing_manager.rb new file mode 100644 index 00000000000..28fb872e981 --- /dev/null +++ b/spec/support/factory_definitions/organization_billing_manager.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :organization_billing_manager, class: 'VCAP::CloudController::OrganizationBillingManager' do + guid { generate(:guid) } + association :user + association :organization + end +end diff --git a/spec/support/factory_definitions/organization_label_model.rb b/spec/support/factory_definitions/organization_label_model.rb new file mode 100644 index 00000000000..b4286ba60f5 --- /dev/null +++ b/spec/support/factory_definitions/organization_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :organization_label_model, class: 'VCAP::CloudController::OrganizationLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/organization_manager.rb b/spec/support/factory_definitions/organization_manager.rb new file mode 100644 index 00000000000..0031cb69c7d --- /dev/null +++ b/spec/support/factory_definitions/organization_manager.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :organization_manager, class: 'VCAP::CloudController::OrganizationManager' do + guid { generate(:guid) } + association :user + association :organization + end +end diff --git a/spec/support/factory_definitions/organization_user.rb b/spec/support/factory_definitions/organization_user.rb new file mode 100644 index 00000000000..ba7b16fb617 --- /dev/null +++ b/spec/support/factory_definitions/organization_user.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :organization_user, class: 'VCAP::CloudController::OrganizationUser' do + guid { generate(:guid) } + association :user + association :organization + end +end diff --git a/spec/support/factory_definitions/orphaned_blob.rb b/spec/support/factory_definitions/orphaned_blob.rb new file mode 100644 index 00000000000..06a6d90c9c7 --- /dev/null +++ b/spec/support/factory_definitions/orphaned_blob.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :orphaned_blob, class: 'VCAP::CloudController::OrphanedBlob' do + end +end diff --git a/spec/support/factory_definitions/package_annotation_model.rb b/spec/support/factory_definitions/package_annotation_model.rb new file mode 100644 index 00000000000..906c08b90b4 --- /dev/null +++ b/spec/support/factory_definitions/package_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :package_annotation_model, class: 'VCAP::CloudController::PackageAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/package_label_model.rb b/spec/support/factory_definitions/package_label_model.rb new file mode 100644 index 00000000000..ea358c29e55 --- /dev/null +++ b/spec/support/factory_definitions/package_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :package_label_model, class: 'VCAP::CloudController::PackageLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/package_model.rb b/spec/support/factory_definitions/package_model.rb new file mode 100644 index 00000000000..8ff2009475f --- /dev/null +++ b/spec/support/factory_definitions/package_model.rb @@ -0,0 +1,23 @@ +FactoryBot.define do + factory :package_model, class: 'VCAP::CloudController::PackageModel' do + guid { generate(:guid) } + state { VCAP::CloudController::PackageModel::CREATED_STATE } + type { 'bits' } + association :app, factory: :app_model + sha256_checksum { generate(:guid) } + + trait :buildpack do + end + + trait :docker do + state { VCAP::CloudController::PackageModel::READY_STATE } + type { 'docker' } + docker_image { "org/image-#{generate(:guid)}:latest" } + sha256_checksum { nil } + end + + trait :cnb do + association :app, factory: %i[app_model cnb] + end + end +end diff --git a/spec/support/factory_definitions/pollable_job_model.rb b/spec/support/factory_definitions/pollable_job_model.rb new file mode 100644 index 00000000000..8edb95aee8c --- /dev/null +++ b/spec/support/factory_definitions/pollable_job_model.rb @@ -0,0 +1,9 @@ +FactoryBot.define do + factory :pollable_job_model, class: 'VCAP::CloudController::PollableJobModel' do + guid { generate(:guid) } + operation { 'app.job' } + state { 'COMPLETE' } + resource_guid { generate(:guid) } + resource_type { 'app' } + end +end diff --git a/spec/support/factory_definitions/private_domain.rb b/spec/support/factory_definitions/private_domain.rb new file mode 100644 index 00000000000..08cf6ae4f37 --- /dev/null +++ b/spec/support/factory_definitions/private_domain.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :private_domain, class: 'VCAP::CloudController::PrivateDomain' do + name { generate(:domain) } + association :owning_organization, factory: :organization + end +end diff --git a/spec/support/factory_definitions/process_annotation_model.rb b/spec/support/factory_definitions/process_annotation_model.rb new file mode 100644 index 00000000000..a00de15cc39 --- /dev/null +++ b/spec/support/factory_definitions/process_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :process_annotation_model, class: 'VCAP::CloudController::ProcessAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/process_label_model.rb b/spec/support/factory_definitions/process_label_model.rb new file mode 100644 index 00000000000..a46de89c70d --- /dev/null +++ b/spec/support/factory_definitions/process_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :process_label_model, class: 'VCAP::CloudController::ProcessLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/process_model.rb b/spec/support/factory_definitions/process_model.rb new file mode 100644 index 00000000000..78244657272 --- /dev/null +++ b/spec/support/factory_definitions/process_model.rb @@ -0,0 +1,30 @@ +FactoryBot.define do + factory :process_model, aliases: [:process], class: 'VCAP::CloudController::ProcessModel' do + instances { 1 } + type { 'web' } + diego { true } + association :app, factory: :app_model + metadata { {} } + + trait :process do + type { generate(:name) } + end + + trait :docker do + association :app, factory: %i[app_model docker] + type { generate(:name) } + end + + trait :cnb do + association :app, factory: %i[app_model cnb] + end + + trait :diego_runnable do + type { generate(:name) } + state { 'STARTED' } + after(:create) do |process| + create(:droplet_model, app: process.app, set_as_current_droplet: true) unless process.app.droplet + end + end + end +end diff --git a/spec/support/factory_definitions/quota_definition.rb b/spec/support/factory_definitions/quota_definition.rb new file mode 100644 index 00000000000..c9082d29249 --- /dev/null +++ b/spec/support/factory_definitions/quota_definition.rb @@ -0,0 +1,10 @@ +FactoryBot.define do + factory :quota_definition, class: 'VCAP::CloudController::QuotaDefinition' do + name { generate(:name) } + non_basic_services_allowed { true } + total_reserved_route_ports { 5 } + total_services { 60 } + total_routes { 1_000 } + memory_limit { 20_480 } + end +end diff --git a/spec/support/factory_definitions/revision_annotation_model.rb b/spec/support/factory_definitions/revision_annotation_model.rb new file mode 100644 index 00000000000..fc72c187c3f --- /dev/null +++ b/spec/support/factory_definitions/revision_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :revision_annotation_model, class: 'VCAP::CloudController::RevisionAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/revision_label_model.rb b/spec/support/factory_definitions/revision_label_model.rb new file mode 100644 index 00000000000..e2e28d164f7 --- /dev/null +++ b/spec/support/factory_definitions/revision_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :revision_label_model, class: 'VCAP::CloudController::RevisionLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/revision_model.rb b/spec/support/factory_definitions/revision_model.rb new file mode 100644 index 00000000000..b5069e8c24e --- /dev/null +++ b/spec/support/factory_definitions/revision_model.rb @@ -0,0 +1,53 @@ +FactoryBot.define do + factory :revision_model, class: 'VCAP::CloudController::RevisionModel' do + description { 'Initial revision' } + + transient do + app { nil } + create_process_commands { true } + end + + after(:build) do |revision, evaluator| + revision.app = evaluator.app if evaluator.app + revision.app ||= VCAP::CloudController::AppModel[guid: revision.app_guid] if revision.app_guid + revision.app ||= create(:app_model) + revision.droplet_guid ||= revision.app.droplet&.guid || create(:droplet_model, app: revision.app, set_as_current_droplet: false).guid + end + + after(:create) do |revision, evaluator| + next unless evaluator.create_process_commands + + droplet = VCAP::CloudController::DropletModel.find(guid: revision.droplet_guid) + next if droplet.nil? || droplet.process_types.blank? + + droplet.process_types.each_key do |type| + VCAP::CloudController::RevisionProcessCommandModel.create( + revision: revision, + process_type: type, + process_command: nil + ) + end + end + + trait :no_commands do + create_process_commands { false } + end + + trait :custom_web_command do + after(:create) do |revision, _evaluator| + droplet = VCAP::CloudController::DropletModel.find(guid: revision.droplet_guid) + next if droplet.nil? || droplet.process_types.blank? + + VCAP::CloudController::RevisionProcessCommandModel.where(revision_guid: revision.guid).each(&:destroy) + droplet.process_types.each_key do |type| + process_command = VCAP::CloudController::RevisionProcessCommandModel.create( + revision: revision, + process_type: type, + process_command: nil + ) + process_command.update(process_command: 'custom_web_command') if type == 'web' + end + end + end + end +end diff --git a/spec/support/factory_definitions/revision_process_command_model.rb b/spec/support/factory_definitions/revision_process_command_model.rb new file mode 100644 index 00000000000..99c214f168f --- /dev/null +++ b/spec/support/factory_definitions/revision_process_command_model.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :revision_process_command_model, class: 'VCAP::CloudController::RevisionProcessCommandModel' do + process_type { 'web' } + process_command { '$HOME/boot.sh' } + association :revision, factory: %i[revision_model no_commands] + end +end diff --git a/spec/support/factory_definitions/revision_sidecar_model.rb b/spec/support/factory_definitions/revision_sidecar_model.rb new file mode 100644 index 00000000000..7ec466b89ba --- /dev/null +++ b/spec/support/factory_definitions/revision_sidecar_model.rb @@ -0,0 +1,22 @@ +FactoryBot.define do + factory :revision_sidecar_model, class: 'VCAP::CloudController::RevisionSidecarModel' do + name { 'sleepy' } + command { 'sleep infinity' } + association :revision, factory: :revision_model + + transient do + create_process_types { true } + end + + after(:create) do |sidecar, evaluator| + next unless evaluator.create_process_types + + create(:revision_sidecar_process_type_model, revision_sidecar: sidecar) if sidecar.revision_sidecar_process_types.empty? + sidecar.refresh + end + + trait :no_process_types do + create_process_types { false } + end + end +end diff --git a/spec/support/factory_definitions/revision_sidecar_process_type_model.rb b/spec/support/factory_definitions/revision_sidecar_process_type_model.rb new file mode 100644 index 00000000000..662a96ae58f --- /dev/null +++ b/spec/support/factory_definitions/revision_sidecar_process_type_model.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :revision_sidecar_process_type_model, class: 'VCAP::CloudController::RevisionSidecarProcessTypeModel' do + type { 'web' } + association :revision_sidecar, factory: %i[revision_sidecar_model no_process_types] + end +end diff --git a/spec/support/factory_definitions/route.rb b/spec/support/factory_definitions/route.rb new file mode 100644 index 00000000000..abe92b31122 --- /dev/null +++ b/spec/support/factory_definitions/route.rb @@ -0,0 +1,17 @@ +FactoryBot.define do + factory :route, class: 'VCAP::CloudController::Route' do + transient do + organization { nil } + end + + space { association(:space, organization: organization || association(:organization)) } + domain { association(:private_domain, owning_organization: space.organization) } + host { generate(:host) } + + trait :tcp do + domain { association(:shared_domain, :tcp) } + port { generate(:port) } + host { '' } + end + end +end diff --git a/spec/support/factory_definitions/route_annotation_model.rb b/spec/support/factory_definitions/route_annotation_model.rb new file mode 100644 index 00000000000..93f68722c06 --- /dev/null +++ b/spec/support/factory_definitions/route_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :route_annotation_model, class: 'VCAP::CloudController::RouteAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/route_binding.rb b/spec/support/factory_definitions/route_binding.rb new file mode 100644 index 00000000000..e7ba3e0083b --- /dev/null +++ b/spec/support/factory_definitions/route_binding.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :route_binding, class: 'VCAP::CloudController::RouteBinding' do + service_instance do + service = create(:service, requires: ['route_forwarding']) + service_plan = create(:service_plan, service: service) + create(:managed_service_instance, service_plan: service_plan) + end + route { create(:route, space: service_instance.space) } # rubocop:disable FactoryBot/FactoryAssociationWithStrategy + route_service_url { generate(:url) } + end +end diff --git a/spec/support/factory_definitions/route_binding_label_model.rb b/spec/support/factory_definitions/route_binding_label_model.rb new file mode 100644 index 00000000000..62ef12e0157 --- /dev/null +++ b/spec/support/factory_definitions/route_binding_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :route_binding_label_model, class: 'VCAP::CloudController::RouteBindingLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/route_binding_operation.rb b/spec/support/factory_definitions/route_binding_operation.rb new file mode 100644 index 00000000000..0f072b65ef5 --- /dev/null +++ b/spec/support/factory_definitions/route_binding_operation.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :route_binding_operation, class: 'VCAP::CloudController::RouteBindingOperation' do + type { 'create' } + state { 'succeeded' } + description { 'description goes here' } + updated_at { Time.now.utc } + end +end diff --git a/spec/support/factory_definitions/route_label_model.rb b/spec/support/factory_definitions/route_label_model.rb new file mode 100644 index 00000000000..2ddd9fcd0b8 --- /dev/null +++ b/spec/support/factory_definitions/route_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :route_label_model, class: 'VCAP::CloudController::RouteLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/route_mapping_model.rb b/spec/support/factory_definitions/route_mapping_model.rb new file mode 100644 index 00000000000..764f126666f --- /dev/null +++ b/spec/support/factory_definitions/route_mapping_model.rb @@ -0,0 +1,13 @@ +FactoryBot.define do + factory :route_mapping_model, class: 'VCAP::CloudController::RouteMappingModel' do + association :app, factory: :app_model + route { create(:route, space: app.space) } # rubocop:disable FactoryBot/FactoryAssociationWithStrategy + process_type { 'web' } + app_port { -1 } + weight { nil } + + after(:create) do |route_mapping| + route_mapping.route.associations.delete(:apps) + end + end +end diff --git a/spec/support/factory_definitions/security_group.rb b/spec/support/factory_definitions/security_group.rb new file mode 100644 index 00000000000..2a81247bf68 --- /dev/null +++ b/spec/support/factory_definitions/security_group.rb @@ -0,0 +1,16 @@ +FactoryBot.define do + factory :security_group, class: 'VCAP::CloudController::SecurityGroup' do + name { generate(:name) } + rules do + [ + { + 'protocol' => 'udp', + 'ports' => '8080', + 'destination' => '198.41.191.47/1' + } + ] + end + running_default { false } + staging_default { false } + end +end diff --git a/spec/support/factory_definitions/service.rb b/spec/support/factory_definitions/service.rb new file mode 100644 index 00000000000..caf8f09ec71 --- /dev/null +++ b/spec/support/factory_definitions/service.rb @@ -0,0 +1,25 @@ +FactoryBot.define do + factory :service, class: 'VCAP::CloudController::Service' do + label { generate(:label) } + unique_id { SecureRandom.uuid } + bindable { true } + active { true } + association :service_broker + description { generate(:description) } + extra { '{"shareable": true, "documentationUrl": "https://some.url.for.docs/"}' } + instances_retrievable { false } + bindings_retrievable { false } + plan_updateable { false } + + trait :routing do + requires { ['route_forwarding'] } + end + + trait :volume_mount do + requires { ['volume_mount'] } + end + + trait :v2 do + end + end +end diff --git a/spec/support/factory_definitions/service_binding.rb b/spec/support/factory_definitions/service_binding.rb new file mode 100644 index 00000000000..27a5ace3041 --- /dev/null +++ b/spec/support/factory_definitions/service_binding.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :service_binding, class: 'VCAP::CloudController::ServiceBinding' do + credentials { generate(:service_credentials) } + association :service_instance, factory: :managed_service_instance + syslog_drain_url { nil } + type { 'app' } + name { nil } + guid { generate(:guid) } + app { create(:app_model, space: service_instance.space) } # rubocop:disable FactoryBot/FactoryAssociationWithStrategy + end +end diff --git a/spec/support/factory_definitions/service_binding_annotation_model.rb b/spec/support/factory_definitions/service_binding_annotation_model.rb new file mode 100644 index 00000000000..d09481f3ac4 --- /dev/null +++ b/spec/support/factory_definitions/service_binding_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_binding_annotation_model, class: 'VCAP::CloudController::ServiceBindingAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_binding_label_model.rb b/spec/support/factory_definitions/service_binding_label_model.rb new file mode 100644 index 00000000000..57c9d93bd35 --- /dev/null +++ b/spec/support/factory_definitions/service_binding_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_binding_label_model, class: 'VCAP::CloudController::ServiceBindingLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_binding_operation.rb b/spec/support/factory_definitions/service_binding_operation.rb new file mode 100644 index 00000000000..d7880fad2e7 --- /dev/null +++ b/spec/support/factory_definitions/service_binding_operation.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :service_binding_operation, class: 'VCAP::CloudController::ServiceBindingOperation' do + type { 'create' } + state { 'succeeded' } + description { 'description goes here' } + updated_at { Time.now.utc } + end +end diff --git a/spec/support/factory_definitions/service_broker.rb b/spec/support/factory_definitions/service_broker.rb new file mode 100644 index 00000000000..0e281b6a061 --- /dev/null +++ b/spec/support/factory_definitions/service_broker.rb @@ -0,0 +1,13 @@ +FactoryBot.define do + factory :service_broker, class: 'VCAP::CloudController::ServiceBroker' do + name { generate(:name) } + broker_url { generate(:url) } + state { VCAP::CloudController::ServiceBrokerStateEnum::AVAILABLE } + auth_username { generate(:auth_username) } + auth_password { generate(:auth_password) } + + trait :space_scoped do + space_id { create(:space).id } + end + end +end diff --git a/spec/support/factory_definitions/service_broker_annotation_model.rb b/spec/support/factory_definitions/service_broker_annotation_model.rb new file mode 100644 index 00000000000..a8556c6211c --- /dev/null +++ b/spec/support/factory_definitions/service_broker_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_broker_annotation_model, class: 'VCAP::CloudController::ServiceBrokerAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_broker_label_model.rb b/spec/support/factory_definitions/service_broker_label_model.rb new file mode 100644 index 00000000000..1611eb05548 --- /dev/null +++ b/spec/support/factory_definitions/service_broker_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_broker_label_model, class: 'VCAP::CloudController::ServiceBrokerLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_broker_update_request.rb b/spec/support/factory_definitions/service_broker_update_request.rb new file mode 100644 index 00000000000..12e54d6f062 --- /dev/null +++ b/spec/support/factory_definitions/service_broker_update_request.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :service_broker_update_request, class: 'VCAP::CloudController::ServiceBrokerUpdateRequest' do + name { generate(:name) } + broker_url { generate(:url) } + authentication { '{"credentials":{"username":"new-admin","password":"welcome"}}' } + service_broker_id { create(:service_broker).id } + end +end diff --git a/spec/support/factory_definitions/service_dashboard_client.rb b/spec/support/factory_definitions/service_dashboard_client.rb new file mode 100644 index 00000000000..b6c33c46069 --- /dev/null +++ b/spec/support/factory_definitions/service_dashboard_client.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :service_dashboard_client, class: 'VCAP::CloudController::ServiceDashboardClient' do + uaa_id { generate(:name) } + association :service_broker + end +end diff --git a/spec/support/factory_definitions/service_instance.rb b/spec/support/factory_definitions/service_instance.rb new file mode 100644 index 00000000000..aa08a7d0e6a --- /dev/null +++ b/spec/support/factory_definitions/service_instance.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :service_instance, class: 'VCAP::CloudController::ServiceInstance' do + name { generate(:name) } + credentials { generate(:service_credentials) } + association :space + end +end diff --git a/spec/support/factory_definitions/service_instance_annotation_model.rb b/spec/support/factory_definitions/service_instance_annotation_model.rb new file mode 100644 index 00000000000..7d3d3c1fc05 --- /dev/null +++ b/spec/support/factory_definitions/service_instance_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_instance_annotation_model, class: 'VCAP::CloudController::ServiceInstanceAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_instance_label_model.rb b/spec/support/factory_definitions/service_instance_label_model.rb new file mode 100644 index 00000000000..40f269d96d1 --- /dev/null +++ b/spec/support/factory_definitions/service_instance_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_instance_label_model, class: 'VCAP::CloudController::ServiceInstanceLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_instance_operation.rb b/spec/support/factory_definitions/service_instance_operation.rb new file mode 100644 index 00000000000..25bc016c8a3 --- /dev/null +++ b/spec/support/factory_definitions/service_instance_operation.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :service_instance_operation, class: 'VCAP::CloudController::ServiceInstanceOperation' do + type { 'create' } + state { 'succeeded' } + description { 'description goes here' } + updated_at { Time.now.utc } + end +end diff --git a/spec/support/factory_definitions/service_key.rb b/spec/support/factory_definitions/service_key.rb new file mode 100644 index 00000000000..8a5908bcbc3 --- /dev/null +++ b/spec/support/factory_definitions/service_key.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :service_key, class: 'VCAP::CloudController::ServiceKey' do + credentials { generate(:service_credentials) } + association :service_instance, factory: :managed_service_instance + name { generate(:name) } + + trait :credhub_reference do + credentials { { 'credhub-ref' => generate(:name) } } + end + end +end diff --git a/spec/support/factory_definitions/service_key_annotation_model.rb b/spec/support/factory_definitions/service_key_annotation_model.rb new file mode 100644 index 00000000000..cf45205a978 --- /dev/null +++ b/spec/support/factory_definitions/service_key_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_key_annotation_model, class: 'VCAP::CloudController::ServiceKeyAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_key_label_model.rb b/spec/support/factory_definitions/service_key_label_model.rb new file mode 100644 index 00000000000..a4a736866c8 --- /dev/null +++ b/spec/support/factory_definitions/service_key_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_key_label_model, class: 'VCAP::CloudController::ServiceKeyLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_key_operation.rb b/spec/support/factory_definitions/service_key_operation.rb new file mode 100644 index 00000000000..734b2d80a33 --- /dev/null +++ b/spec/support/factory_definitions/service_key_operation.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :service_key_operation, class: 'VCAP::CloudController::ServiceKeyOperation' do + type { 'create' } + state { 'succeeded' } + description { 'description goes here' } + updated_at { Time.now.utc } + end +end diff --git a/spec/support/factory_definitions/service_offering_annotation_model.rb b/spec/support/factory_definitions/service_offering_annotation_model.rb new file mode 100644 index 00000000000..a41b0abefcb --- /dev/null +++ b/spec/support/factory_definitions/service_offering_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_offering_annotation_model, class: 'VCAP::CloudController::ServiceOfferingAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_offering_label_model.rb b/spec/support/factory_definitions/service_offering_label_model.rb new file mode 100644 index 00000000000..990e65e938f --- /dev/null +++ b/spec/support/factory_definitions/service_offering_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_offering_label_model, class: 'VCAP::CloudController::ServiceOfferingLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_plan.rb b/spec/support/factory_definitions/service_plan.rb new file mode 100644 index 00000000000..3b6d4442ca2 --- /dev/null +++ b/spec/support/factory_definitions/service_plan.rb @@ -0,0 +1,22 @@ +FactoryBot.define do + factory :service_plan, class: 'VCAP::CloudController::ServicePlan' do + name { generate(:name) } + free { false } + description { generate(:description) } + association :service + unique_id { SecureRandom.uuid } + active { true } + maintenance_info { nil } + + trait :routing do + association :service, factory: %i[service routing] + end + + trait :volume_mount do + association :service, factory: %i[service volume_mount] + end + + trait :v2 do + end + end +end diff --git a/spec/support/factory_definitions/service_plan_annotation_model.rb b/spec/support/factory_definitions/service_plan_annotation_model.rb new file mode 100644 index 00000000000..4ac100ffdb7 --- /dev/null +++ b/spec/support/factory_definitions/service_plan_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_plan_annotation_model, class: 'VCAP::CloudController::ServicePlanAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_plan_label_model.rb b/spec/support/factory_definitions/service_plan_label_model.rb new file mode 100644 index 00000000000..ed43709a527 --- /dev/null +++ b/spec/support/factory_definitions/service_plan_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :service_plan_label_model, class: 'VCAP::CloudController::ServicePlanLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/service_plan_visibility.rb b/spec/support/factory_definitions/service_plan_visibility.rb new file mode 100644 index 00000000000..dcb2afffaa5 --- /dev/null +++ b/spec/support/factory_definitions/service_plan_visibility.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :service_plan_visibility, class: 'VCAP::CloudController::ServicePlanVisibility' do + service_plan { create(:service_plan, public: false) } # rubocop:disable FactoryBot/FactoryAssociationWithStrategy + association :organization + end +end diff --git a/spec/support/factory_definitions/service_usage_event.rb b/spec/support/factory_definitions/service_usage_event.rb new file mode 100644 index 00000000000..9244e70f730 --- /dev/null +++ b/spec/support/factory_definitions/service_usage_event.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :service_usage_event, class: 'VCAP::CloudController::ServiceUsageEvent' do + state { 'CREATED' } + org_guid { generate(:guid) } + space_guid { generate(:guid) } + space_name { generate(:name) } + service_instance_guid { generate(:guid) } + service_instance_name { generate(:name) } + service_instance_type { generate(:type) } + service_plan_guid { generate(:guid) } + service_plan_name { generate(:name) } + service_guid { generate(:guid) } + service_label { generate(:label) } + end +end diff --git a/spec/support/factory_definitions/shared_domain.rb b/spec/support/factory_definitions/shared_domain.rb new file mode 100644 index 00000000000..5666ec3aa84 --- /dev/null +++ b/spec/support/factory_definitions/shared_domain.rb @@ -0,0 +1,9 @@ +FactoryBot.define do + factory :shared_domain, class: 'VCAP::CloudController::SharedDomain' do + name { generate(:domain) } + + trait :tcp do + router_group_guid { generate(:guid) } + end + end +end diff --git a/spec/support/factory_definitions/sidecar_model.rb b/spec/support/factory_definitions/sidecar_model.rb new file mode 100644 index 00000000000..a9a57ab8879 --- /dev/null +++ b/spec/support/factory_definitions/sidecar_model.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :sidecar_model, class: 'VCAP::CloudController::SidecarModel' do + name { generate(:name) } + command { 'bundle exec rackup' } + association :app, factory: :app_model + origin { VCAP::CloudController::SidecarModel::ORIGIN_USER } + end +end diff --git a/spec/support/factory_definitions/sidecar_process_type_model.rb b/spec/support/factory_definitions/sidecar_process_type_model.rb new file mode 100644 index 00000000000..57461cb4276 --- /dev/null +++ b/spec/support/factory_definitions/sidecar_process_type_model.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :sidecar_process_type_model, class: 'VCAP::CloudController::SidecarProcessTypeModel' do + type { 'web' } + association :sidecar, factory: :sidecar_model + app_guid { sidecar.app_guid } + end +end diff --git a/spec/support/factory_definitions/space.rb b/spec/support/factory_definitions/space.rb new file mode 100644 index 00000000000..8525f624c25 --- /dev/null +++ b/spec/support/factory_definitions/space.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :space, class: 'VCAP::CloudController::Space' do + name { generate(:name) } + association :organization + end +end diff --git a/spec/support/factory_definitions/space_annotation_model.rb b/spec/support/factory_definitions/space_annotation_model.rb new file mode 100644 index 00000000000..73c9afa832f --- /dev/null +++ b/spec/support/factory_definitions/space_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :space_annotation_model, class: 'VCAP::CloudController::SpaceAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/space_auditor.rb b/spec/support/factory_definitions/space_auditor.rb new file mode 100644 index 00000000000..a7e301fb063 --- /dev/null +++ b/spec/support/factory_definitions/space_auditor.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :space_auditor, class: 'VCAP::CloudController::SpaceAuditor' do + guid { generate(:guid) } + association :user + association :space + end +end diff --git a/spec/support/factory_definitions/space_developer.rb b/spec/support/factory_definitions/space_developer.rb new file mode 100644 index 00000000000..af7cdebf95f --- /dev/null +++ b/spec/support/factory_definitions/space_developer.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :space_developer, class: 'VCAP::CloudController::SpaceDeveloper' do + guid { generate(:guid) } + association :user + association :space + end +end diff --git a/spec/support/factory_definitions/space_label_model.rb b/spec/support/factory_definitions/space_label_model.rb new file mode 100644 index 00000000000..abe7e1f8f9a --- /dev/null +++ b/spec/support/factory_definitions/space_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :space_label_model, class: 'VCAP::CloudController::SpaceLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/space_manager.rb b/spec/support/factory_definitions/space_manager.rb new file mode 100644 index 00000000000..55f3a20e384 --- /dev/null +++ b/spec/support/factory_definitions/space_manager.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :space_manager, class: 'VCAP::CloudController::SpaceManager' do + guid { generate(:guid) } + association :user + association :space + end +end diff --git a/spec/support/factory_definitions/space_quota_definition.rb b/spec/support/factory_definitions/space_quota_definition.rb new file mode 100644 index 00000000000..687cf19a740 --- /dev/null +++ b/spec/support/factory_definitions/space_quota_definition.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :space_quota_definition, class: 'VCAP::CloudController::SpaceQuotaDefinition' do + name { generate(:name) } + non_basic_services_allowed { true } + total_services { 60 } + total_service_keys { 600 } + total_routes { 1_000 } + memory_limit { 20_480 } + association :organization + end +end diff --git a/spec/support/factory_definitions/space_supporter.rb b/spec/support/factory_definitions/space_supporter.rb new file mode 100644 index 00000000000..53c6381ff2a --- /dev/null +++ b/spec/support/factory_definitions/space_supporter.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :space_supporter, class: 'VCAP::CloudController::SpaceSupporter' do + guid { generate(:guid) } + association :user + association :space + end +end diff --git a/spec/support/factory_definitions/stack.rb b/spec/support/factory_definitions/stack.rb new file mode 100644 index 00000000000..4523547bf71 --- /dev/null +++ b/spec/support/factory_definitions/stack.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :stack, class: 'VCAP::CloudController::Stack' do + name { generate(:stack_name) } + description { generate(:description) } + end +end diff --git a/spec/support/factory_definitions/stack_annotation_model.rb b/spec/support/factory_definitions/stack_annotation_model.rb new file mode 100644 index 00000000000..9e1bc2e5bf3 --- /dev/null +++ b/spec/support/factory_definitions/stack_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :stack_annotation_model, class: 'VCAP::CloudController::StackAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/stack_label_model.rb b/spec/support/factory_definitions/stack_label_model.rb new file mode 100644 index 00000000000..6c0a632b9c2 --- /dev/null +++ b/spec/support/factory_definitions/stack_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :stack_label_model, class: 'VCAP::CloudController::StackLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/task_annotation_model.rb b/spec/support/factory_definitions/task_annotation_model.rb new file mode 100644 index 00000000000..a87ebcfe462 --- /dev/null +++ b/spec/support/factory_definitions/task_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :task_annotation_model, class: 'VCAP::CloudController::TaskAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/task_label_model.rb b/spec/support/factory_definitions/task_label_model.rb new file mode 100644 index 00000000000..e61111a6a94 --- /dev/null +++ b/spec/support/factory_definitions/task_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :task_label_model, class: 'VCAP::CloudController::TaskLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/task_model.rb b/spec/support/factory_definitions/task_model.rb new file mode 100644 index 00000000000..31c31ccb4e1 --- /dev/null +++ b/spec/support/factory_definitions/task_model.rb @@ -0,0 +1,49 @@ +FactoryBot.define do + factory :task_model, class: 'VCAP::CloudController::TaskModel' do + guid { generate(:guid) } + association :app, factory: :app_model + name { generate(:name) } + command { 'bundle exec rake' } + state { VCAP::CloudController::TaskModel::RUNNING_STATE } + memory_in_mb { 256 } + sequence_id { generate(:sequence_id) } + + transient do + skip_default_droplet { false } + end + + after(:build) do |task, evaluator| + task.droplet ||= create(:droplet_model, app: task.app, set_as_current_droplet: false) unless evaluator.skip_default_droplet + end + + trait :docker do + association :app, factory: %i[app_model docker] + after(:build) do |task| + task.droplet = create(:droplet_model, :docker, app: task.app, set_as_current_droplet: false) unless task.droplet&.docker? + end + end + + trait :cnb do + association :app, factory: %i[app_model cnb] + after(:build) do |task| + task.droplet = create(:droplet_model, :cnb, app: task.app, set_as_current_droplet: false) unless task.droplet&.cnb? + end + end + + trait :running do + state { VCAP::CloudController::TaskModel::RUNNING_STATE } + end + + trait :canceling do + state { VCAP::CloudController::TaskModel::CANCELING_STATE } + end + + trait :succeeded do + state { VCAP::CloudController::TaskModel::SUCCEEDED_STATE } + end + + trait :pending do + state { VCAP::CloudController::TaskModel::PENDING_STATE } + end + end +end diff --git a/spec/support/factory_definitions/test_model.rb b/spec/support/factory_definitions/test_model.rb new file mode 100644 index 00000000000..bbf0c496f7a --- /dev/null +++ b/spec/support/factory_definitions/test_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :test_model, class: 'VCAP::CloudController::TestModel' do + required_attr { true } + end +end diff --git a/spec/support/factory_definitions/test_model_many_to_many.rb b/spec/support/factory_definitions/test_model_many_to_many.rb new file mode 100644 index 00000000000..e807733e26e --- /dev/null +++ b/spec/support/factory_definitions/test_model_many_to_many.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :test_model_many_to_many, class: 'VCAP::CloudController::TestModelManyToMany' do + end +end diff --git a/spec/support/factory_definitions/test_model_many_to_one.rb b/spec/support/factory_definitions/test_model_many_to_one.rb new file mode 100644 index 00000000000..6de6e507906 --- /dev/null +++ b/spec/support/factory_definitions/test_model_many_to_one.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :test_model_many_to_one, class: 'VCAP::CloudController::TestModelManyToOne' do + end +end diff --git a/spec/support/factory_definitions/test_model_redact.rb b/spec/support/factory_definitions/test_model_redact.rb new file mode 100644 index 00000000000..3f33309fedd --- /dev/null +++ b/spec/support/factory_definitions/test_model_redact.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :test_model_redact, class: 'VCAP::CloudController::TestModelRedact' do + end +end diff --git a/spec/support/factory_definitions/test_model_second_level.rb b/spec/support/factory_definitions/test_model_second_level.rb new file mode 100644 index 00000000000..2a67c91cae5 --- /dev/null +++ b/spec/support/factory_definitions/test_model_second_level.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :test_model_second_level, class: 'VCAP::CloudController::TestModelSecondLevel' do + end +end diff --git a/spec/support/factory_definitions/user.rb b/spec/support/factory_definitions/user.rb new file mode 100644 index 00000000000..475712fbd87 --- /dev/null +++ b/spec/support/factory_definitions/user.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :user, class: 'VCAP::CloudController::User' do + guid { Sham.uaa_id } + end +end diff --git a/spec/support/factory_definitions/user_annotation_model.rb b/spec/support/factory_definitions/user_annotation_model.rb new file mode 100644 index 00000000000..7b38a6c61dd --- /dev/null +++ b/spec/support/factory_definitions/user_annotation_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :user_annotation_model, class: 'VCAP::CloudController::UserAnnotationModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/user_label_model.rb b/spec/support/factory_definitions/user_label_model.rb new file mode 100644 index 00000000000..41a937ef75c --- /dev/null +++ b/spec/support/factory_definitions/user_label_model.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :user_label_model, class: 'VCAP::CloudController::UserLabelModel' do + guid { generate(:guid) } + end +end diff --git a/spec/support/factory_definitions/user_provided_service_instance.rb b/spec/support/factory_definitions/user_provided_service_instance.rb new file mode 100644 index 00000000000..252d31bf482 --- /dev/null +++ b/spec/support/factory_definitions/user_provided_service_instance.rb @@ -0,0 +1,13 @@ +FactoryBot.define do + factory :user_provided_service_instance, class: 'VCAP::CloudController::UserProvidedServiceInstance' do + name { generate(:name) } + credentials { generate(:service_credentials) } + syslog_drain_url { generate(:url) } + association :space + is_gateway_service { false } + + trait :routing do + route_service_url { generate(:url) } + end + end +end diff --git a/spec/support/fakes/blueprints.rb b/spec/support/fakes/blueprints.rb deleted file mode 100644 index d3fd5cdb52a..00000000000 --- a/spec/support/fakes/blueprints.rb +++ /dev/null @@ -1,868 +0,0 @@ -require 'securerandom' -require_relative 'process_model_factory' -require_relative 'deployment_model_test_factory' -require_relative '../test_models' - -Sham.define do - email { |index| "email-#{index}@somedomain.com" } - name { |index| "name-#{index}" } - label { |index| "label-#{index}" } - token { |index| "token-#{index}" } - auth_username { |index| "auth_username-#{index}" } - auth_password { |index| "auth_password-#{index}" } - provider { |index| "provider-#{index}" } - port { |index| index + 1000 } - url { |index| "https://foo.com/url-#{index}" } - type { |index| "type-#{index}" } - description { |index| "desc-#{index}" } - long_description { |index| "long description-#{index} over 255 characters #{'-' * 255}" } - version { |index| "version-#{index}" } - service_credentials { |index| { "creds-key-#{index}" => "creds-val-#{index}" } } - uaa_id { |index| "uaa-id-#{index}" } - domain { |index| "domain-#{index}.example.com" } - host { |index| "host-#{index}" } - guid { |_| SecureRandom.uuid.to_s } - extra { |index| "extra-#{index}" } - instance_index { |index| index } - unique_id { |index| "unique-id-#{index}" } - status { |_| %w[active suspended canceled].sample(1).first } - error_message { |index| "error-message-#{index}" } - sequence_id { |index| index } - stack { |index| "cflinuxfs-#{index}" } -end - -module VCAP::CloudController - %w[App Build Buildpack Deployment Domain Droplet IsolationSegment Organization Package - Process Revision Route RouteBinding ServiceBinding ServiceKey ServiceInstance ServiceOffering ServiceBroker Space Stack - ServicePlan Task User].each do |root| - "VCAP::CloudController::#{root}LabelModel".constantize.blueprint {} - "VCAP::CloudController::#{root}AnnotationModel".constantize.blueprint {} - end - - IsolationSegmentModel.blueprint do - guid { Sham.guid } - name { Sham.name } - end - - AppModel.blueprint do - name { Sham.name } - space { Space.make } - lifecycle_type { BuildpackLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { BuildpackLifecycleDataModel.make(app: object.save) } - cnb_lifecycle_data { nil.tap { |_| object.save } } - end - - AppModel.blueprint(:all_fields) do - droplet { DropletModel.make } - buildpack_cache_sha256_checksum { Sham.guid } - end - - AppModel.blueprint(:cnb) do - name { Sham.name } - space { Space.make } - lifecycle_type { CNBLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { CNBLifecycleDataModel.make(app: object.save) } - end - - AppModel.blueprint(:docker) do - name { Sham.name } - space { Space.make } - lifecycle_type { DockerLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { nil.tap { |_| object.save } } - end - - BuildModel.blueprint do - guid { Sham.guid } - state { VCAP::CloudController::BuildModel::STAGED_STATE } - lifecycle_type { BuildpackLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { BuildpackLifecycleDataModel.make(build: object.save) } - cnb_lifecycle_data { nil.tap { |_| object.save } } - app { AppModel.make } - end - - BuildModel.blueprint(:docker) do - guid { Sham.guid } - state { VCAP::CloudController::BuildModel::STAGING_STATE } - lifecycle_type { DockerLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { nil.tap { |_| object.save } } - app { AppModel.make(:docker) } - end - - BuildModel.blueprint(:cnb) do - guid { Sham.guid } - state { VCAP::CloudController::BuildModel::STAGING_STATE } - lifecycle_type { CNBLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { CNBLifecycleDataModel.make(build: object.save) } - app { AppModel.make(:cnb) } - end - - PackageModel.blueprint do - guid { Sham.guid } - state { VCAP::CloudController::PackageModel::CREATED_STATE } - type { 'bits' } - app { AppModel.make } - sha256_checksum { Sham.guid } - end - - PackageModel.blueprint(:cnb) do - guid { Sham.guid } - state { VCAP::CloudController::PackageModel::CREATED_STATE } - type { 'bits' } - app { AppModel.make(:cnb) } - sha256_checksum { Sham.guid } - end - - PackageModel.blueprint(:docker) do - guid { Sham.guid } - state { VCAP::CloudController::PackageModel::READY_STATE } - type { 'docker' } - app { AppModel.make } - docker_image { "org/image-#{Sham.guid}:latest" } - end - - DropletModel.blueprint do - guid { Sham.guid } - process_types { { 'web' => '$HOME/boot.sh' } } - state { VCAP::CloudController::DropletModel::STAGED_STATE } - droplet_hash { Sham.guid } - sha256_checksum { Sham.guid } - lifecycle_type { BuildpackLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { BuildpackLifecycleDataModel.make(droplet: object.save) } - cnb_lifecycle_data { nil.tap { |_| object.save } } - app { AppModel.make(droplet: object.save) } - end - - DropletModel.blueprint(:all_fields) do - execution_metadata { 'some-metadata' } - error_id { 'error-id' } - error_description { 'a-error' } - staging_memory_in_mb { 256 } - staging_disk_in_mb { 256 } - buildpack_receipt_buildpack { 'a-buildpack' } - buildpack_receipt_buildpack_guid { Sham.guid } - buildpack_receipt_detect_output { 'buildpack-output' } - docker_receipt_image { 'docker-image' } - package_guid { Sham.guid } - build_guid { Sham.guid } - docker_receipt_username { 'a-user' } - sidecars { 'a-sidecar' } - end - - DropletModel.blueprint(:cnb) do - guid { Sham.guid } - process_types { { 'web' => '$HOME/boot.sh' } } - state { VCAP::CloudController::DropletModel::STAGED_STATE } - droplet_hash { Sham.guid } - sha256_checksum { Sham.guid } - lifecycle_type { CNBLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { CNBLifecycleDataModel.make(droplet: object.save) } - app { AppModel.make(:cnb, droplet: object.save) } - end - - DropletModel.blueprint(:docker) do - guid { Sham.guid } - process_types { nil } - state { VCAP::CloudController::DropletModel::STAGED_STATE } - droplet_hash { nil } - sha256_checksum { nil } - lifecycle_type { DockerLifecycleDataModel::LIFECYCLE_TYPE } - buildpack_lifecycle_data { nil.tap { |_| object.save } } - cnb_lifecycle_data { nil.tap { |_| object.save } } - app { AppModel.make(:docker, droplet: object.save) } - end - - DeploymentModel.blueprint do - state { VCAP::CloudController::DeploymentModel::DEPLOYING_STATE } - status_value { VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE } - status_reason { VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON } - app { AppModel.make } - droplet { DropletModel.make(app:) } - deploying_web_process { ProcessModel.make(app: app, type: "web-deployment-#{Sham.guid}") } - original_web_process_instance_count { 1 } - strategy { 'rolling' } - end - - DeploymentProcessModel.blueprint do - deployment { DeploymentModel.make } - process_guid { Sham.guid } - process_type { ProcessTypes::WEB } - end - - TaskModel.blueprint do - guid { Sham.guid } - app { AppModel.make } - name { Sham.name } - droplet { DropletModel.make(app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::RUNNING_STATE } - memory_in_mb { 256 } - disk_in_mb {} - sequence_id { Sham.sequence_id } - failure_reason {} - end - - TaskModel.blueprint(:docker) do - guid { Sham.guid } - app { AppModel.make(:docker) } - name { Sham.name } - droplet { DropletModel.make(:docker, app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::RUNNING_STATE } - memory_in_mb { 256 } - disk_in_mb {} - sequence_id { Sham.sequence_id } - failure_reason {} - end - - TaskModel.blueprint(:cnb) do - guid { Sham.guid } - app { AppModel.make(:cnb) } - name { Sham.name } - droplet { DropletModel.make(:cnb, app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::RUNNING_STATE } - memory_in_mb { 256 } - disk_in_mb {} - sequence_id { Sham.sequence_id } - failure_reason {} - end - - TaskModel.blueprint(:running) do - guid { Sham.guid } - app { AppModel.make } - name { Sham.name } - droplet { DropletModel.make(app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::RUNNING_STATE } - memory_in_mb { 256 } - sequence_id { Sham.sequence_id } - end - - TaskModel.blueprint(:canceling) do - guid { Sham.guid } - app { AppModel.make } - name { Sham.name } - droplet { DropletModel.make(app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::CANCELING_STATE } - memory_in_mb { 256 } - sequence_id { Sham.sequence_id } - end - - TaskModel.blueprint(:succeeded) do - guid { Sham.guid } - app { AppModel.make } - name { Sham.name } - droplet { DropletModel.make(app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::SUCCEEDED_STATE } - memory_in_mb { 256 } - sequence_id { Sham.sequence_id } - end - - TaskModel.blueprint(:pending) do - guid { Sham.guid } - app { AppModel.make } - name { Sham.name } - droplet { DropletModel.make(app:) } - command { 'bundle exec rake' } - state { VCAP::CloudController::TaskModel::PENDING_STATE } - memory_in_mb { 256 } - sequence_id { Sham.sequence_id } - end - - PollableJobModel.blueprint do - guid { Sham.guid } - operation { 'app.job' } - state { 'COMPLETE' } - resource_guid { Sham.guid } - resource_type { 'app' } - end - - JobWarningModel.blueprint do - guid { Sham.guid } - detail { 'job warning' } - end - - User.blueprint do - guid { Sham.uaa_id } - end - - Organization.blueprint do - name { Sham.name } - quota_definition { QuotaDefinition.make } - status { 'active' } - end - - Domain.blueprint do - name { Sham.domain } - end - - PrivateDomain.blueprint do - name { Sham.domain } - owning_organization { Organization.make } - end - - SharedDomain.blueprint do - name { Sham.domain } - end - - SharedDomain.blueprint(:tcp) do - router_group_guid { Sham.guid } - end - - Route.blueprint do - space { Space.make } - domain { PrivateDomain.make(owning_organization: space.organization) } - host { Sham.host } - end - - Route.blueprint(:tcp) do - port { Sham.port } - domain { SharedDomain.make(:tcp) } - end - - Space.blueprint do - name { Sham.name } - organization { Organization.make } - end - - SpaceSupporter.blueprint do - guid { Sham.guid } - user { User.make } - space { Space.make } - end - - SpaceAuditor.blueprint do - guid { Sham.guid } - user { User.make } - space { Space.make } - end - - SpaceDeveloper.blueprint do - guid { Sham.guid } - user { User.make } - space { Space.make } - end - - SpaceManager.blueprint do - guid { Sham.guid } - user { User.make } - space { Space.make } - end - - OrganizationManager.blueprint do - guid { Sham.guid } - user { User.make } - organization { Organization.make } - end - - OrganizationBillingManager.blueprint do - guid { Sham.guid } - user { User.make } - organization { Organization.make } - end - - OrganizationUser.blueprint do - guid { Sham.guid } - user { User.make } - organization { Organization.make } - end - - OrganizationAuditor.blueprint do - guid { Sham.guid } - user { User.make } - organization { Organization.make } - end - - Service.blueprint do - label { Sham.label } - unique_id { SecureRandom.uuid } - bindable { true } - active { true } - service_broker { ServiceBroker.make } - description { Sham.description } # remove hack - extra { '{"shareable": true, "documentationUrl": "https://some.url.for.docs/"}' } - instances_retrievable { false } - bindings_retrievable { false } - plan_updateable { false } - end - - Service.blueprint(:routing) do - requires { ['route_forwarding'] } - end - - Service.blueprint(:volume_mount) do - requires { ['volume_mount'] } - end - - ServiceInstance.blueprint do - name { Sham.name } - credentials { Sham.service_credentials } - space { Space.make } - end - - ManagedServiceInstance.blueprint do - is_gateway_service { true } - name { Sham.name } - credentials { Sham.service_credentials } - space { Space.make } - service_plan { ServicePlan.make } - gateway_name { Sham.guid } - maintenance_info {} - end - - ManagedServiceInstance.blueprint(:all_fields) do - gateway_data { 'some data' } - dashboard_url { Sham.url } - syslog_drain_url { Sham.url } - tags { %w[a-tag another-tag] } - route_service_url { Sham.url } - maintenance_info { 'maintenance info' } - end - - ManagedServiceInstance.blueprint(:routing) do - service_plan { ServicePlan.make(:routing) } - end - - ManagedServiceInstance.blueprint(:volume_mount) do - service_plan { ServicePlan.make(:volume_mount) } - end - - UserProvidedServiceInstance.blueprint do - name { Sham.name } - credentials { Sham.service_credentials } - syslog_drain_url { Sham.url } - space { Space.make } - is_gateway_service { false } - end - - UserProvidedServiceInstance.blueprint(:routing) do - name { Sham.name } - credentials { Sham.service_credentials } - route_service_url { Sham.url } - syslog_drain_url { Sham.url } - space { Space.make } - is_gateway_service { false } - end - - ServiceInstanceOperation.blueprint do - type { 'create' } - state { 'succeeded' } - description { 'description goes here' } - updated_at { Time.now.utc } - end - - ServiceBindingOperation.blueprint do - type { 'create' } - state { 'succeeded' } - description { 'description goes here' } - updated_at { Time.now.utc } - end - - ServiceKeyOperation.blueprint do - type { 'create' } - state { 'succeeded' } - description { 'description goes here' } - updated_at { Time.now.utc } - end - - Stack.blueprint do - name { Sham.name } - description { Sham.description } - end - - # if you want to create a process with droplet, use ProcessModelFactory.make - # This is because the lack of factory hooks in Machinist. - ProcessModel.blueprint do - instances { 1 } - type { 'web' } - diego { true } - app { AppModel.make } - metadata { {} } - end - - ProcessModel.blueprint(:process) do - app { AppModel.make } - diego { true } - instances { 1 } - type { Sham.name } - metadata { {} } - end - - ProcessModel.blueprint(:cnb) do - instances { 1 } - type { 'web' } - diego { true } - app { AppModel.make(:cnb) } - metadata { {} } - end - - ProcessModel.blueprint(:diego_runnable) do - app { AppModel.make(droplet: DropletModel.make) } - diego { true } - instances { 1 } - type { Sham.name } - metadata { {} } - state { 'STARTED' } - end - - ProcessModel.blueprint(:docker) do - app { AppModel.make(:docker) } - diego { true } - instances { 1 } - type { Sham.name } - metadata { {} } - end - - ProcessModel.blueprint(:nonmatching_guid) do - instances { 1 } - type { 'web' } - diego { true } - app { AppModel.make } - metadata { {} } - guid { Sham.guid } - end - - RouteBinding.blueprint do - service_instance { ManagedServiceInstance.make(:routing) } - route { Route.make space: service_instance.space } - route_service_url { Sham.url } - end - - RouteBindingOperation.blueprint do - type { 'create' } - state { 'succeeded' } - description { 'description goes here' } - updated_at { Time.now.utc } - end - - ServiceBinding.blueprint do - credentials { Sham.service_credentials } - service_instance { ManagedServiceInstance.make } - app { AppModel.make(space: service_instance.space) } - syslog_drain_url { nil } - type { 'app' } - name { nil } - guid { Sham.guid } - end - - ServiceKey.blueprint do - credentials { Sham.service_credentials } - service_instance { ManagedServiceInstance.make } - name { Sham.name } - end - - ServiceKey.blueprint(:credhub_reference) do - credentials { { 'credhub-ref' => Sham.name } } - service_instance { ManagedServiceInstance.make } - name { Sham.name } - end - - ServiceBroker.blueprint do - name { Sham.name } - broker_url { Sham.url } - state { ServiceBrokerStateEnum::AVAILABLE } - auth_username { Sham.auth_username } - auth_password { Sham.auth_password } - end - - ServiceBroker.blueprint(:space_scoped) do - space_id { Space.make.id } - end - - ServiceBrokerUpdateRequest.blueprint do - name { Sham.name } - broker_url { Sham.url } - authentication { '{"credentials":{"username":"new-admin","password":"welcome"}}' } - service_broker_id {} - fk_service_brokers_id {} - end - - ServiceDashboardClient.blueprint do - uaa_id { Sham.name } - service_broker { ServiceBroker.make } - end - - ServicePlan.blueprint do - name { Sham.name } - free { false } - description { Sham.description } - service { Service.make } - unique_id { SecureRandom.uuid } - active { true } - maintenance_info {} - end - - ServicePlan.blueprint(:routing) do - service { Service.make(:routing) } - end - - ServicePlan.blueprint(:volume_mount) do - service { Service.make(:volume_mount) } - end - - ServicePlanVisibility.blueprint do - service_plan { ServicePlan.make(public: false) } - organization { Organization.make } - end - - Event.blueprint do - guid { Sham.guid } - timestamp { Time.now.utc } - type { Sham.name } - actor { Sham.guid } - actor_type { Sham.name } - actor_name { Sham.name } - actee { Sham.guid } - actee_type { Sham.name } - actee_name { Sham.name } - organization_guid { Sham.guid } - metadata { {} } - end - - AppEvent.blueprint do - app { ProcessModelFactory.make } - instance_guid { Sham.guid } - instance_index { Sham.instance_index } - exit_status { Random.rand(256) } - exit_description { Sham.description } - timestamp { Time.now.utc } - end - - QuotaDefinition.blueprint do - name { Sham.name } - non_basic_services_allowed { true } - total_reserved_route_ports { 5 } - total_services { 60 } - total_routes { 1_000 } - memory_limit { 20_480 } # 20 GB - end - - Buildpack.blueprint do - name { Sham.name } - stack { Stack.default.name } - key { Sham.guid } - position { Buildpack.count + 1 } - enabled { true } - filename { Sham.name } - locked { false } - end - - Buildpack.blueprint(:nil_stack) do - stack { nil } - end - - CustomBuildpack.blueprint do - url { 'http://acme.com' } - end - - BuildpackLifecycleDataModel.blueprint do - buildpacks { nil } - stack { Stack.make.name } - end - - BuildpackLifecycleDataModel.blueprint(:all_fields) do - buildpacks { ['http://example.com/repo.git'] } - stack { Stack.make.name } - app_guid { Sham.guid } - droplet { DropletModel.make } - admin_buildpack_name { 'admin-bp' } - build { BuildModel.make } - end - - CNBLifecycleDataModel.blueprint do - buildpacks { nil } - stack { Stack.make.name } - end - - CNBLifecycleDataModel.blueprint(:all_fields) do - buildpacks { ['docker://docker.io/paketobuildpacks/nodejs'] } - stack { Stack.make.name } - app_guid { Sham.guid } - droplet { DropletModel.make } - build { BuildModel.make } - end - - BuildpackLifecycleBuildpackModel.blueprint do - admin_buildpack_name { Buildpack.make(name: 'ruby').name } - buildpack_url { nil } - end - - BuildpackLifecycleBuildpackModel.blueprint(:all_fields) do - buildpack_lifecycle_data_guid { BuildpackLifecycleDataModel.make.guid } - version { Sham.version } - buildpack_name { Sham.name } - end - - BuildpackLifecycleBuildpackModel.blueprint(:custom_buildpack) do - admin_buildpack_name { nil } - buildpack_url { 'http://example.com/temporary' } - end - - AppUsageEvent.blueprint do - state { 'STARTED' } - package_state { 'STAGED' } - instance_count { 1 } - memory_in_mb_per_instance { 564 } - app_guid { Sham.guid } - app_name { Sham.name } - org_guid { Sham.guid } - space_guid { Sham.guid } - space_name { Sham.name } - buildpack_guid { Sham.guid } - buildpack_name { Sham.name } - process_type { 'web' } - end - - ServiceUsageEvent.blueprint do - state { 'CREATED' } - org_guid { Sham.guid } - space_guid { Sham.guid } - space_name { Sham.name } - service_instance_guid { Sham.guid } - service_instance_name { Sham.name } - service_instance_type { Sham.type } - service_plan_guid { Sham.guid } - service_plan_name { Sham.name } - service_guid { Sham.guid } - service_label { Sham.label } - end - - SecurityGroup.blueprint do - name { Sham.name } - rules do - [ - { - 'protocol' => 'udp', - 'ports' => '8080', - 'destination' => '198.41.191.47/1' - } - ] - end - running_default { false } - staging_default { false } - end - - SpaceQuotaDefinition.blueprint do - name { Sham.name } - non_basic_services_allowed { true } - total_services { 60 } - total_service_keys { 600 } - total_routes { 1_000 } - memory_limit { 20_480 } # 20 GB - organization { Organization.make } - end - - EnvironmentVariableGroup.blueprint do - name { "runtime-#{Sham.instance_index}" } - environment_json do - { - 'MOTD' => 'Because of your smile, you make life more beautiful.', - 'COROPRATE_PROXY_SERVER' => 'abc:8080' - } - end - end - - FeatureFlag.blueprint do - name { 'user_org_creation' } - enabled { false } - error_message { Sham.error_message } - end - - RouteMappingModel.blueprint do - app { AppModel.make } - route { Route.make(space: app.space) } - process_type { 'web' } - app_port { -1 } - weight { nil } - end - - SidecarModel.blueprint do - name { Sham.name } - command { 'bundle exec rackup' } - app { AppModel.make } - origin { SidecarModel::ORIGIN_USER } - end - - SidecarProcessTypeModel.blueprint do - type { 'web' } - sidecar - app_guid { sidecar.app_guid } - end - - RevisionModel.blueprint do - app { AppModel.make } - droplet { DropletModel.make(app: app, process_types: { 'web' => 'default_revision_droplet_web_command' }) } - description { 'Initial revision' } - process_command_guids do - break [] if droplet.process_types.blank? - - droplet.process_types.map do |type, _| - RevisionProcessCommandModel.make(revision: object.save, process_type: type, process_command: nil).guid - end - end - end - - RevisionModel.blueprint(:no_commands) do - app { AppModel.make } - droplet { DropletModel.make(app:) } - process_command_guids { [] } - description { 'blank' } - end - - RevisionModel.blueprint(:custom_web_command) do - app { AppModel.make } - droplet { DropletModel.make(app:) } - description { 'Initial revision' } - process_command_guids do - break [] if droplet.process_types.blank? - - droplet.process_types.map do |type, _| - process_command = RevisionProcessCommandModel.make(revision: object.save, process_type: type, process_command: nil) - process_command.update(process_command: 'custom_web_command') if type == 'web' - process_command.guid - end - end - end - - RevisionProcessCommandModel.blueprint do - process_type { 'web' } - process_command { '$HOME/boot.sh' } - end - - RevisionSidecarModel.blueprint do - name { 'sleepy' } - command { 'sleep infinity' } - revision { RevisionModel.make } - revision_sidecar_process_type_guids { [RevisionSidecarProcessTypeModel.make(revision_sidecar: object.save).guid] } - end - - RevisionSidecarProcessTypeModel.blueprint do - type { 'web' } - end - - OrphanedBlob.blueprint do - end - - TestModel.blueprint do - required_attr true - end - - TestModelManyToOne.blueprint do - end - - TestModelManyToMany.blueprint do - end - - TestModelSecondLevel.blueprint do - end - - TestModelRedact.blueprint do - end -end diff --git a/spec/support/fakes/deployment_model_test_factory.rb b/spec/support/fakes/deployment_model_test_factory.rb index caa2173acf3..31a0be18765 100644 --- a/spec/support/fakes/deployment_model_test_factory.rb +++ b/spec/support/fakes/deployment_model_test_factory.rb @@ -3,12 +3,11 @@ module CloudController class DeploymentModelTestFactory class << self def make(*) - deployment = DeploymentModel.make(*) - DeploymentProcessModel.make( - deployment: deployment, - process_guid: deployment.deploying_web_process.guid, - process_type: deployment.deploying_web_process.type - ) + deployment = FactoryBot.create(:deployment_model, *) + FactoryBot.create(:deployment_process_model, + deployment: deployment, + process_guid: deployment.deploying_web_process.guid, + process_type: deployment.deploying_web_process.type) deployment end end diff --git a/spec/support/fakes/process_model_factory.rb b/spec/support/fakes/process_model_factory.rb index 41aa4a4d97f..03396dfb29b 100644 --- a/spec/support/fakes/process_model_factory.rb +++ b/spec/support/fakes/process_model_factory.rb @@ -21,15 +21,25 @@ def make(*args) package = make_package(package_attributes, parent_app) - build = BuildModel.make(app: parent_app, package: package) - droplet = DropletModel.make(app: parent_app, build: build, package: package) + build = FactoryBot.create(:build_model, app: parent_app, package: package) + droplet = FactoryBot.create(:droplet_model, app: parent_app, build: build, package: package) parent_app.update(droplet_guid: droplet.guid) - VCAP::CloudController::ProcessModel.make(*args, process_attributes) + FactoryBot.create(:process_model, *known_traits(:process_model, args), **process_attributes) end private + # Mirror legacy machinist behavior: unknown trait symbols passed to + # `Klass.make(:foo, ...)` were silently ignored when no matching + # blueprint was defined. FactoryBot raises on unknown traits, so we + # filter to only the traits actually registered on the factory. + def known_traits(factory_name, args) + factory = FactoryBot.factories.find(factory_name) + registered = factory.defined_traits.map { |t| t.name.to_sym } + args.select { |a| a.is_a?(Symbol) && registered.include?(a) } + end + def make_parent_app(package_attributes, parent_app_attributes, process_attributes) return process_attributes[:app] if process_attributes[:app] @@ -48,10 +58,10 @@ def make_parent_app(package_attributes, parent_app_attributes, process_attribute parent_app_attributes.delete(:stack) end - parent_app = VCAP::CloudController::AppModel.make(parent_app_blueprint_type, parent_app_attributes) + parent_app = create_app_model(parent_app_blueprint_type, parent_app_attributes) parent_app.lifecycle_data.update(buildpack_keys) if buildpack_keys.any? else - parent_app = VCAP::CloudController::AppModel.make(parent_app_blueprint_type, parent_app_attributes) + parent_app = create_app_model(parent_app_blueprint_type, parent_app_attributes) end process_attributes[:app] = parent_app parent_app @@ -59,13 +69,21 @@ def make_parent_app(package_attributes, parent_app_attributes, process_attribute def make_package(package_attributes, parent_app) if package_attributes.empty? - VCAP::CloudController::PackageModel.make(app: parent_app, state: PackageModel::READY_STATE, package_hash: Sham.guid) + FactoryBot.create(:package_model, app: parent_app, state: PackageModel::READY_STATE, package_hash: Sham.guid) else docker_credentials = package_attributes[:docker_credentials].nil? ? {} : package_attributes[:docker_credentials] - VCAP::CloudController::PackageModel.make(:docker, app: parent_app, - docker_image: package_attributes[:docker_image], - docker_username: docker_credentials['username'], - docker_password: docker_credentials['password']) + FactoryBot.create(:package_model, :docker, app: parent_app, + docker_image: package_attributes[:docker_image], + docker_username: docker_credentials['username'], + docker_password: docker_credentials['password']) + end + end + + def create_app_model(blueprint_type, attributes) + if blueprint_type + FactoryBot.create(:app_model, blueprint_type, **attributes) + else + FactoryBot.create(:app_model, **attributes) end end end diff --git a/spec/support/lifecycle_tests_helpers.rb b/spec/support/lifecycle_tests_helpers.rb index a3d3056b636..1803246126f 100644 --- a/spec/support/lifecycle_tests_helpers.rb +++ b/spec/support/lifecycle_tests_helpers.rb @@ -211,7 +211,7 @@ def get_service_plan_with(name:, using:) end def push_app(space_guid) - VCAP::CloudController::AppModel.make(name: 'my-app', space_guid: space_guid).guid + FactoryBot.create(:app_model, name: 'my-app', space_guid: space_guid).guid end def create_binding(request) diff --git a/spec/support/machinist_monkey_patch.rb b/spec/support/machinist_monkey_patch.rb deleted file mode 100644 index 66914a9f81e..00000000000 --- a/spec/support/machinist_monkey_patch.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'machinist/sequel' - -raise 'Tear down this monkey patch!' unless Machinist.const_defined?('SequelExtensions') - -module Machinist::SequelExtensions::ClassMethods - def returning(value) - yield(value) - value - end -end diff --git a/spec/support/matchers/have_associated.rb b/spec/support/matchers/have_associated.rb index 30de8161731..e5ea7e71c7b 100644 --- a/spec/support/matchers/have_associated.rb +++ b/spec/support/matchers/have_associated.rb @@ -4,7 +4,7 @@ end match do |_| instance = options[:test_instance] - instance ||= described_class.make + instance ||= FactoryBot.create(described_class.name.demodulize.underscore.to_sym) associated_instance = get_associated_instance(instance, association, options) if association[-1] == 's' @@ -21,7 +21,7 @@ def get_associated_instance(instance, association, options) options[:associated_instance].call(instance) else associated_class = options[:class] || "VCAP::CloudController::#{association.to_s.classify}".constantize - associated_class.make + FactoryBot.create(associated_class.name.demodulize.underscore.to_sym) end end end diff --git a/spec/support/matchers/model_extensions.rb b/spec/support/matchers/model_extensions.rb index f29e3ca4fc9..523f24eca50 100644 --- a/spec/support/matchers/model_extensions.rb +++ b/spec/support/matchers/model_extensions.rb @@ -10,19 +10,19 @@ RSpec::Matchers.define :export_attributes do |*attributes| failure_message do |_actual| - instance = described_class.make + instance = FactoryBot.create(described_class.name.demodulize.underscore.to_sym) actual_keys = instance.to_hash.keys.collect(&:to_sym) "expected #{described_class} to have exported attributes #{expected}, got: #{actual_keys}" end failure_message_when_negated do |_actual| - instance = described_class.make + instance = FactoryBot.create(described_class.name.demodulize.underscore.to_sym) actual_keys = instance.to_hash.keys.collect(&:to_sym) "expected #{described_class} to not have exported attributes #{expected}, got: #{actual_keys}" end match do |_| - instance = described_class.make + instance = FactoryBot.create(described_class.name.demodulize.underscore.to_sym) instance.to_hash.keys.collect(&:to_sym).sort == attributes.sort end end diff --git a/spec/support/matchers/sequel_validations.rb b/spec/support/matchers/sequel_validations.rb index 61d942b2f1d..d7d466d6827 100644 --- a/spec/support/matchers/sequel_validations.rb +++ b/spec/support/matchers/sequel_validations.rb @@ -42,8 +42,10 @@ "validate uniqueness of #{Array.wrap(attributes).join(' and ')}" end match do |_| - source_obj = described_class.make(*make_arguments) - duplicate_object = described_class.make(*make_arguments) + factory_name = described_class.name.demodulize.underscore.to_sym + args = Array(make_arguments) + source_obj = FactoryBot.create(factory_name, *args) + duplicate_object = FactoryBot.create(factory_name, *args) Array.wrap(attributes).each do |attr| duplicate_object[attr] = source_obj[attr] end diff --git a/spec/support/model_creation.rb b/spec/support/model_creation.rb index 75c2733ef83..ca3a9ab1142 100644 --- a/spec/support/model_creation.rb +++ b/spec/support/model_creation.rb @@ -1,13 +1,13 @@ module ModelCreation def make_user_for_org(org) - user = VCAP::CloudController::User.make + user = FactoryBot.create(:user) user.add_organization org org.refresh user end def make_domain_for_org(org) - VCAP::CloudController::PrivateDomain.make(owning_organization: org) + FactoryBot.create(:private_domain, owning_organization: org) end def make_user_for_space(space) @@ -69,28 +69,27 @@ def make_app_for_service_instance(service_instance) def make_service_binding_for_service_instance(service_instance) process = VCAP::CloudController::ProcessModelFactory.make(space: service_instance.space) process.space = service_instance.space - VCAP::CloudController::ServiceBinding.make( - app: process.app, - service_instance: service_instance, - credentials: Sham.service_credentials - ) + FactoryBot.create(:service_binding, + app: process.app, + service_instance: service_instance, + credentials: Sham.service_credentials) end def make_space_for_user(user) - space = VCAP::CloudController::Space.make + space = FactoryBot.create(:space) space.organization.add_user(user) space.add_developer(user) space end def make_user_with_default_space(opts={}) - user = VCAP::CloudController::User.make(admin: opts.key?(:admin), active: true) + user = FactoryBot.create(:user, admin: opts.key?(:admin), active: true) space = make_space_for_user(user) user.default_space = space user end def make_user(opts={}) - VCAP::CloudController::User.make(admin: opts.key?(:admin), active: true) + FactoryBot.create(:user, admin: opts.key?(:admin), active: true) end end diff --git a/spec/support/sham_shim.rb b/spec/support/sham_shim.rb new file mode 100644 index 00000000000..2eb73e4748d --- /dev/null +++ b/spec/support/sham_shim.rb @@ -0,0 +1,37 @@ +require 'securerandom' + +# Compatibility shim for legacy `Sham.` calls. The original Sham +# generators were defined inside `spec/support/fakes/blueprints.rb` as +# part of machinist. After the machinist removal, blueprints.rb is gone +# but a few hundred call sites still call `Sham.foo`. Each method here +# delegates to a FactoryBot `:sham_*` sequence defined in +# spec/support/factories.rb that mirrors the original Sham.define block. +module Sham + module_function + + def email = FactoryBot.generate(:sham_email) + def name = FactoryBot.generate(:sham_name) + def label = FactoryBot.generate(:sham_label) + def token = FactoryBot.generate(:sham_token) + def auth_username = FactoryBot.generate(:sham_auth_username) + def auth_password = FactoryBot.generate(:sham_auth_password) + def provider = FactoryBot.generate(:sham_provider) + def port = FactoryBot.generate(:sham_port) + def url = FactoryBot.generate(:sham_url) + def type = FactoryBot.generate(:sham_type) + def description = FactoryBot.generate(:sham_description) + def long_description = FactoryBot.generate(:sham_long_description) + def version = FactoryBot.generate(:sham_version) + def service_credentials = FactoryBot.generate(:sham_service_credentials) + def uaa_id = FactoryBot.generate(:sham_uaa_id) + def domain = FactoryBot.generate(:sham_domain) + def host = FactoryBot.generate(:sham_host) + def guid = FactoryBot.generate(:sham_guid) + def extra = FactoryBot.generate(:sham_extra) + def instance_index = FactoryBot.generate(:sham_instance_index) + def unique_id = FactoryBot.generate(:sham_unique_id) + def status = FactoryBot.generate(:sham_status) + def error_message = FactoryBot.generate(:sham_error_message) + def sequence_id = FactoryBot.generate(:sham_sequence_id) + def stack = FactoryBot.generate(:sham_stack) +end diff --git a/spec/support/shared_examples/controllers/permissions.rb b/spec/support/shared_examples/controllers/permissions.rb index c53c5b1ab7c..b9a0d47d47f 100644 --- a/spec/support/shared_examples/controllers/permissions.rb +++ b/spec/support/shared_examples/controllers/permissions.rb @@ -1,10 +1,10 @@ RSpec.shared_context 'permissions' do before do - @org_a = VCAP::CloudController::Organization.make - @org_a_manager = VCAP::CloudController::User.make - @org_a_member = VCAP::CloudController::User.make - @org_a_billing_manager = VCAP::CloudController::User.make - @org_a_auditor = VCAP::CloudController::User.make + @org_a = create(:organization) + @org_a_manager = create(:user) + @org_a_member = create(:user) + @org_a_billing_manager = create(:user) + @org_a_auditor = create(:user) @org_a.add_user(@org_a_manager) @org_a.add_user(@org_a_member) @org_a.add_user(@org_a_billing_manager) @@ -13,7 +13,7 @@ @org_a.add_billing_manager(@org_a_billing_manager) @org_a.add_auditor(@org_a_auditor) - @space_a = VCAP::CloudController::Space.make(organization: @org_a) + @space_a = create(:space, organization: @org_a) @space_a_manager = make_user_for_space(@space_a) @space_a_developer = make_user_for_space(@space_a) @space_a_auditor = make_user_for_space(@space_a) @@ -21,11 +21,11 @@ @space_a.add_developer(@space_a_developer) @space_a.add_auditor(@space_a_auditor) - @org_b = VCAP::CloudController::Organization.make - @org_b_manager = VCAP::CloudController::User.make - @org_b_member = VCAP::CloudController::User.make - @org_b_billing_manager = VCAP::CloudController::User.make - @org_b_auditor = VCAP::CloudController::User.make + @org_b = create(:organization) + @org_b_manager = create(:user) + @org_b_member = create(:user) + @org_b_billing_manager = create(:user) + @org_b_auditor = create(:user) @org_b.add_user(@org_b_manager) @org_b.add_user(@org_b_member) @org_b.add_user(@org_b_billing_manager) @@ -34,7 +34,7 @@ @org_b.add_billing_manager(@org_b_billing_manager) @org_b.add_auditor(@org_b_auditor) - @space_b = VCAP::CloudController::Space.make(organization: @org_b) + @space_b = create(:space, organization: @org_b) @space_b_manager = make_user_for_space(@space_b) @space_b_developer = make_user_for_space(@space_b) @space_b_auditor = make_user_for_space(@space_b) diff --git a/spec/support/shared_examples/jobs/create_binding_job.rb b/spec/support/shared_examples/jobs/create_binding_job.rb index 470d7ad1219..37db97a7ab6 100644 --- a/spec/support/shared_examples/jobs/create_binding_job.rb +++ b/spec/support/shared_examples/jobs/create_binding_job.rb @@ -14,11 +14,11 @@ ) end - let(:space) { VCAP::CloudController::Space.make } - let(:service_offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } + let(:space) { create(:space) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } let(:maximum_polling_duration) { nil } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, maximum_polling_duration: maximum_polling_duration) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan:, space:) } + let(:service_plan) { create(:service_plan, service: service_offering, maximum_polling_duration: maximum_polling_duration) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } let(:user_info) { instance_double(Object) } let(:parameters) { { foo: 'bar' } } diff --git a/spec/support/shared_examples/jobs/delete_binding_job.rb b/spec/support/shared_examples/jobs/delete_binding_job.rb index f8500ab4479..ea38b3ca45e 100644 --- a/spec/support/shared_examples/jobs/delete_binding_job.rb +++ b/spec/support/shared_examples/jobs/delete_binding_job.rb @@ -12,11 +12,11 @@ ) end - let(:space) { VCAP::CloudController::Space.make } - let(:service_offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } + let(:space) { create(:space) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } let(:maximum_polling_duration) { nil } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, maximum_polling_duration: maximum_polling_duration) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan:, space:) } + let(:service_plan) { create(:service_plan, service: service_offering, maximum_polling_duration: maximum_polling_duration) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } let(:user_info) { instance_double(Object) } describe '#perform' do diff --git a/spec/support/shared_examples/models/domain_validation.rb b/spec/support/shared_examples/models/domain_validation.rb index 55d08f1d757..1436c751375 100644 --- a/spec/support/shared_examples/models/domain_validation.rb +++ b/spec/support/shared_examples/models/domain_validation.rb @@ -13,7 +13,7 @@ module VCAP::CloudController context "when there's another domain with the same name" do it 'fails to validate' do - other_domain = described_class.make + other_domain = create(described_class.name.demodulize.underscore.to_sym) other_domain.name = subject.name expect(other_domain).not_to be_valid expect(other_domain.errors[:name]).to include(:unique) @@ -99,22 +99,22 @@ module VCAP::CloudController context 'route matching' do it 'denies creating a domain when a matching route exists' do - shared_domain = SharedDomain.make name: 'foo.com' - Route.make host: 'bar', domain_guid: shared_domain.guid + shared_domain = create(:shared_domain, name: 'foo.com') + create(:route, host: 'bar', domain_guid: shared_domain.guid) subject.name = 'bar.foo.com' expect(subject).not_to be_valid end it 'denies creating a domain that is a subdomain of an existing route' do - shared_domain = SharedDomain.make name: 'foo.com' - Route.make host: 'bar', domain_guid: shared_domain.guid + shared_domain = create(:shared_domain, name: 'foo.com') + create(:route, host: 'bar', domain_guid: shared_domain.guid) subject.name = 'baz.bar.foo.com' expect(subject).not_to be_valid end it 'denies creating a domain that is a distant subdomain of an existing route' do - shared_domain = SharedDomain.make name: 'foo.com' - Route.make host: 'bar', domain_guid: shared_domain.guid + shared_domain = create(:shared_domain, name: 'foo.com') + create(:route, host: 'bar', domain_guid: shared_domain.guid) subject.name = 'corge.quux.baz.bar.foo.com' expect(subject).not_to be_valid end @@ -123,7 +123,7 @@ module VCAP::CloudController context 'domain overlapping' do context 'when the domain exists in a different casing' do before do - PrivateDomain.make name: 'foo.com' + create(:private_domain, name: 'foo.com') subject.name = 'FoO.CoM' end @@ -132,7 +132,7 @@ module VCAP::CloudController context 'when the name is bar.foo.com and another org has foo.com' do before do - PrivateDomain.make name: 'foo.com' + create(:private_domain, name: 'foo.com') subject.name = 'bar.foo.com' end @@ -141,7 +141,7 @@ module VCAP::CloudController context 'when the name is baz.bar.foo.com and another org has bar.foo.com' do before do - PrivateDomain.make name: 'bar.foo.com' + create(:private_domain, name: 'bar.foo.com') subject.name = 'baz.bar.foo.com' end @@ -150,8 +150,8 @@ module VCAP::CloudController context 'when the name is baz.bar.foo.com and another org has bar.foo.com and foo.com is shared' do before do - SharedDomain.make name: 'foo.com' - PrivateDomain.make name: 'bar.foo.com' + create(:shared_domain, name: 'foo.com') + create(:private_domain, name: 'bar.foo.com') subject.name = 'baz.bar.foo.com' end @@ -160,7 +160,7 @@ module VCAP::CloudController context 'when the name is bar.foo.com and foo.com is a shared domain' do before do - SharedDomain.make name: 'foo.com' + create(:shared_domain, name: 'foo.com') subject.name = 'bar.foo.com' end @@ -169,7 +169,7 @@ module VCAP::CloudController context 'when the name is baz.bar.foo.com and bar.foo.com is a shared domain' do before do - SharedDomain.make name: 'bar.foo.com' + create(:shared_domain, name: 'bar.foo.com') subject.name = 'baz.bar.foo.com' end diff --git a/spec/support/shared_examples/models/encrypted_attribute.rb b/spec/support/shared_examples/models/encrypted_attribute.rb index 33fe6e76f54..d34a08fb51a 100644 --- a/spec/support/shared_examples/models/encrypted_attribute.rb +++ b/spec/support/shared_examples/models/encrypted_attribute.rb @@ -13,7 +13,7 @@ def new_model end end - let(:model_factory) { -> { model_class.make } } + let(:model_factory) { -> { create(model_class.name.demodulize.underscore.to_sym) } } let(:model_class) { described_class } let(:value_to_encrypt) { 'this-is-a-secret' } let!(:model) { new_model } diff --git a/spec/support/shared_examples/models/operations.rb b/spec/support/shared_examples/models/operations.rb index 23c22efde3e..22141b1c17a 100644 --- a/spec/support/shared_examples/models/operations.rb +++ b/spec/support/shared_examples/models/operations.rb @@ -9,7 +9,7 @@ } end - let(:operation) { described_class.make(operation_attributes) } + let(:operation) { create(described_class.name.demodulize.underscore.to_sym, operation_attributes) } before do operation.this.update(updated_at: updated_at_time, created_at: created_at_time) diff --git a/spec/support/shared_examples/request/bindings_create.rb b/spec/support/shared_examples/request/bindings_create.rb index 6539bda433c..6606fa4c19b 100644 --- a/spec/support/shared_examples/request/bindings_create.rb +++ b/spec/support/shared_examples/request/bindings_create.rb @@ -346,7 +346,7 @@ it_behaves_like 'binding last operation response handling', 'create' context 'binding not retrievable' do - let(:offering) { VCAP::CloudController::Service.make(bindings_retrievable: false) } + let(:offering) { create(:service, bindings_retrievable: false) } it 'fails the job with an appropriate error' do execute_all_jobs(expected_successes: 0, expected_failures: 1) diff --git a/spec/support/shared_examples/v3_service_binding_create.rb b/spec/support/shared_examples/v3_service_binding_create.rb index 048cb9c8bca..9e4fa50f532 100644 --- a/spec/support/shared_examples/v3_service_binding_create.rb +++ b/spec/support/shared_examples/v3_service_binding_create.rb @@ -5,9 +5,9 @@ RSpec.shared_examples 'service binding creation' do |binding_model| describe '#bind' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, bind: bind_response) } before do @@ -91,7 +91,7 @@ class BadError < StandardError; end end context 'binding not retrievable' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: false, requires: ['route_forwarding']) } + let(:service_offering) { create(:service, bindings_retrievable: false, requires: ['route_forwarding']) } it 'raises a BindingNotRetrievable error' do expect do @@ -105,9 +105,9 @@ class BadError < StandardError; end RSpec.shared_examples 'polling service binding creation' do describe '#poll' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_provided_operation) { Sham.guid } let(:bind_response) { { async: true, operation: broker_provided_operation } } let(:description) { Sham.description } @@ -299,9 +299,9 @@ class BadError < StandardError; end it_behaves_like 'polling service binding creation' describe 'credential bindings specific behaviour' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_provided_operation) { Sham.guid } let(:bind_response) { { async: true, operation: broker_provided_operation } } let(:description) { Sham.description } diff --git a/spec/support/shared_examples/v3_service_binding_delete.rb b/spec/support/shared_examples/v3_service_binding_delete.rb index 34afbf8e956..bcf04b537e4 100644 --- a/spec/support/shared_examples/v3_service_binding_delete.rb +++ b/spec/support/shared_examples/v3_service_binding_delete.rb @@ -5,9 +5,9 @@ RSpec.shared_examples 'service binding deletion' do |binding_model| describe '#delete' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:unbind_response) { { async: false } } let(:broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, unbind: unbind_response) } @@ -158,9 +158,9 @@ class BadError < StandardError; end RSpec.shared_examples 'polling service binding deletion' do describe '#poll' do - let(:service_offering) { VCAP::CloudController::Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:description) { Sham.description } let(:state) { 'in progress' } let(:fetch_last_operation_response) do diff --git a/spec/support/user_header_helpers.rb b/spec/support/user_header_helpers.rb index 16d77a15528..d9f4f06f969 100644 --- a/spec/support/user_header_helpers.rb +++ b/spec/support/user_header_helpers.rb @@ -19,21 +19,21 @@ def set_user_with_header(user, opts={}) # rubocop:disable all def set_user_with_header_as_admin(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_user_with_header(user, { admin: true }.merge(opts)) end # rubocop:disable all def set_user_with_header_as_admin_read_only(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_user_with_header(user, { admin_read_only: true }.merge(opts)) end # rubocop:disable all def set_user_with_header_as_global_auditor(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_user_with_header(user, { global_auditor: true }.merge(opts)) end @@ -46,7 +46,7 @@ def set_user_with_header_as_unauthenticated(opts = {}) # rubocop:disable all def set_user_with_header_as_reader_and_writer(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.read cloud_controller.write] } set_user_with_header(user, scopes.merge(opts)) end @@ -54,7 +54,7 @@ def set_user_with_header_as_reader_and_writer(opts = {}) # rubocop:disable all def set_user_with_header_as_reader(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.read] } set_user_with_header(user, scopes.merge(opts)) end @@ -62,7 +62,7 @@ def set_user_with_header_as_reader(opts = {}) # rubocop:disable all def set_user_with_header_as_writer(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.write] } set_user_with_header(user, scopes.merge(opts)) end @@ -70,7 +70,7 @@ def set_user_with_header_as_writer(opts = {}) # rubocop:disable all def set_user_with_header_as_service_permissions_reader(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller_service_permissions.read] } set_user_with_header(user, scopes.merge(opts)) end @@ -78,7 +78,7 @@ def set_user_with_header_as_service_permissions_reader(opts = {}) # rubocop:disable all def set_user_with_header_as_role(role:, org: nil, space: nil, user: nil, scopes: nil, user_name: nil, email: nil) # rubocop:enable all - current_user = user || VCAP::CloudController::User.make + current_user = user || FactoryBot.create(:user) scope_roles = %w[admin admin_read_only global_auditor reader_and_writer reader writer service_permissions_reader] org.add_user(current_user) if org && scope_roles.exclude?(role) && role.to_s != 'no_role' diff --git a/spec/support/user_helpers.rb b/spec/support/user_helpers.rb index 973813e24dd..c151bf38d81 100644 --- a/spec/support/user_helpers.rb +++ b/spec/support/user_helpers.rb @@ -10,21 +10,21 @@ def set_current_user(user, opts={}) # rubocop:disable all def set_current_user_as_admin(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_current_user(user, { admin: true }.merge(opts)) end # rubocop:disable all def set_current_user_as_admin_read_only(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_current_user(user, { admin_read_only: true }.merge(opts)) end # rubocop:disable all def set_current_user_as_global_auditor(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) set_current_user(user, { global_auditor: true }.merge(opts)) end @@ -37,7 +37,7 @@ def set_current_user_as_unauthenticated(opts = {}) # rubocop:disable all def set_current_user_as_reader_and_writer(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.read cloud_controller.write] } set_current_user(user, scopes.merge(opts)) end @@ -45,7 +45,7 @@ def set_current_user_as_reader_and_writer(opts = {}) # rubocop:disable all def set_current_user_as_reader(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.read] } set_current_user(user, scopes.merge(opts)) end @@ -53,7 +53,7 @@ def set_current_user_as_reader(opts = {}) # rubocop:disable all def set_current_user_as_writer(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller.write] } set_current_user(user, scopes.merge(opts)) end @@ -61,7 +61,7 @@ def set_current_user_as_writer(opts = {}) # rubocop:disable all def set_current_user_as_service_permissions_reader(opts = {}) # rubocop:enable all - user = opts.delete(:user) || VCAP::CloudController::User.make + user = opts.delete(:user) || FactoryBot.create(:user) scopes = { scopes: %w[cloud_controller_service_permissions.read] } set_current_user(user, scopes.merge(opts)) end @@ -69,7 +69,7 @@ def set_current_user_as_service_permissions_reader(opts = {}) # rubocop:disable all def set_current_user_as_role(role:, org: nil, space: nil, user: nil, scopes: nil) # rubocop:enable all - current_user = user || VCAP::CloudController::User.make + current_user = user || FactoryBot.create(:user) current_user = set_current_user(current_user, scopes:) scope_roles = %w[admin admin_read_only global_auditor reader_and_writer reader writer service_permissions_reader] diff --git a/spec/unit/access/app_event_access_spec.rb b/spec/unit/access/app_event_access_spec.rb index bf11f0a74b4..c8d51db37b2 100644 --- a/spec/unit/access/app_event_access_spec.rb +++ b/spec/unit/access/app_event_access_spec.rb @@ -5,11 +5,11 @@ module VCAP::CloudController subject(:access) { AppEventAccess.new(Security::AccessContext.new) } let(:token) { { 'scope' => ['cloud_controller.read', 'cloud_controller.write'] } } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let(:object) { VCAP::CloudController::AppEvent.make(app: process) } + let(:object) { create(:app_event, app: process) } before do SecurityContext.set(user, token) @@ -75,7 +75,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -84,7 +84,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end diff --git a/spec/unit/access/app_usage_event_access_spec.rb b/spec/unit/access/app_usage_event_access_spec.rb index f09ce3604c1..52a740b9640 100644 --- a/spec/unit/access/app_usage_event_access_spec.rb +++ b/spec/unit/access/app_usage_event_access_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe AppUsageEventAccess, type: :access do subject(:access) { AppUsageEventAccess.new(Security::AccessContext.new) } let(:token) { { 'scope' => ['cloud_controller.read', 'cloud_controller.write'] } } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::AppUsageEvent.make } + let(:user) { create(:user) } + let(:object) { create(:app_usage_event) } before do SecurityContext.set(user, token) diff --git a/spec/unit/access/buildpack_access_spec.rb b/spec/unit/access/buildpack_access_spec.rb index 11f86e212f6..cbf6a070c83 100644 --- a/spec/unit/access/buildpack_access_spec.rb +++ b/spec/unit/access/buildpack_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe BuildpackAccess, type: :access do subject(:access) { BuildpackAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::Buildpack.make } + let(:user) { create(:user) } + let(:object) { create(:buildpack) } it_behaves_like 'admin read only access' diff --git a/spec/unit/access/domain_access_spec.rb b/spec/unit/access/domain_access_spec.rb index 6f500168c37..903f1b05bbb 100644 --- a/spec/unit/access/domain_access_spec.rb +++ b/spec/unit/access/domain_access_spec.rb @@ -5,11 +5,11 @@ module VCAP::CloudController subject(:access) { DomainAccess.new(Security::AccessContext.new) } let(:token) { { 'scope' => ['cloud_controller.read', 'cloud_controller.write'] } } - let(:user) { User.make } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } - let(:object) { Domain.make } + let(:object) { create(:domain) } before do SecurityContext.set(user, token) @@ -20,12 +20,12 @@ module VCAP::CloudController end context 'when the domain is a private domain' do - let(:object) { PrivateDomain.make(owning_organization: org) } + let(:object) { create(:private_domain, owning_organization: org) } context 'admin' do include_context 'admin setup' - before { FeatureFlag.make(name: 'private_domain_creation', enabled: false) } + before { create(:feature_flag, name: 'private_domain_creation', enabled: false) } it_behaves_like 'full access' end @@ -33,7 +33,7 @@ module VCAP::CloudController context 'admin read only' do include_context 'admin read only setup' - before { FeatureFlag.make(name: 'private_domain_creation', enabled: false) } + before { create(:feature_flag, name: 'private_domain_creation', enabled: false) } it_behaves_like 'read only access' end @@ -45,7 +45,7 @@ module VCAP::CloudController context 'when private_domain_creation FeatureFlag is disabled' do it 'cannot create a private domain' do - FeatureFlag.make(name: 'private_domain_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'private_domain_creation', enabled: false, error_message: nil) expect { subject.create?(object) }.to raise_error(CloudController::Errors::ApiError, /private_domain_creation/) end end @@ -71,7 +71,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -80,7 +80,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end @@ -127,7 +127,7 @@ module VCAP::CloudController end context 'when the domain is a shared domain' do - let(:object) { SharedDomain.make } + let(:object) { create(:shared_domain) } it_behaves_like 'admin full access' it_behaves_like 'read only access' diff --git a/spec/unit/access/environment_variable_group_access_spec.rb b/spec/unit/access/environment_variable_group_access_spec.rb index fba407504d4..6cafab4f4b1 100644 --- a/spec/unit/access/environment_variable_group_access_spec.rb +++ b/spec/unit/access/environment_variable_group_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe EnvironmentVariableGroupAccess, type: :access do subject(:access) { EnvironmentVariableGroupAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::FeatureFlag.make } + let(:user) { create(:user) } + let(:object) { create(:feature_flag) } it_behaves_like 'admin full access' it_behaves_like 'admin read only access' diff --git a/spec/unit/access/event_access_spec.rb b/spec/unit/access/event_access_spec.rb index aa63054b204..5074edc0671 100644 --- a/spec/unit/access/event_access_spec.rb +++ b/spec/unit/access/event_access_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController RSpec.describe EventAccess, type: :access do subject(:access) { EventAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let!(:object) { VCAP::CloudController::Event.make(space_guid: space.guid, organization_guid: org.guid) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let!(:object) { create(:event, space_guid: space.guid, organization_guid: org.guid) } let(:scopes) { nil } before { set_current_user(user, scopes:) } @@ -62,7 +62,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -71,7 +71,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end @@ -152,7 +152,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) space.destroy end @@ -162,7 +162,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) space.destroy end diff --git a/spec/unit/access/feature_flag_access_spec.rb b/spec/unit/access/feature_flag_access_spec.rb index 2bbba21732e..6af57cdbe22 100644 --- a/spec/unit/access/feature_flag_access_spec.rb +++ b/spec/unit/access/feature_flag_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe FeatureFlagAccess, type: :access do subject(:access) { FeatureFlagAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::FeatureFlag.make } + let(:user) { create(:user) } + let(:object) { create(:feature_flag) } it_behaves_like 'admin full access' it_behaves_like 'admin read only access' diff --git a/spec/unit/access/managed_service_instance_access_spec.rb b/spec/unit/access/managed_service_instance_access_spec.rb index 168e38d4f2b..6ede4938586 100644 --- a/spec/unit/access/managed_service_instance_access_spec.rb +++ b/spec/unit/access/managed_service_instance_access_spec.rb @@ -4,13 +4,13 @@ module VCAP::CloudController RSpec.describe ManagedServiceInstanceAccess, type: :access do subject(:access) { ManagedServiceInstanceAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:service) { VCAP::CloudController::Service.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:service) { create(:service) } let(:service_plan_active) { true } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, active: service_plan_active) } - let(:object) { VCAP::CloudController::ManagedServiceInstance.make(service_plan:, space:) } + let(:service_plan) { create(:service_plan, service: service, active: service_plan_active) } + let(:object) { create(:managed_service_instance, service_plan:, space:) } before { set_current_user(user) } @@ -22,7 +22,7 @@ module VCAP::CloudController context 'service plan' do it 'allowed when the service plan is not visible' do - new_plan = VCAP::CloudController::ServicePlan.make(active: false) + new_plan = create(:service_plan, active: false) object.service_plan = new_plan expect(subject).to be_update(object) @@ -38,7 +38,7 @@ module VCAP::CloudController context 'service plan' do it 'allows when the new service plan is visible' do - new_plan = VCAP::CloudController::ServicePlan.make(service:) + new_plan = create(:service_plan, service:) object.service_plan = new_plan expect(subject).to be_create(object) expect(subject).to be_read_for_update(object) @@ -46,14 +46,14 @@ module VCAP::CloudController end it 'fails when assigning to a service plan that is not visible' do - new_plan = VCAP::CloudController::ServicePlan.make(active: false) + new_plan = create(:service_plan, active: false) object.service_plan = new_plan expect(subject).not_to be_update(object) end context 'when updating from a service plan that is not visible' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, active: false) } + let(:service_plan) { create(:service_plan, service: service, active: false) } it 'succeeds' do object.name = 'new name' diff --git a/spec/unit/access/organization_access_spec.rb b/spec/unit/access/organization_access_spec.rb index f3be93f988a..2d8b2e797d2 100644 --- a/spec/unit/access/organization_access_spec.rb +++ b/spec/unit/access/organization_access_spec.rb @@ -5,10 +5,10 @@ module VCAP::CloudController let(:queryer) { instance_spy(VCAP::CloudController::Permissions) } subject(:access) { OrganizationAccess.new(Security::AccessContext.new(queryer)) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } let(:object) { org } - let(:flag) { FeatureFlag.make(name: 'user_org_creation', enabled: false) } + let(:flag) { create(:feature_flag, name: 'user_org_creation', enabled: false) } before do flag.save @@ -145,7 +145,7 @@ module VCAP::CloudController end describe 'in a suspended org' do - let(:org) { VCAP::CloudController::Organization.make(status: VCAP::CloudController::Organization::SUSPENDED) } + let(:org) { create(:organization, status: VCAP::CloudController::Organization::SUSPENDED) } it_behaves_like('an access control', :read, read_table) it_behaves_like('an access control', :delete, write_table) @@ -156,7 +156,7 @@ module VCAP::CloudController describe 'related objects' do context 'removing managers' do context 'when there is a manager other than the current user' do - let(:manager) { VCAP::CloudController::User.make } + let(:manager) { create(:user) } let(:op_params) { { relation: :managers, related_guid: manager.guid } } before do @@ -187,7 +187,7 @@ module VCAP::CloudController context 'removing org users' do context 'when there is a manager other than the current user' do - let(:org_user) { VCAP::CloudController::User.make } + let(:org_user) { create(:user) } let(:op_params) { { related_guid: org_user.guid, relation: :users } } before do diff --git a/spec/unit/access/private_domain_access_spec.rb b/spec/unit/access/private_domain_access_spec.rb index d63133eed38..c4ac66899f5 100644 --- a/spec/unit/access/private_domain_access_spec.rb +++ b/spec/unit/access/private_domain_access_spec.rb @@ -5,9 +5,9 @@ module VCAP::CloudController subject(:access) { PrivateDomainAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:object) { VCAP::CloudController::PrivateDomain.make owning_organization: org } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:object) { create(:private_domain, owning_organization: org) } before { set_current_user(user, scopes:) } @@ -16,7 +16,7 @@ module VCAP::CloudController context 'admin' do include_context 'admin setup' - before { FeatureFlag.make(name: 'private_domain_creation', enabled: false) } + before { create(:feature_flag, name: 'private_domain_creation', enabled: false) } it_behaves_like 'full access' end @@ -34,7 +34,7 @@ module VCAP::CloudController context 'when private_domain_creation FeatureFlag is disabled' do it 'cannot create a private domain' do - FeatureFlag.make(name: 'private_domain_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'private_domain_creation', enabled: false, error_message: nil) expect { subject.create?(object) }.to raise_error(CloudController::Errors::ApiError, /private_domain_creation/) end end @@ -60,7 +60,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -69,7 +69,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end diff --git a/spec/unit/access/process_model_access_spec.rb b/spec/unit/access/process_model_access_spec.rb index 8d12d39c48f..97e106e99c9 100644 --- a/spec/unit/access/process_model_access_spec.rb +++ b/spec/unit/access/process_model_access_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe ProcessModelAccess, type: :access do subject(:access) { ProcessModelAccess.new(Security::AccessContext.new) } let(:token) { { 'scope' => ['cloud_controller.read', 'cloud_controller.write'] } } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:object) { VCAP::CloudController::ProcessModelFactory.make(space:) } before do @@ -20,7 +20,7 @@ module VCAP::CloudController context 'admin' do include_context 'admin setup' - before { FeatureFlag.make(name: 'app_bits_upload', enabled: false) } + before { create(:feature_flag, name: 'app_bits_upload', enabled: false) } it_behaves_like 'full access' @@ -37,7 +37,7 @@ module VCAP::CloudController context 'global auditor only' do include_context 'global auditor setup' - before { FeatureFlag.make(name: 'app_bits_upload', enabled: false) } + before { create(:feature_flag, name: 'app_bits_upload', enabled: false) } it_behaves_like 'read only access' @@ -53,7 +53,7 @@ module VCAP::CloudController context 'admin read only' do include_context 'admin read only setup' - before { FeatureFlag.make(name: 'app_bits_upload', enabled: false) } + before { create(:feature_flag, name: 'app_bits_upload', enabled: false) } it_behaves_like 'read only access' @@ -88,7 +88,7 @@ module VCAP::CloudController context 'app_bits_upload FeatureFlag' do it 'disallows when enabled' do - FeatureFlag.make(name: 'app_bits_upload', enabled: false, error_message: nil) + create(:feature_flag, name: 'app_bits_upload', enabled: false, error_message: nil) expect { subject.upload?(object) }.to raise_error(CloudController::Errors::ApiError, /app_bits_upload/) end end @@ -100,7 +100,7 @@ module VCAP::CloudController end context 'when the app_scaling feature flag is disabled' do - before { FeatureFlag.make(name: 'app_scaling', enabled: false, error_message: nil) } + before { create(:feature_flag, name: 'app_scaling', enabled: false, error_message: nil) } it 'cannot scale' do expect { subject.read_for_update?(object, { 'memory' => 2 }) }.to raise_error(CloudController::Errors::ApiError, /app_scaling/) diff --git a/spec/unit/access/quota_definition_access_spec.rb b/spec/unit/access/quota_definition_access_spec.rb index 97438a4e36d..a13e8005a02 100644 --- a/spec/unit/access/quota_definition_access_spec.rb +++ b/spec/unit/access/quota_definition_access_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController subject(:access) { QuotaDefinitionAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::QuotaDefinition.make } + let(:user) { create(:user) } + let(:object) { create(:quota_definition) } before { set_current_user(user, scopes:) } diff --git a/spec/unit/access/route_access_spec.rb b/spec/unit/access/route_access_spec.rb index 830bd62278b..31057524ba2 100644 --- a/spec/unit/access/route_access_spec.rb +++ b/spec/unit/access/route_access_spec.rb @@ -6,12 +6,12 @@ module VCAP::CloudController subject(:access) { RouteAccess.new(Security::AccessContext.new(queryer)) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } - let(:flag) { FeatureFlag.make(name: 'route_creation', enabled: false) } - let(:object) { VCAP::CloudController::Route.make(domain:, space:) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:domain) { create(:private_domain, owning_organization: org) } + let(:flag) { create(:feature_flag, name: 'route_creation', enabled: false) } + let(:object) { create(:route, domain:, space:) } before do flag.save @@ -112,7 +112,7 @@ module VCAP::CloudController end describe 'in a shared domain' do - before { object.domain = SharedDomain.make } + before { object.domain = create(:shared_domain) } describe 'when the route has a wildcard host' do before { object.host = '*' } @@ -156,7 +156,7 @@ module VCAP::CloudController describe 'when route creation is disabled' do describe 'in a shared domain' do - before { object.domain = SharedDomain.make } + before { object.domain = create(:shared_domain) } describe 'when the route has a wildcard host' do before { object.host = '*' } diff --git a/spec/unit/access/route_mapping_access_spec.rb b/spec/unit/access/route_mapping_access_spec.rb index b0abf6eeeed..65065b444e5 100644 --- a/spec/unit/access/route_mapping_access_spec.rb +++ b/spec/unit/access/route_mapping_access_spec.rb @@ -5,13 +5,13 @@ module VCAP::CloudController subject(:access) { RouteMappingModelAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:domain) { create(:private_domain, owning_organization: org) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } - let(:route) { VCAP::CloudController::Route.make(domain:, space:) } - let(:object) { VCAP::CloudController::RouteMappingModel.make(route: route, app: process) } + let(:route) { create(:route, domain:, space:) } + let(:object) { create(:route_mapping_model, route: route, app: process) } before { set_current_user(user, scopes:) } diff --git a/spec/unit/access/security_group_access_spec.rb b/spec/unit/access/security_group_access_spec.rb index 83e3ff54fad..0efb5d0f9b9 100644 --- a/spec/unit/access/security_group_access_spec.rb +++ b/spec/unit/access/security_group_access_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe SecurityGroupAccess, type: :access do subject(:access) { SecurityGroupAccess.new(Security::AccessContext.new) } - let(:space) { Space.make } - let(:user) { User.make } - let(:object) { SecurityGroup.make(space_guids: [space.guid]) } + let(:space) { create(:space) } + let(:user) { create(:user) } + let(:object) { create(:security_group, space_guids: [space.guid]) } before { set_current_user(user) } diff --git a/spec/unit/access/service_access_spec.rb b/spec/unit/access/service_access_spec.rb index afd55daf1a0..97b24e71e00 100644 --- a/spec/unit/access/service_access_spec.rb +++ b/spec/unit/access/service_access_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe ServiceAccess, type: :access do subject(:access) { ServiceAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: object) } - let(:object) { VCAP::CloudController::Service.make } + let(:user) { create(:user) } + let!(:service_plan) { create(:service_plan, service: object) } + let(:object) { create(:service) } it_behaves_like 'admin full access' it_behaves_like 'admin read only access' @@ -23,7 +23,7 @@ module VCAP::CloudController end context 'space developer' do - let(:space) { Space.make } + let(:space) { create(:space) } before do set_current_user(user) diff --git a/spec/unit/access/service_binding_access_spec.rb b/spec/unit/access/service_binding_access_spec.rb index 9ddebe8ce2c..446d167e9a1 100644 --- a/spec/unit/access/service_binding_access_spec.rb +++ b/spec/unit/access/service_binding_access_spec.rb @@ -5,16 +5,16 @@ module VCAP::CloudController subject(:access) { ServiceBindingAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } - let(:service) { VCAP::CloudController::Service.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:user) { create(:user) } + let(:service) { create(:service) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app) { create(:app_model, space:) } + let(:service_instance) { create(:managed_service_instance) } let(:object) do service_instance.add_shared_space(app.space) - ServiceBinding.make(service_instance:, app:) + create(:service_binding, service_instance:, app:) end before { set_current_user(user, scopes:) } diff --git a/spec/unit/access/service_broker_access_spec.rb b/spec/unit/access/service_broker_access_spec.rb index 54bd3131317..9f4d4cac007 100644 --- a/spec/unit/access/service_broker_access_spec.rb +++ b/spec/unit/access/service_broker_access_spec.rb @@ -3,11 +3,11 @@ module VCAP::CloudController RSpec.describe ServiceBrokerAccess, type: :access do subject(:access) { ServiceBrokerAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:object) { VCAP::CloudController::ServiceBroker.make } - let(:broker_with_space) { VCAP::CloudController::ServiceBroker.make space: } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:object) { create(:service_broker) } + let(:broker_with_space) { create(:service_broker, space:) } before { set_current_user(user) } @@ -18,7 +18,7 @@ module VCAP::CloudController it_behaves_like 'full access' context 'when FeatureFlag space_scoped_private_broker_creation is false' do - before { FeatureFlag.make(name: 'space_scoped_private_broker_creation', enabled: false, error_message: nil) } + before { create(:feature_flag, name: 'space_scoped_private_broker_creation', enabled: false, error_message: nil) } it_behaves_like 'full access' end @@ -47,13 +47,13 @@ module VCAP::CloudController it_behaves_like 'no access' context 'when FeatureFlag space_scoped_private_broker_creation is true' do - before { FeatureFlag.make(name: 'space_scoped_private_broker_creation', enabled: true, error_message: nil) } + before { create(:feature_flag, name: 'space_scoped_private_broker_creation', enabled: true, error_message: nil) } it { is_expected.to allow_op_on_object :create, broker_with_space } end context 'when FeatureFlag space_scoped_private_broker_creation is false' do - before { FeatureFlag.make(name: 'space_scoped_private_broker_creation', enabled: false, error_message: nil) } + before { create(:feature_flag, name: 'space_scoped_private_broker_creation', enabled: false, error_message: nil) } it 'does not allow the create' do expect { subject.create?(broker_with_space) }.to raise_error(CloudController::Errors::ApiError, /space_scoped_private_broker_creation/) @@ -96,7 +96,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -106,7 +106,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end diff --git a/spec/unit/access/service_instance_access_spec.rb b/spec/unit/access/service_instance_access_spec.rb index 541e281ae2e..7fa876be659 100644 --- a/spec/unit/access/service_instance_access_spec.rb +++ b/spec/unit/access/service_instance_access_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController RSpec.describe ServiceInstanceAccess, type: :access do subject(:access) { ServiceInstanceAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:service) { VCAP::CloudController::Service.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:service) { create(:service) } let(:service_plan_active) { true } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, active: service_plan_active) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan:, space:) } + let(:service_plan) { create(:service_plan, service: service, active: service_plan_active) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } before { set_current_user(user, scopes:) } @@ -36,7 +36,7 @@ module VCAP::CloudController end context 'user provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'does not delegate to the UserProvidedServiceInstanceAccess' do expect_any_instance_of(UserProvidedServiceInstanceAccess).not_to receive(:allowed?).with(service_instance) @@ -48,7 +48,7 @@ module VCAP::CloudController context 'when the service_instance_creation feature flag is not set' do before do - FeatureFlag.make(name: 'service_instance_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'service_instance_creation', enabled: false, error_message: nil) end it_behaves_like 'full access' do @@ -90,7 +90,7 @@ module VCAP::CloudController context 'when the service_instance_creation feature flag is not set' do before do - FeatureFlag.make(name: 'service_instance_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'service_instance_creation', enabled: false, error_message: nil) end it 'allows all operations except create' do @@ -137,7 +137,7 @@ module VCAP::CloudController context 'space developer in a space that the service instance has been shared into' do before do org.add_user(user) - target_space = VCAP::CloudController::Space.make(organization: org) + target_space = create(:space, organization: org) target_space.add_developer(user) service_instance.add_shared_space(target_space) end @@ -304,7 +304,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -327,7 +327,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end @@ -427,7 +427,7 @@ module VCAP::CloudController end context 'user provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'delegates to the UserProvidedServiceInstanceAccess' do expect_any_instance_of(UserProvidedServiceInstanceAccess).to receive(:allowed?).with(service_instance) diff --git a/spec/unit/access/service_key_access_spec.rb b/spec/unit/access/service_key_access_spec.rb index f1bff40913d..d273c8946b5 100644 --- a/spec/unit/access/service_key_access_spec.rb +++ b/spec/unit/access/service_key_access_spec.rb @@ -4,13 +4,13 @@ module VCAP::CloudController RSpec.describe ServiceKeyAccess, type: :access do subject(:access) { ServiceKeyAccess.new(Security::AccessContext.new) } let(:scopes) { ['cloud_controller.read', 'cloud_controller.write'] } - let(:user) { VCAP::CloudController::User.make } - let(:service) { VCAP::CloudController::Service.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:user) { create(:user) } + let(:service) { create(:service) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:service_instance) { create(:managed_service_instance, space:) } - let(:object) { VCAP::CloudController::ServiceKey.make(name: 'fake-key', service_instance: service_instance) } + let(:object) { create(:service_key, name: 'fake-key', service_instance: service_instance) } before { set_current_user(user, scopes:) } diff --git a/spec/unit/access/service_plan_access_spec.rb b/spec/unit/access/service_plan_access_spec.rb index 4d720241bbd..c0bd3b87d4d 100644 --- a/spec/unit/access/service_plan_access_spec.rb +++ b/spec/unit/access/service_plan_access_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe ServicePlanAccess, type: :access do subject(:access) { ServicePlanAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:service) { VCAP::CloudController::Service.make } - let(:object) { VCAP::CloudController::ServicePlan.make(service:) } + let(:user) { create(:user) } + let(:service) { create(:service) } + let(:object) { create(:service_plan, service:) } before { set_current_user(user) } diff --git a/spec/unit/access/service_plan_visibility_access_spec.rb b/spec/unit/access/service_plan_visibility_access_spec.rb index 83822d8ae0a..ed47f639dda 100644 --- a/spec/unit/access/service_plan_visibility_access_spec.rb +++ b/spec/unit/access/service_plan_visibility_access_spec.rb @@ -4,12 +4,12 @@ module VCAP::CloudController RSpec.describe ServicePlanVisibilityAccess, type: :access do subject(:access) { ServicePlanVisibilityAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:service) { VCAP::CloudController::Service.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, public: false) } + let(:user) { create(:user) } + let(:service) { create(:service) } + let(:org) { create(:organization) } + let(:service_plan) { create(:service_plan, service: service, public: false) } - let(:object) { VCAP::CloudController::ServicePlanVisibility.make(organization: org, service_plan: service_plan) } + let(:object) { create(:service_plan_visibility, organization: org, service_plan: service_plan) } before { set_current_user(user) } diff --git a/spec/unit/access/service_usage_event_access_spec.rb b/spec/unit/access/service_usage_event_access_spec.rb index b807fea9397..7639932c319 100644 --- a/spec/unit/access/service_usage_event_access_spec.rb +++ b/spec/unit/access/service_usage_event_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe ServiceUsageEventAccess, type: :access do subject(:access) { ServiceUsageEventAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::ServiceUsageEvent.make } + let(:user) { create(:user) } + let(:object) { create(:service_usage_event) } before { set_current_user(user) } diff --git a/spec/unit/access/shared_domain_access_spec.rb b/spec/unit/access/shared_domain_access_spec.rb index f7464ab6857..1c2b081ccf1 100644 --- a/spec/unit/access/shared_domain_access_spec.rb +++ b/spec/unit/access/shared_domain_access_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe SharedDomainAccess, type: :access do subject(:access) { SharedDomainAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:object) { VCAP::CloudController::SharedDomain.new } before { set_current_user(user) } diff --git a/spec/unit/access/space_access_spec.rb b/spec/unit/access/space_access_spec.rb index 11cb99d650d..8a475c3e2e1 100644 --- a/spec/unit/access/space_access_spec.rb +++ b/spec/unit/access/space_access_spec.rb @@ -5,11 +5,11 @@ module VCAP::CloudController let(:queryer) { instance_spy(VCAP::CloudController::Permissions) } subject(:access) { SpaceAccess.new(Security::AccessContext.new(queryer)) } - let(:org) { VCAP::CloudController::Organization.make } - let(:user) { VCAP::CloudController::User.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } let(:scopes) { nil } - let(:object) { VCAP::CloudController::Space.make(organization: org) } + let(:object) { create(:space, organization: org) } let(:space) { object } describe 'when the parent organization is suspended' do diff --git a/spec/unit/access/space_quota_definition_access_spec.rb b/spec/unit/access/space_quota_definition_access_spec.rb index d36cc46e5c9..2b7eb3688e6 100644 --- a/spec/unit/access/space_quota_definition_access_spec.rb +++ b/spec/unit/access/space_quota_definition_access_spec.rb @@ -3,11 +3,11 @@ module VCAP::CloudController RSpec.describe SpaceQuotaDefinitionAccess, type: :access do subject(:access) { SpaceQuotaDefinitionAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:org) { Organization.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } let(:scopes) { nil } - let(:space) { Space.make(organization: org) } - let(:object) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org) } + let(:space) { create(:space, organization: org) } + let(:object) { create(:space_quota_definition, organization: org) } before { set_current_user(user, scopes:) } @@ -21,7 +21,7 @@ module VCAP::CloudController it_behaves_like 'full access' context 'when the organization is suspended' do - let(:org) { Organization.make(status: 'suspended') } + let(:org) { create(:organization, status: 'suspended') } it_behaves_like 'read only access' end @@ -110,7 +110,7 @@ module VCAP::CloudController context 'user in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_user(user) end @@ -119,7 +119,7 @@ module VCAP::CloudController context 'manager in a different organization (defensive)' do before do - different_organization = VCAP::CloudController::Organization.make + different_organization = create(:organization) different_organization.add_manager(user) end diff --git a/spec/unit/access/stack_access_spec.rb b/spec/unit/access/stack_access_spec.rb index a15d13946ed..ea2290589af 100644 --- a/spec/unit/access/stack_access_spec.rb +++ b/spec/unit/access/stack_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe StackAccess, type: :access do subject(:access) { StackAccess.new(Security::AccessContext.new) } - let(:user) { VCAP::CloudController::User.make } - let(:object) { VCAP::CloudController::Stack.make } + let(:user) { create(:user) } + let(:object) { create(:stack) } before { set_current_user(user) } diff --git a/spec/unit/access/user_access_spec.rb b/spec/unit/access/user_access_spec.rb index 19c8957513a..91026d1867b 100644 --- a/spec/unit/access/user_access_spec.rb +++ b/spec/unit/access/user_access_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe UserAccess, type: :access do subject(:access) { UserAccess.new(Security::AccessContext.new) } - let(:object) { VCAP::CloudController::User.make } - let(:user) { VCAP::CloudController::User.make } + let(:object) { create(:user) } + let(:user) { create(:user) } before { set_current_user(user) } diff --git a/spec/unit/actions/annotation_delete_spec.rb b/spec/unit/actions/annotation_delete_spec.rb index 4d023290ee3..414b201445e 100644 --- a/spec/unit/actions/annotation_delete_spec.rb +++ b/spec/unit/actions/annotation_delete_spec.rb @@ -6,9 +6,9 @@ module VCAP::CloudController subject(:annotation_delete) { AnnotationDelete } describe '#delete' do - let!(:isolation_segment) { IsolationSegmentModel.make } - let!(:annotation) { IsolationSegmentAnnotationModel.make(resource_guid: isolation_segment.guid, key_name: 'test1', value: 'bommel') } - let!(:annotation2) { IsolationSegmentAnnotationModel.make(resource_guid: isolation_segment.guid, key_name: 'test2', value: 'bommel') } + let!(:isolation_segment) { create(:isolation_segment_model) } + let!(:annotation) { create(:isolation_segment_annotation_model, resource_guid: isolation_segment.guid, key_name: 'test1', value: 'bommel') } + let!(:annotation2) { create(:isolation_segment_annotation_model, resource_guid: isolation_segment.guid, key_name: 'test2', value: 'bommel') } it 'deletes and cancels the annotation' do annotation_delete.delete([annotation, annotation2]) diff --git a/spec/unit/actions/annotations_update_spec.rb b/spec/unit/actions/annotations_update_spec.rb index 29c71dafe85..bdec2ffcacb 100644 --- a/spec/unit/actions/annotations_update_spec.rb +++ b/spec/unit/actions/annotations_update_spec.rb @@ -9,7 +9,7 @@ module VCAP::CloudController end end - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:annotations) do { 'clodefloundry.org/release': 'stable' @@ -23,7 +23,7 @@ module VCAP::CloudController context 'when lazily migrating old annotations' do let!(:annotation_model) do - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'clodefloundry.org/release', value: 'stable2') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'clodefloundry.org/release', value: 'stable2') end end @@ -47,15 +47,15 @@ module VCAP::CloudController end let!(:old_annotation) do - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release', value: 'unstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release', value: 'unstable') end let!(:annotation_to_be_deleted) do - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'please', value: 'delete me') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'please', value: 'delete me') end let!(:prefixed_annotation_to_be_deleted) do - AppAnnotationModel.make(resource_guid: app.guid, key_prefix: 'pre.fix', key_name: 'release', value: 'delete me') + create(:app_annotation_model, resource_guid: app.guid, key_prefix: 'pre.fix', key_name: 'release', value: 'delete me') end it 'updates the old annotation' do @@ -102,8 +102,8 @@ module VCAP::CloudController context 'app already has max annotations' do context 'annotations added exceeds max annotations' do let!(:app_with_annotations) do - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') end let(:annotations) do @@ -126,10 +126,10 @@ module VCAP::CloudController context 'annotations exceed max annotations' do let!(:app_with_annotations) do - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release', value: 'unstable') - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') - AppAnnotationModel.make(resource_guid: app.guid, key_name: 'release3', value: 'help') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release', value: 'unstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') + create(:app_annotation_model, resource_guid: app.guid, key_name: 'release3', value: 'help') end context 'deleting old annotation' do diff --git a/spec/unit/actions/app_apply_manifest_spec.rb b/spec/unit/actions/app_apply_manifest_spec.rb index b749d280497..541e0c617a3 100644 --- a/spec/unit/actions/app_apply_manifest_spec.rb +++ b/spec/unit/actions/app_apply_manifest_spec.rb @@ -61,7 +61,7 @@ module VCAP::CloudController describe 'scaling instances' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', instances: 4 }) } let(:manifest_process_scale_message) { message.manifest_process_scale_messages.first } - let(:process) { ProcessModel.make(instances: 1) } + let(:process) { create(:process_model, instances: 1) } let(:app) { process.app } context 'when the request is valid' do @@ -82,7 +82,7 @@ module VCAP::CloudController describe 'scaling memory' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', memory: '256MB' }) } let(:manifest_process_scale_message) { message.manifest_process_scale_messages.first } - let(:process) { ProcessModel.make(memory: 512) } + let(:process) { create(:process_model, memory: 512) } let(:app) { process.app } context 'when the request is valid' do @@ -102,10 +102,10 @@ module VCAP::CloudController end describe 'updating buildpack' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', buildpack: buildpack.name }) } let(:app_update_message) { message.app_update_message } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } context 'when the request is valid' do it 'returns the app' do @@ -123,7 +123,7 @@ module VCAP::CloudController describe 'using cnb type' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', buildpack: buildpack.name, lifecycle: 'cnb' }) } - let(:app) { AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } it 'calls AppUpdate with the correct arguments' do app_apply_manifest.apply(app.guid, message) @@ -151,10 +151,10 @@ module VCAP::CloudController end context 'cnb apps' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:message) { AppManifestMessage.create_from_yml({ name: 'blah' }) } let(:app_update_message) { message.app_update_message } - let(:app) { AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } before do TestConfig.override(default_app_lifecycle: 'cnb') @@ -184,7 +184,7 @@ module VCAP::CloudController context 'when the default differs from what is already set on the app' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', buildpack: buildpack.name }) } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'preserves the apps lifecycle' do app_apply_manifest.apply(app.guid, message) @@ -197,10 +197,10 @@ module VCAP::CloudController end context 'buildpack apps' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:message) { AppManifestMessage.create_from_yml({ name: 'blah' }) } let(:app_update_message) { message.app_update_message } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } before do TestConfig.override(default_app_lifecycle: 'buildpack') @@ -230,7 +230,7 @@ module VCAP::CloudController context 'when the default differs from what is already set on the app' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', buildpack: buildpack.name }) } - let(:app) { AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } it 'preserves the apps lifecycle' do app_apply_manifest.apply(app.guid, message) @@ -245,7 +245,7 @@ module VCAP::CloudController describe 'updating stack' do let(:message) { AppManifestMessage.create_from_yml({ name: 'stack-test', stack: 'cflinuxfs4' }) } let(:app_update_message) { message.app_update_message } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } context 'when the request is valid' do it 'returns the app' do @@ -281,7 +281,7 @@ module VCAP::CloudController describe 'updating environment variables' do let(:message) { AppManifestMessage.create_from_yml({ env: { foo: 'bar' } }) } let(:app_update_environment_variables_message) { message.app_update_environment_variables_message } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } context 'when the request is valid' do it 'returns the app' do @@ -317,7 +317,7 @@ module VCAP::CloudController describe 'updating command' do let(:message) { AppManifestMessage.create_from_yml({ command: 'new-command' }) } let(:manifest_process_update_message) { message.manifest_process_update_messages.first } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } context 'when the request is valid' do it 'returns the app' do @@ -359,9 +359,9 @@ module VCAP::CloudController ] }) end - let!(:process1) { ProcessModel.make(type: 'web') } + let!(:process1) { create(:process_model, type: 'web') } let!(:app) { process1.app } - let!(:process2) { ProcessModel.make(app: app, type: 'worker') } + let!(:process2) { create(:process_model, app: app, type: 'worker') } let(:manifest_process_update_message1) { message.manifest_process_update_messages.first } let(:manifest_process_update_message2) { message.manifest_process_update_messages.last } @@ -415,7 +415,7 @@ module VCAP::CloudController }) end - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } let(:update_message) { message.manifest_process_update_messages.first } let(:scale_message) { message.manifest_process_scale_messages.first } @@ -463,7 +463,7 @@ module VCAP::CloudController describe 'updating health check type' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', health_check_type: 'process' }) } let(:manifest_process_update_message) { message.manifest_process_update_messages.first } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the request is invalid' do @@ -499,7 +499,7 @@ module VCAP::CloudController describe 'updating readiness health check type' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', readiness_health_check_type: 'port' }) } let(:manifest_process_update_message) { message.manifest_process_update_messages.first } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the request is invalid' do @@ -535,7 +535,7 @@ module VCAP::CloudController describe 'updating health check invocation_timeout' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', health_check_invocation_timeout: 47 }) } let(:manifest_process_update_message) { message.manifest_process_update_messages.first } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the request is valid' do @@ -554,8 +554,8 @@ module VCAP::CloudController end describe 'updating sidecars' do - let(:app) { AppModel.make } - let!(:sidecar) { SidecarModel.make(name: 'existing-sidecar', app: app) } + let(:app) { create(:app_model) } + let!(:sidecar) { create(:sidecar_model, name: 'existing-sidecar', app: app) } let(:message) do AppManifestMessage.create_from_yml({ name: 'blah', 'sidecars' => [ @@ -585,7 +585,7 @@ module VCAP::CloudController describe 'updating routes' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', routes: [{ route: 'http://tater.tots.com/tabasco' }] }) } let(:manifest_routes_update_message) { message.manifest_routes_update_message } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the request is valid' do @@ -605,7 +605,7 @@ module VCAP::CloudController describe 'updating with a random-route' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', random_route: true }) } let(:manifest_routes_update_message) { message.manifest_routes_update_message } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the app has no routes and the message specifies no routes' do @@ -619,7 +619,7 @@ module VCAP::CloudController end context 'when there is no shared domain' do - let(:domain) { PrivateDomain.make(owning_organization: app.organization) } + let(:domain) { create(:private_domain, owning_organization: app.organization) } before do Domain.dataset.destroy @@ -650,8 +650,8 @@ module VCAP::CloudController end context 'when the app has existing routes' do - let(:route1) { Route.make(space: app.space) } - let!(:route_mapping1) { RouteMappingModel.make(app: app, route: route1, process_type: process.type) } + let(:route1) { create(:route, space: app.space) } + let!(:route_mapping1) { create(:route_mapping_model, app: app, route: route1, process_type: process.type) } it 'ignores the random_route' do app_apply_manifest.apply(app.guid, message) @@ -687,7 +687,7 @@ module VCAP::CloudController describe 'updating with a default-route' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', default_route: true }) } let(:manifest_routes_update_message) { message.manifest_routes_update_message } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when the app has no routes and the message specifies no routes' do @@ -702,7 +702,7 @@ module VCAP::CloudController context 'when the app name has special characters' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah!@#', default_route: true }) } - let(:app_model) { AppModel.make(name: 'blah!@#') } + let(:app_model) { create(:app_model, name: 'blah!@#') } it 'fails with a useful error message' do expect do @@ -715,7 +715,7 @@ module VCAP::CloudController context 'when the app name is too long' do let(:app_name) { 'a' * 100 } let(:message) { AppManifestMessage.create_from_yml({ name: app_name, default_route: true }) } - let(:app_model) { AppModel.make(name: app_name) } + let(:app_model) { create(:app_model, name: app_name) } it 'fails with a useful error' do expect do @@ -725,7 +725,7 @@ module VCAP::CloudController end context 'when there is no shared domain' do - let(:domain) { PrivateDomain.make(owning_organization: app.organization) } + let(:domain) { create(:private_domain, owning_organization: app.organization) } before do Domain.dataset.destroy @@ -756,8 +756,8 @@ module VCAP::CloudController end context 'when the app has existing routes' do - let(:route1) { Route.make(space: app.space) } - let!(:route_mapping1) { RouteMappingModel.make(app: app, route: route1, process_type: process.type) } + let(:route1) { create(:route, space: app.space) } + let!(:route_mapping1) { create(:route_mapping_model, app: app, route: route1, process_type: process.type) } it 'ignores the default_route' do app_apply_manifest.apply(app.guid, message) @@ -792,12 +792,12 @@ module VCAP::CloudController describe 'deleting existing routes' do let(:manifest_routes_update_message) { message.manifest_routes_update_message } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } - let(:route1) { Route.make(space: app.space) } - let(:route2) { Route.make(space: app.space) } - let!(:route_mapping1) { RouteMappingModel.make(app: app, route: route1, process_type: process.type) } - let!(:route_mapping2) { RouteMappingModel.make(app: app, route: route2, process_type: process.type) } + let(:route1) { create(:route, space: app.space) } + let(:route2) { create(:route, space: app.space) } + let!(:route_mapping1) { create(:route_mapping_model, app: app, route: route1, process_type: process.type) } + let!(:route_mapping2) { create(:route_mapping_model, app: app, route: route2, process_type: process.type) } context 'when no_route is true' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', no_route: true, random_route: true }) } @@ -841,16 +841,16 @@ module VCAP::CloudController end describe 'creating service bindings' do - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } before do TestConfig.override(volume_services_enabled: false) end context 'valid request with list of services' do - let!(:service_instance) { ManagedServiceInstance.make(name: 'si-name', space: space) } - let!(:service_instance_2) { ManagedServiceInstance.make(name: 'si2-name', space: space) } + let!(:service_instance) { create(:managed_service_instance, name: 'si-name', space: space) } + let!(:service_instance_2) { create(:managed_service_instance, name: 'si2-name', space: space) } let(:binding_name) { Sham.name } let(:message) do AppManifestMessage.create_from_yml({ services: [service_instance.name, @@ -862,10 +862,10 @@ module VCAP::CloudController before do allow(ServiceCredentialAppBindingCreateMessage).to receive(:new).and_return(service_binding_create_message_1, service_binding_create_message_2) - allow(service_cred_binding_create).to receive(:bind) { ServiceBinding.make } + allow(service_cred_binding_create).to receive(:bind) { create(:service_binding) } allow_any_instance_of(ServiceBinding).to receive(:terminal_state?).and_return true - allow(service_cred_binding_create).to receive(:precursor).and_return(ServiceBinding.make) + allow(service_cred_binding_create).to receive(:precursor).and_return(create(:service_binding)) allow(service_binding_create_message_1).to receive(:audit_hash).and_return({ foo: 'bar-1' }) allow(service_binding_create_message_1).to receive(:parameters) allow(service_binding_create_message_2).to receive_messages(audit_hash: { foo: 'bar-2' }, parameters: { 'foo' => 'bar' }) @@ -948,7 +948,7 @@ module VCAP::CloudController context 'service binding already exists' do let(:message) { AppManifestMessage.create_from_yml({ services: [service_instance.name] }) } - let!(:binding) { ServiceBinding.make(service_instance:, app:) } + let!(:binding) { create(:service_binding, service_instance:, app:) } it 'does not create the binding' do app_apply_manifest.apply(app.guid, message) @@ -1005,8 +1005,8 @@ module VCAP::CloudController context 'service broker support sync or async bindings' do context 'action prefers sync binding' do - let(:binding1) { ServiceBinding.make(service_instance:, app:) } - let(:binding2) { ServiceBinding.make(service_instance: service_instance_2, app: app) } + let(:binding1) { create(:service_binding, service_instance:, app:) } + let(:binding2) { create(:service_binding, service_instance: service_instance_2, app: app) } before do allow_any_instance_of(ServiceBinding).to receive(:terminal_state?).and_call_original @@ -1026,10 +1026,10 @@ module VCAP::CloudController allow(service_cred_binding_create).to receive(:bind).with(anything, accepts_incomplete: false) do count += 1 if count == 1 - ServiceBindingOperation.make(type: 'create', state: 'succeeded', service_binding: binding1) + create(:service_binding_operation, type: 'create', state: 'succeeded', service_binding: binding1) binding1 else - ServiceBindingOperation.make(type: 'create', state: 'succeeded', service_binding: binding2) + create(:service_binding_operation, type: 'create', state: 'succeeded', service_binding: binding2) binding2 end end @@ -1045,8 +1045,8 @@ module VCAP::CloudController context 'broker only supports async bindings' do context 'action starts async binding' do - let(:binding1) { ServiceBinding.make(service_instance:, app:) } - let(:binding2) { ServiceBinding.make(service_instance: service_instance_2, app: app) } + let(:binding1) { create(:service_binding, service_instance:, app:) } + let(:binding2) { create(:service_binding, service_instance: service_instance_2, app: app) } before do response = double(body: '{}', code: '422') @@ -1070,10 +1070,10 @@ module VCAP::CloudController allow(service_cred_binding_create).to receive(:bind).with(anything, parameters: anything, accepts_incomplete: true) do count += 1 if count == 1 - ServiceBindingOperation.make(type: 'create', state: 'initial', service_binding: binding1) + create(:service_binding_operation, type: 'create', state: 'initial', service_binding: binding1) binding1 else - ServiceBindingOperation.make(type: 'create', state: 'initial', service_binding: binding2) + create(:service_binding_operation, type: 'create', state: 'initial', service_binding: binding2) binding2 end end @@ -1132,13 +1132,13 @@ module VCAP::CloudController end context 'async binding fails' do - let(:binding) { ServiceBinding.make(service_instance:, app:) } + let(:binding) { create(:service_binding, service_instance:, app:) } before do allow(service_cred_binding_create).to receive(:precursor) { binding } allow(service_cred_binding_create).to receive(:bind).with(anything, parameters: anything, accepts_incomplete: true) do - ServiceBindingOperation.make(type: 'create', state: 'initial', service_binding: binding) + create(:service_binding_operation, type: 'create', state: 'initial', service_binding: binding) binding end @@ -1191,7 +1191,7 @@ module VCAP::CloudController context 'when a create is in progress for the same binding' do let!(:binding) do - binding = ServiceBinding.make(service_instance:, app:) + binding = create(:service_binding, service_instance:, app:) binding.save_with_attributes_and_new_operation({}, { type: 'create', state: 'in progress' }) binding end @@ -1205,7 +1205,7 @@ module VCAP::CloudController context 'when a delete is in progress for the same binding' do let!(:binding) do - binding = ServiceBinding.make(service_instance:, app:) + binding = create(:service_binding, service_instance:, app:) binding.save_with_attributes_and_new_operation({}, { type: 'delete', state: 'in progress' }) binding end @@ -1219,7 +1219,7 @@ module VCAP::CloudController context 'when a delete failed for the same binding' do let!(:binding) do - binding = ServiceBinding.make(service_instance:, app:) + binding = create(:service_binding, service_instance:, app:) binding.save_with_attributes_and_new_operation({}, { type: 'delete', state: 'failed' }) binding end @@ -1394,7 +1394,7 @@ module VCAP::CloudController describe 'updating app features' do let(:message) { AppManifestMessage.create_from_yml({ features: { ssh: true } }) } let(:manifest_features_update_message) { message.manifest_features_update_message } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'returns the app' do expect( @@ -1417,7 +1417,7 @@ module VCAP::CloudController describe '#apply' do context 'when changing memory' do let(:message) { AppManifestMessage.create_from_yml({ name: 'blah', memory: '256MB' }) } - let(:process) { ProcessModel.make(memory: 512, state: ProcessModel::STARTED, type: 'web') } + let(:process) { create(:process_model, memory: 512, state: ProcessModel::STARTED, type: 'web') } let(:app) { process.app } it "doesn't change the process's version" do @@ -1429,7 +1429,7 @@ module VCAP::CloudController end context 'when there are additional app web processes' do - let(:process2) { ProcessModel.make(memory: 513, state: ProcessModel::STARTED, type: 'web', app: app, created_at: process.created_at + 1) } + let(:process2) { create(:process_model, memory: 513, state: ProcessModel::STARTED, type: 'web', app: app, created_at: process.created_at + 1) } it 'operates on the most recent process for a given app' do app.update(name: 'blah') diff --git a/spec/unit/actions/app_assign_droplet_spec.rb b/spec/unit/actions/app_assign_droplet_spec.rb index 343c4e39aaf..cee8f0b0f49 100644 --- a/spec/unit/actions/app_assign_droplet_spec.rb +++ b/spec/unit/actions/app_assign_droplet_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController RSpec.describe AppAssignDroplet do subject(:app_assign_droplet) { AppAssignDroplet.new(user_audit_info) } - let(:app_model) { AppModel.make desired_state: ProcessModel::STOPPED } + let(:app_model) { create(:app_model) } let(:user) { double(:user, guid: '1337') } let(:user_email) { 'cool_dude@hoopy_frood.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } @@ -14,12 +14,11 @@ module VCAP::CloudController describe '#assign' do let(:droplet) do - DropletModel.make( - state: DropletModel::STAGED_STATE, - process_types: { web: 'x' }, - sidecars: [{ name: 'sleep infinity', command: 'sleep infinity', process_types: ['web'] }], - app: app_model - ) + create(:droplet_model, + app: app_model, + set_as_current_droplet: false, + process_types: { web: 'x' }, + sidecars: [{ name: 'sleep infinity', command: 'sleep infinity', process_types: ['web'] }]) end let(:droplet_guid) { droplet.guid } let(:message) { { 'droplet_guid' => droplet_guid } } @@ -70,7 +69,7 @@ module VCAP::CloudController describe 'error cases' do context 'when the droplet is not associated with the application' do it 'raises an error' do - other_droplet = DropletModel.make + other_droplet = create(:droplet_model) expect do app_assign_droplet.assign(app_model, other_droplet) end.to raise_error AppAssignDroplet::InvalidDroplet, 'Unable to assign current droplet. Ensure the droplet exists and belongs to this app.' diff --git a/spec/unit/actions/app_create_spec.rb b/spec/unit/actions/app_create_spec.rb index 3501bfa0fe1..b7263eedd4e 100644 --- a/spec/unit/actions/app_create_spec.rb +++ b/spec/unit/actions/app_create_spec.rb @@ -9,10 +9,10 @@ module VCAP::CloudController subject(:app_create) { AppCreate.new(user_audit_info) } describe '#create' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:space_guid) { space.guid } let(:environment_variables) { { BAKED: 'POTATO' } } - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:buildpack_identifier) { buildpack.name } let(:relationships) { { space: { data: { guid: space_guid } } } } let(:lifecycle_request) { { type: 'buildpack', data: { buildpacks: [buildpack_identifier], stack: 'cflinuxfs4' } } } @@ -128,7 +128,7 @@ module VCAP::CloudController end describe 'buildpacks' do - let(:unready_buildpack) { Buildpack.make(name: 'unready', filename: nil) } + let(:unready_buildpack) { create(:buildpack, name: 'unready', filename: nil) } let(:lifecycle_request) { { type: 'buildpack', data: { buildpacks: [unready_buildpack.name], stack: 'cflinuxfs4' } } } it 'does not allow buildpacks that are not READY' do @@ -190,7 +190,7 @@ module VCAP::CloudController end context 'when the app name is a duplicate within the space' do - let!(:existing_app) { AppModel.make(space: space, name: 'my-app') } + let!(:existing_app) { create(:app_model, space: space, name: 'my-app') } it 'fails the right way' do expect do @@ -200,7 +200,7 @@ module VCAP::CloudController end describe 'stack state validation' do - let(:test_stack) { Stack.make(name: 'test-stack-for-validation') } + let(:test_stack) { create(:stack, name: 'test-stack-for-validation') } let(:lifecycle_request) { { type: 'buildpack', data: { buildpacks: [buildpack_identifier], stack: test_stack.name } } } context 'when stack is DISABLED' do diff --git a/spec/unit/actions/app_delete_spec.rb b/spec/unit/actions/app_delete_spec.rb index 8ecc664d5f0..f8ed96a4cdd 100644 --- a/spec/unit/actions/app_delete_spec.rb +++ b/spec/unit/actions/app_delete_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe AppDelete do subject(:app_delete) { AppDelete.new(user_audit_info) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } let!(:app_dataset) { [app] } describe '#delete' do @@ -43,7 +43,7 @@ module VCAP::CloudController describe 'recursive deletion' do it 'deletes associated packages' do - package = PackageModel.make(app:) + package = create(:package_model, app:) expect do app_delete.delete(app_dataset) @@ -53,7 +53,7 @@ module VCAP::CloudController end it 'deletes associated builds' do - build = BuildModel.make(app:) + build = create(:build_model, app:) expect do app_delete.delete(app_dataset) @@ -75,7 +75,7 @@ module VCAP::CloudController beet: 'formanova' } end - let(:build) { BuildModel.make(app:) } + let(:build) { create(:build_model, app:) } before do LabelsUpdate.update(build, old_labels, BuildLabelModel) @@ -93,7 +93,7 @@ module VCAP::CloudController end it 'deletes associated droplets' do - droplet = DropletModel.make(app:) + droplet = create(:droplet_model, app:) app.update(droplet_guid: droplet.guid) expect do @@ -104,7 +104,7 @@ module VCAP::CloudController end it 'deletes associated processes' do - process = ProcessModel.make(app:) + process = create(:process, app:) expect do app_delete.delete(app_dataset) @@ -114,8 +114,8 @@ module VCAP::CloudController end it 'deletes associated sidecars' do - sidecar = SidecarModel.make(app:) - sidecar_process_type = SidecarProcessTypeModel.make(sidecar:) + sidecar = create(:sidecar_model, app:) + sidecar_process_type = create(:sidecar_process_type_model, sidecar:) expect do app_delete.delete(app_dataset) @@ -126,7 +126,7 @@ module VCAP::CloudController end it 'deletes associated deployments' do - deployment = DeploymentModel.make(app:) + deployment = create(:deployment_model, app:) expect do app_delete.delete(app_dataset) @@ -136,7 +136,7 @@ module VCAP::CloudController end it 'deletes associated labels' do - label = AppLabelModel.make(app: app, key_name: 'test', value: 'bommel') + label = create(:app_label_model, app: app, key_name: 'test', value: 'bommel') expect do app_delete.delete(app_dataset) @@ -146,7 +146,7 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation = AppAnnotationModel.make(app: app, key_name: 'test', value: 'bommel') + annotation = create(:app_annotation_model, app: app, key_name: 'test', value: 'bommel') expect do app_delete.delete(app_dataset) @@ -157,9 +157,9 @@ module VCAP::CloudController describe 'deleting associated routes' do let(:process_type) { 'web' } - let(:process) { ProcessModel.make(app: app, type: process_type) } - let(:route) { Route.make } - let!(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: process_type, app_port: 8080) } + let(:process) { create(:process, app: app, type: process_type) } + let(:route) { create(:route) } + let!(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: process_type, app_port: 8080) } it 'deletes associated route mappings' do expect do @@ -171,7 +171,7 @@ module VCAP::CloudController end it 'deletes associated tasks' do - task_model = TaskModel.make(app: app, name: 'task1', state: TaskModel::SUCCEEDED_STATE) + task_model = create(:task_model, app: app, name: 'task1', state: TaskModel::SUCCEEDED_STATE) expect do app_delete.delete(app_dataset) @@ -181,7 +181,7 @@ module VCAP::CloudController end it 'deletes associated revisions' do - revision = RevisionModel.make(app:) + revision = create(:revision_model, app:) expect do app_delete.delete(app_dataset) @@ -201,7 +201,7 @@ module VCAP::CloudController end it 'deletes the associated sidecars' do - sidecar = SidecarModel.make(name: 'name', app: app) + sidecar = create(:sidecar_model, name: 'name', app: app) expect do app_delete.delete(app_dataset) @@ -214,7 +214,7 @@ module VCAP::CloudController it 'deletes associated service bindings' do allow_any_instance_of(VCAP::Services::ServiceBrokers::V2::Client).to receive(:unbind).and_return({ async: false }) - binding = ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) + binding = create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) expect do app_delete.delete(app_dataset) @@ -232,7 +232,7 @@ module VCAP::CloudController end context 'with a single service binding' do - let!(:binding1) { ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) } + let!(:binding1) { create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) } it 'alwayses call the broker with accepts_incomplete true' do expect(client).to receive(:unbind).with(binding1, user_guid: user_audit_info.user_guid, accepts_incomplete: true) @@ -261,8 +261,8 @@ module VCAP::CloudController end context 'with multiple service bindings' do - let!(:binding1) { ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) } - let!(:binding2) { ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) } + let!(:binding1) { create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) } + let!(:binding2) { create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) } it 'returns some errors describing that the service bindings are being deleted asynchronously' do expect { app_delete.delete(app_dataset) }.to raise_error(AppDelete::SubResourceError) do |err| @@ -276,8 +276,8 @@ module VCAP::CloudController end context 'when service binding delete returns errors' do - let!(:binding1) { ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) } - let!(:binding2) { ServiceBinding.make(app: app, service_instance: ManagedServiceInstance.make(space: app.space)) } + let!(:binding1) { create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) } + let!(:binding2) { create(:service_binding, app: app, service_instance: create(:managed_service_instance, space: app.space)) } before do binding_delete_action = V3::ServiceCredentialBindingDelete diff --git a/spec/unit/actions/app_feature_update_spec.rb b/spec/unit/actions/app_feature_update_spec.rb index 39db6fc74be..1283e7e8ded 100644 --- a/spec/unit/actions/app_feature_update_spec.rb +++ b/spec/unit/actions/app_feature_update_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe AppFeatureUpdate do subject(:app_feature_update) { AppFeatureUpdate } - let(:app) { AppModel.make(enable_ssh: false, revisions_enabled: false, service_binding_k8s_enabled: false, file_based_vcap_services_enabled: false) } + let(:app) { create(:app_model, enable_ssh: false, revisions_enabled: false, service_binding_k8s_enabled: false, file_based_vcap_services_enabled: false) } describe '.update' do let(:message) { AppFeatureUpdateMessage.new(enabled: true) } diff --git a/spec/unit/actions/app_find_or_create_skeleton_spec.rb b/spec/unit/actions/app_find_or_create_skeleton_spec.rb index b592ec5b9da..72a2cef2b8f 100644 --- a/spec/unit/actions/app_find_or_create_skeleton_spec.rb +++ b/spec/unit/actions/app_find_or_create_skeleton_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController RSpec.describe AppFindOrCreateSkeleton do let(:user_audit_info) { UserAuditInfo.new(user_email: 'gooid', user_guid: 'amelia@cats.com') } - let(:space) { Space.make } + let(:space) { create(:space) } let(:name) { 'banana' } subject(:action) { AppFindOrCreateSkeleton.new(user_audit_info) } context 'when the app exists' do let(:message) { AppManifestMessage.create_from_yml({ name: }) } - let!(:app) { AppModel.make(name:, space:) } + let!(:app) { create(:app_model, name:, space:) } it 'returns the existing app' do expect(action.find_or_create(message:, space:)).to eq app diff --git a/spec/unit/actions/app_patch_environment_variables_spec.rb b/spec/unit/actions/app_patch_environment_variables_spec.rb index 2f91176a398..3d3536e7969 100644 --- a/spec/unit/actions/app_patch_environment_variables_spec.rb +++ b/spec/unit/actions/app_patch_environment_variables_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe AppPatchEnvironmentVariables do subject(:app_update) { AppPatchEnvironmentVariables.new(user_audit_info) } - let(:app_model) { AppModel.make(name: app_name, environment_variables: existing_environment_variables) } + let(:app_model) { create(:app_model, name: app_name, environment_variables: existing_environment_variables) } let(:user_guid) { double(:user, guid: '1337') } let(:user_email) { 'cool_dude@hoopy_frood.com' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } diff --git a/spec/unit/actions/app_restart_spec.rb b/spec/unit/actions/app_restart_spec.rb index 139ae5a3bbc..9850312ca53 100644 --- a/spec/unit/actions/app_restart_spec.rb +++ b/spec/unit/actions/app_restart_spec.rb @@ -12,18 +12,16 @@ module VCAP::CloudController let(:environment_variables) { { 'FOO' => 'bar' } } let(:desired_state) { ProcessModel::STARTED } let(:app) do - AppModel.make( - :docker, - desired_state:, - environment_variables: - ) + create(:app_model, :docker, + desired_state:, + environment_variables:) end - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } - let!(:droplet) { DropletModel.make(app:) } - let!(:process1) { ProcessModel.make(:process, state: desired_state, app: app) } - let!(:process2) { ProcessModel.make(:process, state: desired_state, app: app) } + let!(:droplet) { create(:droplet_model, app:) } + let!(:process1) { create(:process_model, :process, state: desired_state, app: app) } + let!(:process2) { create(:process_model, :process, state: desired_state, app: app) } let(:runner) { instance_double(VCAP::CloudController::Diego::Runner) } before do @@ -86,7 +84,7 @@ module VCAP::CloudController context 'when we need to make a new revision' do before do app.update(revisions_enabled: true) - app.update(droplet: DropletModel.make(app:)) + app.update(droplet: create(:droplet_model, app:)) allow(ProcessRestart).to receive(:restart).and_call_original allow(ProcessRestart).to receive(:restart).and_call_original diff --git a/spec/unit/actions/app_start_spec.rb b/spec/unit/actions/app_start_spec.rb index 9b97c225110..6e466e07ed9 100644 --- a/spec/unit/actions/app_start_spec.rb +++ b/spec/unit/actions/app_start_spec.rb @@ -12,20 +12,18 @@ module VCAP::CloudController context 'when the app has a docker lifecycle' do let(:app) do - AppModel.make( - :docker, - desired_state: 'STOPPED', - environment_variables: environment_variables - ) + create(:app_model, :docker, + desired_state: 'STOPPED', + environment_variables: environment_variables) end - let(:package) { PackageModel.make(:docker, app: app, state: PackageModel::READY_STATE) } - let!(:droplet) { DropletModel.make(:docker, app: app, package: package, state: DropletModel::STAGED_STATE, docker_receipt_image: package.image) } - let!(:process1) { ProcessModel.make(:process, state: 'STOPPED', app: app) } - let!(:process2) { ProcessModel.make(:process, state: 'STOPPED', app: app) } + let(:package) { create(:package_model, :docker, app: app, state: PackageModel::READY_STATE) } + let!(:droplet) { create(:droplet_model, :docker, app: app, package: package, state: DropletModel::STAGED_STATE, docker_receipt_image: package.image) } + let!(:process1) { create(:process_model, :process, state: 'STOPPED', app: app) } + let!(:process2) { create(:process_model, :process, state: 'STOPPED', app: app) } before do app.update(droplet:) - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'starts the app' do @@ -43,14 +41,13 @@ module VCAP::CloudController context 'when the app has a buildpack lifecycle' do let(:app) do - AppModel.make( - desired_state: 'STOPPED', - environment_variables: environment_variables - ) + create(:app_model, + desired_state: 'STOPPED', + environment_variables: environment_variables) end - let!(:droplet) { DropletModel.make(app:) } - let!(:process1) { ProcessModel.make(:process, state: 'STOPPED', app: app) } - let!(:process2) { ProcessModel.make(:process, state: 'STOPPED', app: app) } + let!(:droplet) { create(:droplet_model, app:) } + let!(:process1) { create(:process_model, :process, state: 'STOPPED', app: app) } + let!(:process2) { create(:process_model, :process, state: 'STOPPED', app: app) } before do app.update(droplet:) @@ -84,19 +81,17 @@ module VCAP::CloudController context 'and the droplet has a package' do let!(:droplet) do - DropletModel.make( - app: app, - package: package, - state: DropletModel::STAGED_STATE - ) + create(:droplet_model, + app: app, + package: package, + state: DropletModel::STAGED_STATE) end let(:package) do - PackageModel.make( - app: app, - package_hash: 'some-sha1', - sha256_checksum: 'some-sha256', - state: PackageModel::READY_STATE - ) + create(:package_model, + app: app, + package_hash: 'some-sha1', + sha256_checksum: 'some-sha256', + state: PackageModel::READY_STATE) end it 'the package_hash for each process refers to the latest package' do @@ -114,23 +109,23 @@ module VCAP::CloudController end context 'when the app has two associated droplets' do - let(:app) { AppModel.make } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', revision: revisionA) } - let!(:worker_process) { ProcessModel.make(app: app, type: 'worker', revision: revisionA) } - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } + let(:app) { create(:app_model) } + let!(:web_process) { create(:process_model, app: app, type: 'web', revision: revisionA) } + let!(:worker_process) { create(:process_model, app: app, type: 'worker', revision: revisionA) } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } let!(:dropletA) do - DropletModel.make( - app: app, - package: package, - state: DropletModel::STAGED_STATE, - process_types: { - 'web' => 'webby', - 'worker' => 'workworkwork' - } - ) - end - let!(:dropletB) { DropletModel.make(app: app, package: package, state: DropletModel::STAGED_STATE) } - let!(:revisionA) { RevisionModel.make(app: app, droplet_guid: dropletA.guid) } + create(:droplet_model, + app: app, + package: package, + state: DropletModel::STAGED_STATE, + process_types: { + 'web' => 'webby', + 'worker' => 'workworkwork' + }, + set_as_current_droplet: false) + end + let!(:dropletB) { create(:droplet_model, app: app, package: package, state: DropletModel::STAGED_STATE, set_as_current_droplet: false) } + let!(:revisionA) { create(:revision_model, app: app, droplet_guid: dropletA.guid) } let!(:new_revision_number) { revisionA.version + 1 } it 'creates a new revision when it switches droplets and revisions are enabled' do @@ -199,7 +194,7 @@ module VCAP::CloudController end describe '#start_without_event' do - let(:app) { AppModel.make(desired_state: 'STOPPED') } + let(:app) { create(:app_model, desired_state: 'STOPPED') } it 'sets the desired state on the app' do AppStart.start_without_event(app) diff --git a/spec/unit/actions/app_stop_spec.rb b/spec/unit/actions/app_stop_spec.rb index 1b616c0a823..7b34f069d8f 100644 --- a/spec/unit/actions/app_stop_spec.rb +++ b/spec/unit/actions/app_stop_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController let(:user_email) { 'guy@place.io' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } - let(:app) { AppModel.make(desired_state: 'STARTED') } + let(:app) { create(:app_model, desired_state: 'STARTED') } let!(:process1) { ProcessModelFactory.make(app: app, state: 'STARTED', type: 'this') } let!(:process2) { ProcessModelFactory.make(app: app, state: 'STARTED', type: 'that') } diff --git a/spec/unit/actions/app_update_spec.rb b/spec/unit/actions/app_update_spec.rb index d3851b85999..ab727019ebb 100644 --- a/spec/unit/actions/app_update_spec.rb +++ b/spec/unit/actions/app_update_spec.rb @@ -5,16 +5,16 @@ module VCAP::CloudController RSpec.describe AppUpdate do subject(:app_update) { AppUpdate.new(user_audit_info, runners:) } - let(:app_model) { AppModel.make(name: app_name) } - let!(:web_process) { VCAP::CloudController::ProcessModel.make(app: app_model) } - let!(:worker_process) { VCAP::CloudController::ProcessModel.make(app: app_model) } + let(:app_model) { create(:app_model, name: app_name) } + let!(:web_process) { create(:process_model, app: app_model) } + let!(:worker_process) { create(:process_model, app: app_model) } let(:user_guid) { double(:user, guid: '1337') } let(:user_email) { 'cool_dude@hoopy_frood.com' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } let(:buildpack) { 'http://original.com' } let(:app_name) { 'original name' } - let!(:ruby_buildpack) { Buildpack.make(name: 'ruby', stack: stack.name) } - let(:stack) { Stack.make(name: 'SUSE') } + let!(:ruby_buildpack) { create(:buildpack, name: 'ruby', stack: stack.name) } + let(:stack) { create(:stack, name: 'SUSE') } let(:runners) { instance_double(Runners, runner_for_process: runner) } let(:runner) { instance_double(Diego::Runner, update_metric_tags: nil) } @@ -79,8 +79,8 @@ module VCAP::CloudController end context 'when app processes are started' do - let!(:web_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } - let!(:worker_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } + let!(:web_process) { create(:process_model, app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } + let!(:worker_process) { create(:process_model, app: app_model, state: VCAP::CloudController::ProcessModel::STARTED) } context 'when sending updates is disabled' do before do @@ -220,8 +220,8 @@ module VCAP::CloudController end context 'when app processes are stopped' do - let!(:web_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } - let!(:worker_process) { VCAP::CloudController::ProcessModel.make(app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } + let!(:web_process) { create(:process_model, app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } + let!(:worker_process) { create(:process_model, app: app_model, state: VCAP::CloudController::ProcessModel::STOPPED) } it 'updates the apps name' do expect(app_model.name).to eq('original name') @@ -336,8 +336,8 @@ module VCAP::CloudController end describe 'updating metadata' do - let!(:app_annotation) { AppAnnotationModel.make(app: app_model, key_name: 'existing_anno', value: 'original-value') } - let!(:delete_annotation) { AppAnnotationModel.make(app: app_model, key_name: 'please', value: 'delete this') } + let!(:app_annotation) { create(:app_annotation_model, app: app_model, key_name: 'existing_anno', value: 'original-value') } + let!(:delete_annotation) { create(:app_annotation_model, app: app_model, key_name: 'please', value: 'delete this') } let(:message) do AppUpdateMessage.new({ @@ -382,7 +382,7 @@ module VCAP::CloudController end describe 'stack state validation on stack change' do - let(:new_stack) { Stack.make(name: 'new-stack') } + let(:new_stack) { create(:stack, name: 'new-stack') } let(:message) do AppUpdateMessage.new({ lifecycle: { @@ -415,7 +415,7 @@ module VCAP::CloudController end context 'when app has previous builds' do - before { BuildModel.make(app: app_model, state: BuildModel::STAGED_STATE) } + before { create(:build_model, app: app_model, state: BuildModel::STAGED_STATE) } it 'allows the update' do expect(app_model.builds_dataset.count).to eq(1) diff --git a/spec/unit/actions/build_create_spec.rb b/spec/unit/actions/build_create_spec.rb index 58eca6992f1..697670b2f66 100644 --- a/spec/unit/actions/build_create_spec.rb +++ b/spec/unit/actions/build_create_spec.rb @@ -48,12 +48,12 @@ module VCAP::CloudController } end let(:lifecycle) { BuildpackLifecycle.new(package, staging_message) } - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:app) { AppModel.make(space:) } - let!(:process) { ProcessModel.make(app: app, memory: 8192, disk_quota: 512, log_rate_limit: 7168) } + let(:app) { create(:app_model, space:) } + let!(:process) { create(:process_model, app: app, memory: 8192, disk_quota: 512, log_rate_limit: 7168) } let(:buildpack_git_url) { 'http://example.com/repo.git' } let(:stack) { Stack.default } @@ -179,8 +179,8 @@ module VCAP::CloudController } end let(:lifecycle) { CNBLifecycle.new(package, staging_message) } - let(:app) { AppModel.make(:cnb, space:) } - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } + let(:app) { create(:app_model, :cnb, space:) } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } it 'creates a build' do build = nil @@ -329,8 +329,8 @@ module VCAP::CloudController describe 'isolation segments' do let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:isolation_segment_model_2) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model_2) { create(:isolation_segment_model) } let(:shared_isolation_segment) do VCAP::CloudController::IsolationSegmentModel.first(guid: VCAP::CloudController::IsolationSegmentModel::SHARED_ISOLATION_SEGMENT_GUID) end @@ -419,7 +419,7 @@ module VCAP::CloudController end context 'when the package is not ready' do - let(:package) { PackageModel.make(app: app, state: PackageModel::PENDING_STATE) } + let(:package) { create(:package_model, app: app, state: PackageModel::PENDING_STATE) } it 'raises an InvalidPackage exception' do expect do @@ -429,14 +429,13 @@ module VCAP::CloudController end context 'when any buildpack is disabled' do - let!(:disabled_buildpack) { Buildpack.make(enabled: false, name: 'disabled-buildpack') } - let!(:enabled_buildpack) { Buildpack.make(name: 'enabled-buildpack') } + let!(:disabled_buildpack) { create(:buildpack, enabled: false, name: 'disabled-buildpack') } + let!(:enabled_buildpack) { create(:buildpack, name: 'enabled-buildpack') } let!(:lifecycle_data_model) do - VCAP::CloudController::BuildpackLifecycleDataModel.make( - app: app, - buildpacks: [disabled_buildpack.name, enabled_buildpack.name, 'http://custom-buildpack.example'], - stack: stack.name - ) + create(:buildpack_lifecycle_data_model, + app: app, + buildpacks: [disabled_buildpack.name, enabled_buildpack.name, 'http://custom-buildpack.example'], + stack: stack.name) end let(:lifecycle_data) do { @@ -453,7 +452,7 @@ module VCAP::CloudController end context 'when stack is DISABLED' do - let(:disabled_stack) { Stack.make(name: 'cflinuxfs3', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } + let(:disabled_stack) { create(:stack, name: 'cflinuxfs3', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } let(:lifecycle_data) do { stack: disabled_stack.name, @@ -481,7 +480,7 @@ module VCAP::CloudController end context 'when stack is RESTRICTED' do - let(:restricted_stack) { Stack.make(name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } + let(:restricted_stack) { create(:stack, name: 'cflinuxfs3', state: 'RESTRICTED', description: 'No new apps') } let(:lifecycle_data) do { stack: restricted_stack.name, @@ -512,7 +511,7 @@ module VCAP::CloudController context 'app has previous builds' do before do - BuildModel.make(app: app, state: BuildModel::STAGED_STATE) + create(:build_model, app: app, state: BuildModel::STAGED_STATE) end it 'allows restaging' do @@ -533,7 +532,7 @@ module VCAP::CloudController context 'when there is already a staging in progress for the app' do it 'raises a StagingInProgress exception' do - BuildModel.make(state: BuildModel::STAGING_STATE, app: app) + create(:build_model, state: BuildModel::STAGING_STATE, app: app) expect do action.create_and_stage(package:, lifecycle:) end.to raise_error(BuildCreate::StagingInProgress) @@ -565,7 +564,7 @@ module VCAP::CloudController end describe 'using custom buildpacks' do - let!(:app) { AppModel.make(space:) } + let!(:app) { create(:app_model, space:) } context 'when custom buildpacks are disabled' do before { TestConfig.override(disable_custom_buildpacks: true) } @@ -578,7 +577,7 @@ module VCAP::CloudController before do app.update(buildpack_lifecycle_data: BuildpackLifecycleDataModel.create( buildpacks: ['http://example.com/repo.git'], - stack: Stack.make.name + stack: create(:stack).name )) end @@ -624,10 +623,9 @@ module VCAP::CloudController context 'when custom buildpacks are enabled' do context 'when the custom buildpack is inherited from the app' do let!(:app_lifecycle_data_model) do - BuildpackLifecycleDataModel.make( - buildpacks: ['http://example.com/repo.git'], - app: app - ) + create(:buildpack_lifecycle_data_model, + buildpacks: ['http://example.com/repo.git'], + app: app) end let(:lifecycle_data) do diff --git a/spec/unit/actions/build_delete_spec.rb b/spec/unit/actions/build_delete_spec.rb index e5fedf43f63..b3354ca8f08 100644 --- a/spec/unit/actions/build_delete_spec.rb +++ b/spec/unit/actions/build_delete_spec.rb @@ -8,9 +8,9 @@ module VCAP::CloudController let(:cancel_action) { instance_double(StagingCancel, cancel: nil) } describe '#delete_for_app' do - let!(:app) { AppModel.make } - let!(:build1) { BuildModel.make(app: app, state: BuildModel::STAGED_STATE) } - let!(:build2) { BuildModel.make(app: app, state: BuildModel::STAGING_STATE) } + let!(:app) { create(:app_model) } + let!(:build1) { create(:build_model, app: app, state: BuildModel::STAGED_STATE) } + let!(:build2) { create(:build_model, app: app, state: BuildModel::STAGING_STATE) } it 'deletes the builds' do expect do @@ -26,8 +26,8 @@ module VCAP::CloudController end it 'deletes associated labels' do - label1 = BuildLabelModel.make(build: build1, key_name: 'test', value: 'bommel') - label2 = BuildLabelModel.make(build: build2, key_name: 'test', value: 'bommel') + label1 = create(:build_label_model, build: build1, key_name: 'test', value: 'bommel') + label2 = create(:build_label_model, build: build2, key_name: 'test', value: 'bommel') expect do build_delete.delete_for_app(app.guid) @@ -36,8 +36,8 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation1 = BuildAnnotationModel.make(build: build1, key_name: 'test', value: 'bommel') - annotation2 = BuildAnnotationModel.make(build: build2, key_name: 'test', value: 'bommel') + annotation1 = create(:build_annotation_model, build: build1, key_name: 'test', value: 'bommel') + annotation2 = create(:build_annotation_model, build: build2, key_name: 'test', value: 'bommel') expect do build_delete.delete_for_app(app.guid) @@ -46,12 +46,10 @@ module VCAP::CloudController end it 'deletes associated buildpack lifecycle data/buildpack' do - lifecycle_buildpack1 = BuildpackLifecycleBuildpackModel.make( - buildpack_lifecycle_data: build1.buildpack_lifecycle_data, admin_buildpack_name: nil, buildpack_url: 'http://example.com/buildpack1' - ) - lifecycle_buildpack2 = BuildpackLifecycleBuildpackModel.make( - buildpack_lifecycle_data: build2.buildpack_lifecycle_data, admin_buildpack_name: nil, buildpack_url: 'http://example.com/buildpack2' - ) + lifecycle_buildpack1 = create(:buildpack_lifecycle_buildpack_model, + buildpack_lifecycle_data: build1.buildpack_lifecycle_data, admin_buildpack_name: nil, buildpack_url: 'http://example.com/buildpack1') + lifecycle_buildpack2 = create(:buildpack_lifecycle_buildpack_model, + buildpack_lifecycle_data: build2.buildpack_lifecycle_data, admin_buildpack_name: nil, buildpack_url: 'http://example.com/buildpack2') expect do build_delete.delete_for_app(app.guid) diff --git a/spec/unit/actions/build_update_spec.rb b/spec/unit/actions/build_update_spec.rb index c8fb38e8a04..b4fe20a2e9c 100644 --- a/spec/unit/actions/build_update_spec.rb +++ b/spec/unit/actions/build_update_spec.rb @@ -38,7 +38,7 @@ module VCAP::CloudController } } end - let(:build) { BuildModel.make } + let(:build) { create(:build_model) } let(:message) { BuildUpdateMessage.new(body) } context 'when there is no current metadata' do diff --git a/spec/unit/actions/buildpack_create_spec.rb b/spec/unit/actions/buildpack_create_spec.rb index 15e0fa28f8d..7cc08e2c3b5 100644 --- a/spec/unit/actions/buildpack_create_spec.rb +++ b/spec/unit/actions/buildpack_create_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe BuildpackCreate do describe 'create' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } diff --git a/spec/unit/actions/buildpack_delete_spec.rb b/spec/unit/actions/buildpack_delete_spec.rb index 4fde34b6cc2..27697f54b9b 100644 --- a/spec/unit/actions/buildpack_delete_spec.rb +++ b/spec/unit/actions/buildpack_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe BuildpackDelete do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } @@ -11,7 +11,7 @@ module VCAP::CloudController subject(:buildpack_delete) { BuildpackDelete.new(user_audit_info) } describe '#delete' do - let!(:buildpack) { Buildpack.make } + let!(:buildpack) { create(:buildpack) } it 'deletes the buildpack record' do expect do @@ -74,8 +74,8 @@ module VCAP::CloudController end context 'when the buildpack has associated metadata' do - let!(:label) { BuildpackLabelModel.make(resource_guid: buildpack.guid, key_name: 'test', value: 'bommel') } - let!(:annotation) { BuildpackAnnotationModel.make(resource_guid: buildpack.guid, key_name: 'test', value: 'bommel') } + let!(:label) { create(:buildpack_label_model, resource_guid: buildpack.guid, key_name: 'test', value: 'bommel') } + let!(:annotation) { create(:buildpack_annotation_model, resource_guid: buildpack.guid, key_name: 'test', value: 'bommel') } it 'deletes associated labels' do expect do diff --git a/spec/unit/actions/buildpack_update_spec.rb b/spec/unit/actions/buildpack_update_spec.rb index 848f485ca69..b804a7ae713 100644 --- a/spec/unit/actions/buildpack_update_spec.rb +++ b/spec/unit/actions/buildpack_update_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController RSpec.describe BuildpackUpdate do describe 'update' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } - let!(:buildpack1) { Buildpack.make(position: 1) } - let!(:buildpack2) { Buildpack.make(position: 2) } - let!(:buildpack3) { Buildpack.make(position: 3) } + let!(:buildpack1) { create(:buildpack, position: 1) } + let!(:buildpack2) { create(:buildpack, position: 2) } + let!(:buildpack3) { create(:buildpack, position: 3) } context 'when position is provided' do context 'when position is between 1 and number of buildpacks' do @@ -129,8 +129,8 @@ module VCAP::CloudController end context 'when stacks are nil' do - let(:buildpack1) { Buildpack.make(stack: nil) } - let(:buildpack2) { Buildpack.make(stack: nil) } + let(:buildpack1) { create(:buildpack, :nil_stack) } + let(:buildpack2) { create(:buildpack, :nil_stack) } it 'raises a human-friendly error' do message = BuildpackUpdateMessage.new(name: buildpack1.name) diff --git a/spec/unit/actions/buildpack_upload_spec.rb b/spec/unit/actions/buildpack_upload_spec.rb index ffb4b857d40..d8e31f1ef1d 100644 --- a/spec/unit/actions/buildpack_upload_spec.rb +++ b/spec/unit/actions/buildpack_upload_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe BuildpackUpload do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } diff --git a/spec/unit/actions/deployment_cancel_spec.rb b/spec/unit/actions/deployment_cancel_spec.rb index 0ef69bf783c..7cc327b2c90 100644 --- a/spec/unit/actions/deployment_cancel_spec.rb +++ b/spec/unit/actions/deployment_cancel_spec.rb @@ -4,24 +4,23 @@ module VCAP::CloudController RSpec.describe DeploymentCancel do - let(:space) { Space.make } + let(:space) { create(:space) } let(:instance_count) { 6 } - let(:app) { AppModel.make } - let(:old_droplet) { DropletModel.make(app: app, process_types: { 'web' => 'the internet' }) } - let(:new_droplet) { DropletModel.make(app: app, process_types: { 'web' => 'the net' }) } + let(:app) { create(:app_model) } + let(:old_droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'the internet' }) } + let(:new_droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'the net' }) } let(:original_web_process) { ProcessModelFactory.make(space: space, instances: 1, state: 'STARTED', app: app) } let(:deploying_web_process) { ProcessModelFactory.make(space: space, instances: instance_count, state: 'STARTED', app: app, type: 'web-deployment-deployment-guid') } let(:status_reason) { nil } let!(:deployment) do - VCAP::CloudController::DeploymentModel.make( - state: state, - status_value: status_value, - status_reason: status_reason, - app: original_web_process.app, - deploying_web_process: deploying_web_process, - droplet: new_droplet, - previous_droplet: old_droplet - ) + create(:deployment_model, + state: state, + status_value: status_value, + status_reason: status_reason, + app: original_web_process.app, + deploying_web_process: deploying_web_process, + droplet: new_droplet, + previous_droplet: old_droplet) end before do diff --git a/spec/unit/actions/deployment_continue_spec.rb b/spec/unit/actions/deployment_continue_spec.rb index c429640f392..6bc49246e65 100644 --- a/spec/unit/actions/deployment_continue_spec.rb +++ b/spec/unit/actions/deployment_continue_spec.rb @@ -4,22 +4,21 @@ module VCAP::CloudController RSpec.describe DeploymentContinue do - let(:space) { Space.make } + let(:space) { create(:space) } let(:instance_count) { 6 } - let(:app) { AppModel.make } - let(:droplet) { DropletModel.make(app: app, process_types: { 'web' => 'the net' }) } + let(:app) { create(:app_model) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'the net' }) } let(:original_web_process) { ProcessModelFactory.make(space: space, instances: 1, state: 'STARTED', app: app) } let(:deploying_web_process) { ProcessModelFactory.make(space: space, instances: instance_count, state: 'STARTED', app: app, type: 'web-deployment-deployment-guid') } let(:status_reason) { nil } let!(:deployment) do - VCAP::CloudController::DeploymentModel.make( - state: state, - status_value: status_value, - status_reason: status_reason, - droplet: droplet, - app: original_web_process.app, - deploying_web_process: deploying_web_process - ) + create(:deployment_model, + state: state, + status_value: status_value, + status_reason: status_reason, + droplet: droplet, + app: original_web_process.app, + deploying_web_process: deploying_web_process) end let(:user_audit_info) { UserAuditInfo.new(user_guid: '1234', user_email: 'eric@example.com', user_name: 'eric') } @@ -66,15 +65,14 @@ module VCAP::CloudController context 'and there are no remaining steps' do let!(:deployment) do - VCAP::CloudController::DeploymentModel.make( - state: state, - status_value: status_value, - status_reason: status_reason, - droplet: droplet, - app: original_web_process.app, - deploying_web_process: deploying_web_process, - canary_current_step: 2 - ) + create(:deployment_model, + state: state, + status_value: status_value, + status_reason: status_reason, + droplet: droplet, + app: original_web_process.app, + deploying_web_process: deploying_web_process, + canary_current_step: 2) end it 'sets the deployments status to DEPLOYING' do @@ -112,16 +110,15 @@ module VCAP::CloudController context 'and there are remaining steps' do let!(:deployment) do - VCAP::CloudController::DeploymentModel.make( - state: state, - status_value: status_value, - status_reason: status_reason, - droplet: droplet, - app: original_web_process.app, - deploying_web_process: deploying_web_process, - canary_current_step: 1, - canary_steps: [{ 'instance_weight' => 10 }, { 'instance_weight' => 40 }] - ) + create(:deployment_model, + state: state, + status_value: status_value, + status_reason: status_reason, + droplet: droplet, + app: original_web_process.app, + deploying_web_process: deploying_web_process, + canary_current_step: 1, + canary_steps: [{ 'instance_weight' => 10 }, { 'instance_weight' => 40 }]) end it 'sets the deployments status to PREPAUSED' do diff --git a/spec/unit/actions/deployment_create_spec.rb b/spec/unit/actions/deployment_create_spec.rb index 0526d4bae4b..976be47d5f0 100644 --- a/spec/unit/actions/deployment_create_spec.rb +++ b/spec/unit/actions/deployment_create_spec.rb @@ -4,15 +4,15 @@ module VCAP::CloudController RSpec.describe DeploymentCreate do - let(:app) { AppModel.make(desired_state: ProcessModel::STARTED) } - - let!(:web_process) { ProcessModel.make(app: app, instances: original_instances, memory: 500, disk_quota: 1024, log_rate_limit: 101, state: process_state) } - let(:original_droplet) { DropletModel.make(app: app, process_types: { 'web' => 'asdf' }) } - let(:next_droplet) { DropletModel.make(app: app, process_types: { 'web' => '1234' }) } - let!(:route1) { Route.make(space: app.space) } - let!(:route_mapping1) { RouteMappingModel.make(app: app, route: route1, process_type: web_process.type) } - let!(:route2) { Route.make(space: app.space) } - let!(:route_mapping2) { RouteMappingModel.make(app: app, route: route2, process_type: web_process.type) } + let(:app) { create(:app_model, desired_state: ProcessModel::STARTED) } + + let!(:web_process) { create(:process, app: app, instances: original_instances, memory: 500, disk_quota: 1024, log_rate_limit: 101, state: process_state) } + let(:original_droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'asdf' }, set_as_current_droplet: false) } + let(:next_droplet) { create(:droplet_model, app: app, process_types: { 'web' => '1234' }, set_as_current_droplet: false) } + let!(:route1) { create(:route, space: app.space) } + let!(:route_mapping1) { create(:route_mapping_model, app: app, route: route1, process_type: web_process.type) } + let!(:route2) { create(:route, space: app.space) } + let!(:route_mapping2) { create(:route_mapping_model, app: app, route: route2, process_type: web_process.type) } let(:user_audit_info) { UserAuditInfo.new(user_guid: '123', user_email: 'connor@example.com', user_name: 'braa') } let(:runner) { instance_double(Diego::Runner) } @@ -49,16 +49,14 @@ module VCAP::CloudController describe '#create' do context 'when the old process has metadata' do before do - ProcessLabelModel.make( - key_name: 'freaky', - value: 'wednesday', - resource_guid: web_process.guid - ) - ProcessAnnotationModel.make( - key_name: 'tokyo', - value: 'grapes', - resource_guid: web_process.guid - ) + create(:process_label_model, + key_name: 'freaky', + value: 'wednesday', + resource_guid: web_process.guid) + create(:process_annotation_model, + key_name: 'tokyo', + value: 'grapes', + resource_guid: web_process.guid) end it 'assigns the old process metadata to the new process' do @@ -119,7 +117,7 @@ module VCAP::CloudController end it 'has the reason for a droplet changed' do - RevisionModel.make(app: app, droplet_guid: app.droplet.guid, environment_variables: app.environment_variables) + create(:revision_model, app: app, droplet_guid: app.droplet.guid, environment_variables: app.environment_variables) DeploymentCreate.create(app:, message:, user_audit_info:) revision = RevisionModel.last @@ -213,57 +211,55 @@ module VCAP::CloudController context 'when there are multiple web processes' do let!(:web_process) do - ProcessModel.make( - app: app, - type: ProcessTypes::WEB, - created_at: Time.now - 24.hours, - command: 'old command!', - instances: 3, - memory: 1, - file_descriptors: 3, - disk_quota: 5, - metadata: { foo: 'bar' }, - detected_buildpack: 'ruby yo', - health_check_timeout: 7, - health_check_type: 'http', - health_check_http_endpoint: '/old_dawg', - health_check_invocation_timeout: 9, - health_check_interval: 10, - readiness_health_check_type: 'http', - readiness_health_check_http_endpoint: '/ready', - readiness_health_check_invocation_timeout: 21, - readiness_health_check_interval: 11, - log_rate_limit: 11, - enable_ssh: true, - ports: [] - ) + create(:process, + app: app, + type: ProcessTypes::WEB, + created_at: Time.now - 24.hours, + command: 'old command!', + instances: 3, + memory: 1, + file_descriptors: 3, + disk_quota: 5, + metadata: { foo: 'bar' }, + detected_buildpack: 'ruby yo', + health_check_timeout: 7, + health_check_type: 'http', + health_check_http_endpoint: '/old_dawg', + health_check_invocation_timeout: 9, + health_check_interval: 10, + readiness_health_check_type: 'http', + readiness_health_check_http_endpoint: '/ready', + readiness_health_check_invocation_timeout: 21, + readiness_health_check_interval: 11, + log_rate_limit: 11, + enable_ssh: true, + ports: []) end let!(:newer_web_process) do - ProcessModel.make( - app: app, - type: ProcessTypes::WEB, - created_at: Time.now - 23.hours, - command: 'new command!', - instances: 4, - memory: 2, - file_descriptors: 4, - disk_quota: 6, - metadata: { qux: 'baz' }, - detected_buildpack: 'golang', - health_check_timeout: 8, - health_check_type: 'port', - health_check_http_endpoint: '/new_cat', - health_check_invocation_timeout: 10, - health_check_interval: 11, - readiness_health_check_type: 'http', - readiness_health_check_http_endpoint: '/new_ready', - readiness_health_check_invocation_timeout: 22, - readiness_health_check_interval: 15, - log_rate_limit: 12, - enable_ssh: false, - ports: nil - ) + create(:process, + app: app, + type: ProcessTypes::WEB, + created_at: Time.now - 23.hours, + command: 'new command!', + instances: 4, + memory: 2, + file_descriptors: 4, + disk_quota: 6, + metadata: { qux: 'baz' }, + detected_buildpack: 'golang', + health_check_timeout: 8, + health_check_type: 'port', + health_check_http_endpoint: '/new_cat', + health_check_invocation_timeout: 10, + health_check_interval: 11, + readiness_health_check_type: 'http', + readiness_health_check_http_endpoint: '/new_ready', + readiness_health_check_invocation_timeout: 22, + readiness_health_check_interval: 15, + log_rate_limit: 12, + enable_ssh: false, + ports: nil) end it 'creates a process of web type with the same characteristics as the newer web process' do @@ -352,8 +348,8 @@ module VCAP::CloudController end context 'when the app does not have a droplet set' do - let(:app_without_current_droplet) { AppModel.make } - let(:next_droplet) { DropletModel.make(app: app_without_current_droplet, process_types: { 'web' => 'asdf' }) } + let(:app_without_current_droplet) { create(:app_model) } + let(:next_droplet) { create(:droplet_model, app: app_without_current_droplet, process_types: { 'web' => 'asdf' }, set_as_current_droplet: false) } it 'sets the droplet on the deployment' do deployment = DeploymentCreate.create(app: app_without_current_droplet, message: message, user_audit_info: user_audit_info) @@ -395,7 +391,7 @@ module VCAP::CloudController end context 'when the current droplet assignment fails' do - let(:unaffiliated_droplet) { DropletModel.make } + let(:unaffiliated_droplet) { create(:droplet_model) } let(:message) do DeploymentCreateMessage.new({ relationships: { app: { data: { guid: app.guid } } }, @@ -413,18 +409,18 @@ module VCAP::CloudController context 'when there is an existing deployment' do let(:originally_desired_instance_count) { 10 } let!(:existing_deployment) do - DeploymentModel.make( - app: app, - state: existing_state, - droplet: nil, - previous_droplet: original_droplet, - original_web_process_instance_count: originally_desired_instance_count - ) + create(:deployment_model, + app: app, + state: existing_state, + droplet: nil, + previous_droplet: original_droplet, + original_web_process_instance_count: originally_desired_instance_count) end before do web_process.update(instances: 5) web_process.save + app.update(droplet: original_droplet) end context 'when the existing deployment is DEPLOYING' do @@ -638,10 +634,10 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, memory: 999) } + let!(:web_process) { create(:process, app: app, instances: 3, memory: 999) } before do - app.organization.quota_definition = QuotaDefinition.make(app.organization, memory_limit: 10_000) + app.organization.quota_definition = create(:quota_definition, memory_limit: 10_000) app.organization.save end @@ -686,10 +682,10 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, memory: 999) } + let!(:web_process) { create(:process, app: app, instances: 3, memory: 999) } before do - app.organization.quota_definition = QuotaDefinition.make(app.organization, memory_limit: 10_000) + app.organization.quota_definition = create(:quota_definition, memory_limit: 10_000) app.organization.save end @@ -738,7 +734,7 @@ module VCAP::CloudController context 'when the same droplet is provided (zdt-restart)' do let!(:revision) do - RevisionModel.make(app: app, droplet_guid: app.droplet_guid) + create(:revision_model, app: app, droplet_guid: app.droplet_guid) end it 'does NOT creates a revision' do @@ -875,10 +871,10 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, memory: 999, state: 'STOPPED') } + let!(:web_process) { create(:process, app: app, instances: 3, memory: 999, state: 'STOPPED') } before do - app.organization.quota_definition = QuotaDefinition.make(app.organization, memory_limit: 10_000) + app.organization.quota_definition = create(:quota_definition, memory_limit: 10_000) app.organization.save end @@ -932,10 +928,10 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, memory: 999, state: process_state) } + let!(:web_process) { create(:process, app: app, instances: 3, memory: 999, state: process_state) } before do - app.organization.quota_definition = QuotaDefinition.make(app.organization, memory_limit: 10_000) + app.organization.quota_definition = create(:quota_definition, memory_limit: 10_000) app.organization.save end @@ -981,7 +977,7 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, disk_quota: 999, state: process_state) } + let!(:web_process) { create(:process, app: app, instances: 3, disk_quota: 999, state: process_state) } before do TestConfig.override(maximum_app_disk_in_mb: 1000) @@ -1030,10 +1026,10 @@ module VCAP::CloudController end context 'quota validations' do - let!(:web_process) { ProcessModel.make(app: app, instances: 3, log_rate_limit: 999, memory: 999, state: process_state) } + let!(:web_process) { create(:process, app: app, instances: 3, log_rate_limit: 999, memory: 999, state: process_state) } before do - app.organization.quota_definition = QuotaDefinition.make(app.organization, log_rate_limit: 10_000) + app.organization.quota_definition = create(:quota_definition, log_rate_limit: 10_000) app.organization.save end @@ -1142,27 +1138,25 @@ module VCAP::CloudController end context 'when a revision is provided on the message (rollback)' do - let(:revision_droplet) { DropletModel.make(app: app, process_types: { 'web' => '1234' }) } - let(:rollback_droplet) { DropletModel.make(app: app, process_types: { 'web' => '5678' }) } + let(:revision_droplet) { create(:droplet_model, app: app, process_types: { 'web' => '1234' }, set_as_current_droplet: false) } + let(:rollback_droplet) { create(:droplet_model, app: app, process_types: { 'web' => '5678' }, set_as_current_droplet: false) } let!(:rollback_revision) do - RevisionModel.make( - app_guid: app.guid, - description: 'rollback revision', - droplet_guid: rollback_droplet.guid, - environment_variables: { 'foo' => 'var2' }, - version: 2 - ) + create(:revision_model, + app_guid: app.guid, + description: 'rollback revision', + droplet_guid: rollback_droplet.guid, + environment_variables: { 'foo' => 'var2' }, + version: 2) end let!(:revision) do - RevisionModel.make( - app_guid: app.guid, - description: 'latest revision', - droplet_guid: revision_droplet.guid, - environment_variables: { 'foo' => 'var' }, - version: 3 - ) + create(:revision_model, + app_guid: app.guid, + description: 'latest revision', + droplet_guid: revision_droplet.guid, + environment_variables: { 'foo' => 'var' }, + version: 3) end let(:message) do @@ -1287,12 +1281,11 @@ module VCAP::CloudController context 'when trying to roll back to a revision where the code and config has not changed' do let!(:initial_revision) do - RevisionModel.make( - app_guid: app.guid, - droplet_guid: revision.droplet_guid, - environment_variables: revision.environment_variables, - version: 1 - ) + create(:revision_model, + app_guid: app.guid, + droplet_guid: revision.droplet_guid, + environment_variables: revision.environment_variables, + version: 1) end let(:message) do diff --git a/spec/unit/actions/deployment_delete_spec.rb b/spec/unit/actions/deployment_delete_spec.rb index 5efa15b1d86..05100431124 100644 --- a/spec/unit/actions/deployment_delete_spec.rb +++ b/spec/unit/actions/deployment_delete_spec.rb @@ -12,8 +12,8 @@ module VCAP::CloudController end it 'deletes associated labels' do - label1 = DeploymentLabelModel.make(deployment: deployment1, key_name: 'test', value: 'bommel') - label2 = DeploymentLabelModel.make(deployment: deployment2, key_name: 'test', value: 'bommel') + label1 = create(:deployment_label_model, deployment: deployment1, key_name: 'test', value: 'bommel') + label2 = create(:deployment_label_model, deployment: deployment2, key_name: 'test', value: 'bommel') expect do deployment_delete @@ -22,8 +22,8 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation1 = DeploymentAnnotationModel.make(deployment: deployment1, key_name: 'test', value: 'bommel') - annotation2 = DeploymentAnnotationModel.make(deployment: deployment2, key_name: 'test', value: 'bommel') + annotation1 = create(:deployment_annotation_model, deployment: deployment1, key_name: 'test', value: 'bommel') + annotation2 = create(:deployment_annotation_model, deployment: deployment2, key_name: 'test', value: 'bommel') expect do deployment_delete @@ -32,8 +32,8 @@ module VCAP::CloudController end it 'deletes associated historical processes' do - process1 = DeploymentProcessModel.make(deployment: deployment1) - process2 = DeploymentProcessModel.make(deployment: deployment2) + process1 = create(:deployment_process_model, deployment: deployment1) + process2 = create(:deployment_process_model, deployment: deployment2) expect do deployment_delete @@ -42,9 +42,9 @@ module VCAP::CloudController end end - let!(:app) { AppModel.make } - let!(:deployment1) { DeploymentModel.make(app:) } - let!(:deployment2) { DeploymentModel.make(app:) } + let!(:app) { create(:app_model) } + let!(:deployment1) { create(:deployment_model, app:) } + let!(:deployment2) { create(:deployment_model, app:) } describe '#delete' do it_behaves_like 'DeploymentDelete action' do diff --git a/spec/unit/actions/deployment_update_spec.rb b/spec/unit/actions/deployment_update_spec.rb index e02ce360fda..4cc580d4862 100644 --- a/spec/unit/actions/deployment_update_spec.rb +++ b/spec/unit/actions/deployment_update_spec.rb @@ -3,28 +3,26 @@ module VCAP::CloudController RSpec.describe DeploymentUpdate do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_email: 'user@example.com', user_guid: user.guid) } describe '#update' do - let!(:deployment) { DeploymentModel.make } + let!(:deployment) { create(:deployment_model) } let!(:label) do - VCAP::CloudController::DeploymentLabelModel.make( - key_prefix: 'indiana.edu', - key_name: 'state', - value: 'Indiana', - resource_guid: deployment.guid - ) + create(:deployment_label_model, + key_prefix: 'indiana.edu', + key_name: 'state', + value: 'Indiana', + resource_guid: deployment.guid) end let!(:annotation) do - VCAP::CloudController::DeploymentAnnotationModel.make( - key_name: 'University', - value: 'Toronto', - resource_guid: deployment.guid - ) + create(:deployment_annotation_model, + key_name: 'University', + value: 'Toronto', + resource_guid: deployment.guid) end let(:message) do diff --git a/spec/unit/actions/domain_create_spec.rb b/spec/unit/actions/domain_create_spec.rb index 2ad4ae62d10..9ffc47a6766 100644 --- a/spec/unit/actions/domain_create_spec.rb +++ b/spec/unit/actions/domain_create_spec.rb @@ -22,7 +22,7 @@ module VCAP::CloudController describe '#create' do context 'when there is a sequel validation error' do context 'when the validation error is non-specific' do - let(:private_domain) { PrivateDomain.make } + let(:private_domain) { create(:private_domain) } let(:domain) { "sub.#{private_domain.name}" } let(:message) { DomainCreateMessage.new({ name: domain }) } @@ -61,7 +61,7 @@ module VCAP::CloudController end context 'when the error is a uniqueness error' do - let(:existing_domain) { SharedDomain.make } + let(:existing_domain) { create(:shared_domain) } let(:message) { DomainCreateMessage.new({ name: existing_domain.name }) } it 'returns an informative error message' do @@ -72,7 +72,7 @@ module VCAP::CloudController end context 'when the error is a quota error' do - let(:org) { Organization.make(quota_definition: VCAP::CloudController::QuotaDefinition.make(total_private_domains: 0)) } + let(:org) { create(:organization, quota_definition: create(:quota_definition, total_private_domains: 0)) } let(:message) { DomainCreateMessage.new({ name: 'foo.com', relationships: { organization: { data: { guid: org.guid } } } }) } it 'returns an informative error message' do @@ -117,9 +117,9 @@ module VCAP::CloudController end context 'when creating a private domain' do - let(:organization) { Organization.make } - let(:shared_org1) { Organization.make } - let(:shared_org2) { Organization.make } + let(:organization) { create(:organization) } + let(:shared_org1) { create(:organization) } + let(:shared_org2) { create(:organization) } let(:message) do DomainCreateMessage.new({ diff --git a/spec/unit/actions/domain_delete_shared_org_spec.rb b/spec/unit/actions/domain_delete_shared_org_spec.rb index a52e329378c..a7e71d4dd54 100644 --- a/spec/unit/actions/domain_delete_shared_org_spec.rb +++ b/spec/unit/actions/domain_delete_shared_org_spec.rb @@ -8,8 +8,8 @@ module VCAP::CloudController describe '#delete' do context 'when deleting a shared domain' do - let(:domain) { SharedDomain.make } - let(:shared_org1) { Organization.make } + let(:domain) { create(:shared_domain) } + let(:shared_org1) { create(:organization) } it 'raises an error' do expect do @@ -21,8 +21,8 @@ module VCAP::CloudController end context 'when the org is the owning org' do - let(:shared_org1) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: shared_org1) } + let(:shared_org1) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: shared_org1) } it 'raises an error' do expect do @@ -34,8 +34,8 @@ module VCAP::CloudController end context 'when unsharing a private domain not shared with org' do - let(:domain) { PrivateDomain.make } - let(:shared_org1) { Organization.make } + let(:domain) { create(:private_domain) } + let(:shared_org1) { create(:organization) } it 'deletes shared orgs for private domain' do expect do @@ -47,8 +47,8 @@ module VCAP::CloudController end context 'when unsharing a shared private domain' do - let(:domain) { PrivateDomain.make } - let(:shared_org1) { Organization.make } + let(:domain) { create(:private_domain) } + let(:shared_org1) { create(:organization) } before do domain.add_shared_organization(shared_org1) @@ -62,9 +62,9 @@ module VCAP::CloudController end context 'when unsharing a private domain with routes in the org' do - let(:domain) { PrivateDomain.make } - let(:space) { Space.make } - let(:route) { Route.make(space:, domain:) } + let(:domain) { create(:private_domain) } + let(:space) { create(:space) } + let(:route) { create(:route, space:, domain:) } before do domain.add_shared_organization(space.organization) diff --git a/spec/unit/actions/domain_delete_spec.rb b/spec/unit/actions/domain_delete_spec.rb index ac23b7a2f84..bd527ebbb94 100644 --- a/spec/unit/actions/domain_delete_spec.rb +++ b/spec/unit/actions/domain_delete_spec.rb @@ -4,18 +4,18 @@ module VCAP::CloudController RSpec.describe DomainDelete do subject(:domain_delete) { DomainDelete.new } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } before do TestConfig.override(kubernetes: {}) end describe '#delete' do - let!(:domain) { Domain.make(owning_organization: org) } + let!(:domain) { create(:domain, owning_organization: org) } it 'deletes the domain record' do expect do @@ -25,13 +25,13 @@ module VCAP::CloudController end describe 'recursive deletion' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:process_type) { 'web' } - let(:process) { ProcessModel.make(app: app, type: process_type) } - let(:route) { Route.make(domain: domain, space: space, host: 'test') } - let(:service_instance) { ManagedServiceInstance.make(:routing, space:) } - let!(:route_binding) { RouteBinding.make(route:, service_instance:) } - let!(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: process_type, app_port: 8080) } + let(:process) { create(:process_model, app: app, type: process_type) } + let(:route) { create(:route, domain: domain, space: space, host: 'test') } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } + let!(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: process_type, app_port: 8080) } before do stub_unbind(route_binding) diff --git a/spec/unit/actions/domain_update_shared_orgs_spec.rb b/spec/unit/actions/domain_update_shared_orgs_spec.rb index c7ad669963c..26a77c9fe75 100644 --- a/spec/unit/actions/domain_update_shared_orgs_spec.rb +++ b/spec/unit/actions/domain_update_shared_orgs_spec.rb @@ -8,10 +8,10 @@ module VCAP::CloudController describe '#update' do context 'when creating a private domain' do - let(:domain) { PrivateDomain.make } - let(:organization) { Organization.make } - let(:shared_org1) { Organization.make } - let(:shared_org2) { Organization.make } + let(:domain) { create(:private_domain) } + let(:organization) { create(:organization) } + let(:shared_org1) { create(:organization) } + let(:shared_org2) { create(:organization) } let(:message) do DomainUpdateSharedOrgsMessage.new({ diff --git a/spec/unit/actions/domain_update_spec.rb b/spec/unit/actions/domain_update_spec.rb index e4af3b755df..201c3583b75 100644 --- a/spec/unit/actions/domain_update_spec.rb +++ b/spec/unit/actions/domain_update_spec.rb @@ -39,7 +39,7 @@ module VCAP::CloudController } end - let(:domain) { SharedDomain.make } + let(:domain) { create(:shared_domain) } let(:message) { DomainUpdateMessage.new(body.merge({ guid: domain.guid })) } context 'when there is no current metadata' do diff --git a/spec/unit/actions/droplet_copy_spec.rb b/spec/unit/actions/droplet_copy_spec.rb index 5498b3aeb8c..b1630076032 100644 --- a/spec/unit/actions/droplet_copy_spec.rb +++ b/spec/unit/actions/droplet_copy_spec.rb @@ -4,23 +4,23 @@ module VCAP::CloudController RSpec.describe DropletCopy do let(:droplet_copy) { DropletCopy.new(source_droplet) } - let(:source_space) { VCAP::CloudController::Space.make } - let!(:target_app) { VCAP::CloudController::AppModel.make(name: 'target-app-name') } - let!(:source_app) { VCAP::CloudController::AppModel.make(name: 'source-app-name', space: source_space) } + let(:source_space) { create(:space) } + let!(:target_app) { create(:app_model, name: 'target-app-name') } + let!(:source_app) { create(:app_model, name: 'source-app-name', space: source_space) } let(:lifecycle_type) { :buildpack } let!(:source_droplet) do - VCAP::CloudController::DropletModel.make(lifecycle_type, - app_guid: source_app.guid, - droplet_hash: 'abcdef', - sha256_checksum: 'droplet-sha256-checksum', - process_types: { web: 'bundle exec rails s' }, - buildpack_receipt_buildpack_guid: 'buildpack-guid', - buildpack_receipt_buildpack: 'buildpack', - state: VCAP::CloudController::DropletModel::STAGED_STATE, - execution_metadata: 'execution_metadata', - docker_receipt_image: 'docker/image', - docker_receipt_username: 'dockerusername', - docker_receipt_password: 'dockerpassword') + create(:droplet_model, lifecycle_type, + app_guid: source_app.guid, + droplet_hash: 'abcdef', + sha256_checksum: 'droplet-sha256-checksum', + process_types: { web: 'bundle exec rails s' }, + buildpack_receipt_buildpack_guid: 'buildpack-guid', + buildpack_receipt_buildpack: 'buildpack', + state: VCAP::CloudController::DropletModel::STAGED_STATE, + execution_metadata: 'execution_metadata', + docker_receipt_image: 'docker/image', + docker_receipt_username: 'dockerusername', + docker_receipt_password: 'dockerpassword') end let(:user_audit_info) { UserAuditInfo.new(user_email: 'user-email', user_guid: 'user_guid') } @@ -73,7 +73,7 @@ module VCAP::CloudController end context 'when source and destination lifecycle types do not match' do - let!(:target_app) { VCAP::CloudController::AppModel.make(:docker, name: 'target-app-name') } + let!(:target_app) { create(:app_model, :docker, name: 'target-app-name') } it 'raises' do expect do @@ -111,7 +111,7 @@ module VCAP::CloudController context 'when lifecycle is docker' do let(:lifecycle_type) { :docker } - let!(:target_app) { VCAP::CloudController::AppModel.make(:docker, name: 'target-app-name') } + let!(:target_app) { create(:app_model, :docker, name: 'target-app-name') } before do source_droplet.update(docker_receipt_image: 'urvashi/reddy') diff --git a/spec/unit/actions/droplet_create_spec.rb b/spec/unit/actions/droplet_create_spec.rb index 6c007f33d8c..bf06a7ae587 100644 --- a/spec/unit/actions/droplet_create_spec.rb +++ b/spec/unit/actions/droplet_create_spec.rb @@ -5,19 +5,18 @@ module VCAP::CloudController RSpec.describe DropletCreate do let(:user_audit_info) { UserAuditInfo.new(user_email: 'amelia@cats.com', user_guid: 'gooid') } subject(:droplet_create) { DropletCreate.new } - let!(:app) { AppModel.make } - let!(:buildpack_data) { BuildpackLifecycleDataModel.make(app:) } + let!(:app) { create(:app_model) } + let!(:buildpack_data) { create(:buildpack_lifecycle_data_model, app:) } - let(:docker_app) { AppModel.make(:docker) } - let(:package) { PackageModel.make app: } + let(:docker_app) { create(:app_model, :docker) } + let(:package) { create(:package_model, app:) } let(:build) do - BuildModel.make( - app: app, - package: package, - created_by_user_guid: 'schneider', - created_by_user_email: 'bob@loblaw.com', - created_by_user_name: 'bobert' - ) + create(:build_model, + app: app, + package: package, + created_by_user_guid: 'schneider', + created_by_user_email: 'bob@loblaw.com', + created_by_user_name: 'bobert') end describe '#create' do @@ -130,10 +129,9 @@ module VCAP::CloudController context 'when the build does not contain created_by fields' do let(:build) do - BuildModel.make( - app:, - package: - ) + create(:build_model, + app:, + package:) end it 'sets the actor to UNKNOWN' do @@ -224,12 +222,11 @@ module VCAP::CloudController end it 'returns the pre-existing droplet when one already exists for the build' do - existing = DropletModel.make( - app: app, - package: package, - build: build, - state: DropletModel::STAGING_STATE - ) + existing = create(:droplet_model, + app: app, + package: package, + build: build, + state: DropletModel::STAGING_STATE) build.buildpack_lifecycle_data.update(droplet: existing) expect do @@ -242,10 +239,9 @@ module VCAP::CloudController context 'when the build does not contain created_by fields' do let(:build) do - BuildModel.make( - app:, - package: - ) + create(:build_model, + app:, + package:) end it 'sets the actor to UNKNOWN' do @@ -271,14 +267,14 @@ module VCAP::CloudController end context 'cnb lifecycle' do - let(:app) { AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } let(:build) do - BuildModel.make(:cnb, - app: app, - package: package, - created_by_user_guid: 'schneider', - created_by_user_email: 'bob@loblaw.com', - created_by_user_name: 'bobert') + create(:build_model, :cnb, + app: app, + package: package, + created_by_user_guid: 'schneider', + created_by_user_email: 'bob@loblaw.com', + created_by_user_name: 'bobert') end it 'sets it on the droplet' do @@ -316,7 +312,7 @@ module VCAP::CloudController context 'when the build does not contain created_by fields' do let(:build) do - BuildModel.make(:cnb, app:, package:) + create(:build_model, :cnb, app:, package:) end it 'sets the actor to UNKNOWN' do diff --git a/spec/unit/actions/droplet_delete_spec.rb b/spec/unit/actions/droplet_delete_spec.rb index 480b78e566a..11e2d4e42c8 100644 --- a/spec/unit/actions/droplet_delete_spec.rb +++ b/spec/unit/actions/droplet_delete_spec.rb @@ -3,22 +3,21 @@ module VCAP::CloudController RSpec.describe DropletDelete do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_email: 'user@example.com', user_guid: user.guid) } subject(:droplet_delete) { DropletDelete.new(user_audit_info) } describe '#delete' do - let!(:droplet) { DropletModel.make } + let!(:droplet) { create(:droplet_model) } let!(:label) do - VCAP::CloudController::DropletLabelModel.make( - key_prefix: 'indiana.edu', - key_name: 'state', - value: 'Indiana', - resource_guid: droplet.guid - ) + create(:droplet_label_model, + key_prefix: 'indiana.edu', + key_name: 'state', + value: 'Indiana', + resource_guid: droplet.guid) end before do diff --git a/spec/unit/actions/droplet_update_spec.rb b/spec/unit/actions/droplet_update_spec.rb index f828173a24a..e21215f5208 100644 --- a/spec/unit/actions/droplet_update_spec.rb +++ b/spec/unit/actions/droplet_update_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe DropletUpdate do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_email: 'user@example.com', user_guid: user.guid) } @@ -11,22 +11,20 @@ module VCAP::CloudController describe '#update' do context 'buildpack droplet update' do - let!(:droplet) { DropletModel.make(app: nil) } + let!(:droplet) { create(:droplet_model, app: nil) } let!(:label) do - VCAP::CloudController::DropletLabelModel.make( - key_prefix: 'indiana.edu', - key_name: 'state', - value: 'Indiana', - resource_guid: droplet.guid - ) + create(:droplet_label_model, + key_prefix: 'indiana.edu', + key_name: 'state', + value: 'Indiana', + resource_guid: droplet.guid) end let!(:annotation) do - VCAP::CloudController::DropletAnnotationModel.make( - key_name: 'University', - value: 'Toronto', - resource_guid: droplet.guid - ) + create(:droplet_annotation_model, + key_name: 'University', + value: 'Toronto', + resource_guid: droplet.guid) end let(:message) do @@ -57,7 +55,7 @@ module VCAP::CloudController context 'image updates' do context 'when the droplet is not STAGED' do - let!(:droplet) { DropletModel.make(:docker, state: VCAP::CloudController::DropletModel::STAGING_STATE, app: nil) } + let!(:droplet) { create(:droplet_model, :docker, state: VCAP::CloudController::DropletModel::STAGING_STATE, app: nil) } let(:message) do VCAP::CloudController::DropletUpdateMessage.new({ @@ -74,7 +72,7 @@ module VCAP::CloudController end context 'when the droplet type is buildpack' do - let!(:droplet) { DropletModel.make(app: nil) } + let!(:droplet) { create(:droplet_model, app: nil) } let(:message) do VCAP::CloudController::DropletUpdateMessage.new({ @@ -101,7 +99,7 @@ module VCAP::CloudController context 'when the droplet type is docker' do let!(:docker_droplet) do - VCAP::CloudController::DropletModel.make(:docker, app: nil) + create(:droplet_model, :docker, app: nil) end let(:message) do diff --git a/spec/unit/actions/droplet_upload_spec.rb b/spec/unit/actions/droplet_upload_spec.rb index ae932847980..583b5b8ecaa 100644 --- a/spec/unit/actions/droplet_upload_spec.rb +++ b/spec/unit/actions/droplet_upload_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController let(:user_audit_info) { UserAuditInfo.new(user_email: 'user-email', user_guid: 'user_guid') } describe '#upload_async' do - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } let(:message) { DropletUploadMessage.new({ 'bits_path' => '/tmp/path' }) } let(:config) { Config.new({ name: 'local', index: '1' }) } let(:user_guid) { 'gooid' } diff --git a/spec/unit/actions/feature_flag_update_spec.rb b/spec/unit/actions/feature_flag_update_spec.rb index e5987928777..e8ef44df8b5 100644 --- a/spec/unit/actions/feature_flag_update_spec.rb +++ b/spec/unit/actions/feature_flag_update_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController RSpec.describe FeatureFlagUpdate do describe 'update' do context 'when enabled is changed' do - let(:feature_flag1) { FeatureFlag.make(enabled: true) } + let(:feature_flag1) { create(:feature_flag, enabled: true) } it 'updates the feature flag enabled field' do message = FeatureFlagsUpdateMessage.new( @@ -19,7 +19,7 @@ module VCAP::CloudController end context 'when error message is changed' do - let(:feature_flag1) { FeatureFlag.make(enabled: true, error_message: 'Old error message') } + let(:feature_flag1) { create(:feature_flag, enabled: true, error_message: 'Old error message') } it 'updates the feature flag error message field' do message = FeatureFlagsUpdateMessage.new( diff --git a/spec/unit/actions/internal_package_update_spec.rb b/spec/unit/actions/internal_package_update_spec.rb index 41e145b26f2..a8070f5ea77 100644 --- a/spec/unit/actions/internal_package_update_spec.rb +++ b/spec/unit/actions/internal_package_update_spec.rb @@ -22,7 +22,7 @@ module VCAP::CloudController 'error' => 'nothing bad' } end - let(:package) { PackageModel.make(state: PackageModel::PENDING_STATE) } + let(:package) { create(:package_model, state: PackageModel::PENDING_STATE) } let(:message) { InternalPackageUpdateMessage.new(body) } it 'updates the package' do @@ -36,7 +36,7 @@ module VCAP::CloudController end context 'when the package is already in READY_STATE' do - let(:package) { PackageModel.make(state: PackageModel::READY_STATE) } + let(:package) { create(:package_model, state: PackageModel::READY_STATE) } it 'raises InvalidPackage' do expect do @@ -46,7 +46,7 @@ module VCAP::CloudController end context 'when the package is already in FAILED_STATE' do - let(:package) { PackageModel.make(state: PackageModel::FAILED_STATE) } + let(:package) { create(:package_model, state: PackageModel::FAILED_STATE) } it 'raises InvalidPackage' do expect do @@ -60,11 +60,10 @@ module VCAP::CloudController context 'and the current state is COPYING' do let(:package) do - PackageModel.make( - state: PackageModel::COPYING_STATE, - package_hash: 'existing-sha1', - sha256_checksum: 'existing-sha256' - ) + create(:package_model, + state: PackageModel::COPYING_STATE, + package_hash: 'existing-sha1', + sha256_checksum: 'existing-sha256') end it 'does not require checksums in the message' do @@ -80,7 +79,7 @@ module VCAP::CloudController context 'and the current state is not COPYING' do [PackageModel::PENDING_STATE, PackageModel::CREATED_STATE, PackageModel::EXPIRED_STATE].each do |package_state| it 'requires checksums in the message' do - package = PackageModel.make(state: package_state) + package = create(:package_model, state: package_state) expect do package_update.update(package, message) end.to raise_error(InternalPackageUpdate::InvalidPackage, 'Checksums required when setting state to READY') diff --git a/spec/unit/actions/isolation_segment_assign_spec.rb b/spec/unit/actions/isolation_segment_assign_spec.rb index 74ffdda00c2..7aa601d1f64 100644 --- a/spec/unit/actions/isolation_segment_assign_spec.rb +++ b/spec/unit/actions/isolation_segment_assign_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe IsolationSegmentAssign do - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:org) { Organization.make } - let(:org2) { Organization.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:org) { create(:organization) } + let(:org2) { create(:organization) } describe 'sorting the organizations passed in for assignment' do it 'sorts them correctly when org2 has a lower index than org' do @@ -45,7 +45,7 @@ module VCAP::CloudController end context 'and other isolation segments are already assigned to the org' do - let(:isolation_segment_model2) { IsolationSegmentModel.make } + let(:isolation_segment_model2) { create(:isolation_segment_model) } before do subject.assign(isolation_segment_model, [org]) diff --git a/spec/unit/actions/isolation_segment_delete_spec.rb b/spec/unit/actions/isolation_segment_delete_spec.rb index 66a1602a28c..b4782efa267 100644 --- a/spec/unit/actions/isolation_segment_delete_spec.rb +++ b/spec/unit/actions/isolation_segment_delete_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe IsolationSegmentDelete do - let(:isolation_segment_model) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:shared_isolation_segment_model) { IsolationSegmentModel.first(guid: VCAP::CloudController::IsolationSegmentModel::SHARED_ISOLATION_SEGMENT_GUID) } let(:assigner) { IsolationSegmentAssign.new } @@ -22,7 +22,7 @@ module VCAP::CloudController end context 'when the segment is assigned as an orgs default' do - let(:org) { Organization.make } + let(:org) { create(:organization) } before do assigner.assign(isolation_segment_model, [org]) @@ -38,8 +38,8 @@ module VCAP::CloudController end context 'when the segment is assigned as a spaces default' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } before do assigner.assign(isolation_segment_model, [org]) diff --git a/spec/unit/actions/isolation_segment_unassign_spec.rb b/spec/unit/actions/isolation_segment_unassign_spec.rb index 8850f712716..81eb5bffa90 100644 --- a/spec/unit/actions/isolation_segment_unassign_spec.rb +++ b/spec/unit/actions/isolation_segment_unassign_spec.rb @@ -5,10 +5,10 @@ module VCAP::CloudController RSpec.describe IsolationSegmentUnassign do let(:assigner) { IsolationSegmentAssign.new } - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:isolation_segment_model_2) { IsolationSegmentModel.make } - let(:org) { Organization.make } - let(:org2) { Organization.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model_2) { create(:isolation_segment_model) } + let(:org) { create(:organization) } + let(:org2) { create(:organization) } context 'when an Isolation Segment is not assigned to any Orgs' do it 'is idempotent' do @@ -43,7 +43,7 @@ module VCAP::CloudController end context 'and the Organization has a space assigned' do - let!(:space) { Space.make(organization: org) } + let!(:space) { create(:space, organization: org) } it 'allows the isolation segment to remove the organization' do subject.unassign(isolation_segment_model, org) @@ -52,7 +52,7 @@ module VCAP::CloudController context 'and the space has an app' do before do - AppModel.make(space:) + create(:app_model, space:) end it 'removes the Organization from the Isolation Segment' do diff --git a/spec/unit/actions/isolation_segment_update_spec.rb b/spec/unit/actions/isolation_segment_update_spec.rb index 1a08e29649e..39e40648ace 100644 --- a/spec/unit/actions/isolation_segment_update_spec.rb +++ b/spec/unit/actions/isolation_segment_update_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe IsolationSegmentUpdate do - let!(:isolation_segment) { IsolationSegmentModel.make name: 'Old Name' } + let!(:isolation_segment) { create(:isolation_segment_model, name: 'Old Name') } it 'updates the name of the isolation segment' do new_name = 'New Name' @@ -27,8 +27,8 @@ module VCAP::CloudController end context 'when there is metadata' do - let!(:label) { IsolationSegmentLabelModel.make(resource_guid: isolation_segment.guid, key_name: 'freaky', value: 'tuesday') } - let!(:annotation) { IsolationSegmentAnnotationModel.make(resource_guid: isolation_segment.guid, key_name: 'hello', value: 'general kenobi') } + let!(:label) { create(:isolation_segment_label_model, resource_guid: isolation_segment.guid, key_name: 'freaky', value: 'tuesday') } + let!(:annotation) { create(:isolation_segment_annotation_model, resource_guid: isolation_segment.guid, key_name: 'hello', value: 'general kenobi') } it 'updates the metadata' do message = VCAP::CloudController::IsolationSegmentUpdateMessage.new({ @@ -98,7 +98,7 @@ module VCAP::CloudController context 'when the isolation segment is set as the org default' do let(:assigner) { IsolationSegmentAssign.new } - let(:org) { Organization.make } + let(:org) { create(:organization) } before do assigner.assign(isolation_segment, [org]) @@ -118,7 +118,7 @@ module VCAP::CloudController context 'when the isolation segment is assigned to an org' do let(:assigner) { IsolationSegmentAssign.new } - let(:org) { Organization.make } + let(:org) { create(:organization) } before do assigner.assign(isolation_segment, [org]) @@ -132,7 +132,7 @@ module VCAP::CloudController end context 'and the segment is assigned to a space in the org' do - let!(:space) { Space.make(organization: org, isolation_segment_guid: isolation_segment.guid) } + let!(:space) { create(:space, organization: org, isolation_segment_guid: isolation_segment.guid) } it 'does not allow updating the iso seg name' do message = IsolationSegmentUpdateMessage.new(name: 'New Name') diff --git a/spec/unit/actions/label_delete_spec.rb b/spec/unit/actions/label_delete_spec.rb index 6ebc7d0903c..510f4079e4a 100644 --- a/spec/unit/actions/label_delete_spec.rb +++ b/spec/unit/actions/label_delete_spec.rb @@ -6,9 +6,9 @@ module VCAP::CloudController subject(:label_delete) { LabelDelete } describe '#delete' do - let!(:app) { AppModel.make } - let!(:label) { AppLabelModel.make(resource_guid: app.guid, key_name: 'test1', value: 'bommel') } - let!(:label2) { AppLabelModel.make(resource_guid: app.guid, key_name: 'test2', value: 'bommel') } + let!(:app) { create(:app_model) } + let!(:label) { create(:app_label_model, resource_guid: app.guid, key_name: 'test1', value: 'bommel') } + let!(:label2) { create(:app_label_model, resource_guid: app.guid, key_name: 'test2', value: 'bommel') } it 'deletes and cancels the label' do label_delete.delete([label, label2]) diff --git a/spec/unit/actions/labels_update_spec.rb b/spec/unit/actions/labels_update_spec.rb index 8b01ab17257..8fb930d62ff 100644 --- a/spec/unit/actions/labels_update_spec.rb +++ b/spec/unit/actions/labels_update_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController end end - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:labels) do { release: 'stable', @@ -49,8 +49,8 @@ module VCAP::CloudController context 'app already has max labels' do context 'labels added exceeds max labels' do let!(:app_with_labels) do - AppLabelModel.make(resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') - AppLabelModel.make(resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') end let(:labels) do @@ -73,10 +73,10 @@ module VCAP::CloudController context 'labels exceed max labels' do let!(:app_with_labels) do - AppLabelModel.make(resource_guid: app.guid, key_name: 'release', value: 'unstable') - AppLabelModel.make(resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') - AppLabelModel.make(resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') - AppLabelModel.make(resource_guid: app.guid, key_name: 'release3', value: 'help') + create(:app_label_model, resource_guid: app.guid, key_name: 'release', value: 'unstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release1', value: 'veryunstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release2', value: 'stillunstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release3', value: 'help') end context 'deleting old label' do @@ -130,10 +130,10 @@ module VCAP::CloudController end let!(:old_label) do - AppLabelModel.make(resource_guid: app.guid, key_name: 'release', value: 'unstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release', value: 'unstable') end let!(:old_label_with_prefix) do - AppLabelModel.make(resource_guid: app.guid, key_prefix: 'joyofcooking.com', key_name: 'potato', value: 'fried') + create(:app_label_model, resource_guid: app.guid, key_prefix: 'joyofcooking.com', key_name: 'potato', value: 'fried') end it 'updates the old label' do @@ -154,13 +154,13 @@ module VCAP::CloudController end let!(:delete_me_label) do - AppLabelModel.make(resource_guid: app.guid, key_name: 'release', value: 'unstable') + create(:app_label_model, resource_guid: app.guid, key_name: 'release', value: 'unstable') end let!(:prefixed_delete_me_label) do - AppLabelModel.make(resource_guid: app.guid, key_prefix: 'pre.fix', key_name: 'release', value: 'unstable') + create(:app_label_model, resource_guid: app.guid, key_prefix: 'pre.fix', key_name: 'release', value: 'unstable') end let!(:keep_me_label) do - AppLabelModel.make(resource_guid: app.guid, key_name: 'potato', value: 'mashed') + create(:app_label_model, resource_guid: app.guid, key_name: 'potato', value: 'mashed') end it 'deletes labels that are nil' do @@ -184,7 +184,7 @@ module VCAP::CloudController describe 'organization labels' do subject(:result) { LabelsUpdate.update(org, labels, OrganizationLabelModel) } - let(:org) { Organization.make } + let(:org) { create(:organization) } let(:labels) do { release: 'stable', @@ -217,10 +217,10 @@ module VCAP::CloudController end let!(:old_label) do - OrganizationLabelModel.make(resource_guid: org.guid, key_name: 'release', value: 'unstable') + create(:organization_label_model, resource_guid: org.guid, key_name: 'release', value: 'unstable') end let!(:old_label_with_prefix) do - OrganizationLabelModel.make(resource_guid: org.guid, key_prefix: 'joyofcooking.com', key_name: 'potato', value: 'fried') + create(:organization_label_model, resource_guid: org.guid, key_prefix: 'joyofcooking.com', key_name: 'potato', value: 'fried') end it 'updates the old label' do @@ -240,10 +240,10 @@ module VCAP::CloudController end let!(:delete_me_label) do - OrganizationLabelModel.make(resource_guid: org.guid, key_name: 'release', value: 'unstable') + create(:organization_label_model, resource_guid: org.guid, key_name: 'release', value: 'unstable') end let!(:keep_me_label) do - OrganizationLabelModel.make(resource_guid: org.guid, key_name: 'potato', value: 'mashed') + create(:organization_label_model, resource_guid: org.guid, key_name: 'potato', value: 'mashed') end it 'deletes labels that are nil' do diff --git a/spec/unit/actions/manifest_route_update_spec.rb b/spec/unit/actions/manifest_route_update_spec.rb index cb08b5b78ab..040c6177655 100644 --- a/spec/unit/actions/manifest_route_update_spec.rb +++ b/spec/unit/actions/manifest_route_update_spec.rb @@ -14,21 +14,21 @@ module VCAP::CloudController let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } describe '#update' do - let!(:app) { AppModel.make } - let!(:process) { ProcessModel.make(app:) } - let!(:another_process) { ProcessModel.make(app:) } + let!(:app) { create(:app_model) } + let!(:process) { create(:process_model, app:) } + let!(:another_process) { create(:process_model, app:) } before do TestConfig.override(kubernetes: {}) end context 'when the route already exists' do - let(:domain) { VCAP::CloudController::SharedDomain.make(name: 'tomato.avocado-toast.com') } - let!(:route) { Route.make(host: 'potato', domain: domain, path: '/some-path', space: app.space) } + let(:domain) { create(:shared_domain, name: 'tomato.avocado-toast.com') } + let!(:route) { create(:route, host: 'potato', domain: domain, path: '/some-path', space: app.space) } context 'when the route is already mapped to the app' do let!(:route_mapping) do - RouteMappingModel.make(app: app, route: route, app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT) + create(:route_mapping_model, app: app, route: route, app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT) end it 'does not attempt to re-map the route to the app' do @@ -39,7 +39,7 @@ module VCAP::CloudController context 'and a protocol is NOT provided' do let!(:route_mapping) do - RouteMappingModel.make(app: app, route: route, protocol: 'http2', app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT) + create(:route_mapping_model, app: app, route: route, protocol: 'http2', app_port: VCAP::CloudController::ProcessModel::DEFAULT_HTTP_PORT) end it 'does NOT change the route mapping protocol back to the default (manifests are NOT declarative)' do @@ -66,8 +66,8 @@ module VCAP::CloudController end before do - route2 = Route.make(host: 'potatotwo', domain: domain, path: '/some-path', space: app.space) - RouteMappingModel.make(app: app, route: route2) + route2 = create(:route, host: 'potatotwo', domain: domain, path: '/some-path', space: app.space) + create(:route_mapping_model, app: app, route: route2) end it 'updates (or recreates) the route mapping with the new protocol' do @@ -119,7 +119,7 @@ module VCAP::CloudController end context 'when the route and app are in different spaces' do - let!(:outside_app) { AppModel.make } + let!(:outside_app) { create(:app_model) } it 'raises a route invalid error' do expect do @@ -131,7 +131,7 @@ module VCAP::CloudController context 'when the route is shared' do let!(:route_share) { RouteShare.new } - let!(:outside_app) { AppModel.make } + let!(:outside_app) { create(:app_model) } let!(:shared_route) { route_share.create(route, [outside_app.space], user_audit_info) } it 'succeeds after route share' do @@ -146,7 +146,7 @@ module VCAP::CloudController context 'when the route does not already exist' do context 'when the domain exists' do before do - VCAP::CloudController::SharedDomain.make(name: 'tomato.avocado-toast.com') + create(:shared_domain, name: 'tomato.avocado-toast.com') end it 'creates and maps the route to the app' do @@ -197,7 +197,7 @@ module VCAP::CloudController end before do - VCAP::CloudController::PrivateDomain.make(owning_organization: app.space.organization, name: 'private.avocado-toast.com') + create(:private_domain, owning_organization: app.space.organization, name: 'private.avocado-toast.com') end it 'creates and maps the route to the app' do @@ -224,7 +224,7 @@ module VCAP::CloudController end before do - VCAP::CloudController::PrivateDomain.make(owning_organization: app.space.organization, name: 'private.avocado-toast.com') + create(:private_domain, owning_organization: app.space.organization, name: 'private.avocado-toast.com') end it 'creates and maps the route to the app' do @@ -260,7 +260,7 @@ module VCAP::CloudController context 'when the route is a tcp route' do let(:ra_client) { instance_double(VCAP::CloudController::RoutingApi::Client, router_group: rg) } let(:rg) { instance_double(VCAP::CloudController::RoutingApi::RouterGroup, type: 'tcp', reservable_ports: [1234, 1235]) } - let!(:tcp_domain) { SharedDomain.make(name: 'tcp.tomato.avocado-toast.com', router_group_guid: '123') } + let!(:tcp_domain) { create(:shared_domain, name: 'tcp.tomato.avocado-toast.com', router_group_guid: '123') } let(:message) do ManifestRoutesUpdateMessage.new( routes: [ @@ -288,9 +288,9 @@ module VCAP::CloudController end context 'but there is another tcp route with a different port' do - let!(:other_route) { Route.make(domain: tcp_domain, host: '', space: app.space, port: 1235) } + let!(:other_route) { create(:route, domain: tcp_domain, host: '', space: app.space, port: 1235) } let!(:other_route_mapping) do - RouteMappingModel.make(app: app, route: other_route) + create(:route_mapping_model, app: app, route: other_route) end it 'creates and maps the route to the app' do @@ -329,7 +329,7 @@ module VCAP::CloudController context 'when route creation feature is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'route_creation', enabled: false, error_message: 'nope') + create(:feature_flag, name: 'route_creation', enabled: false, error_message: 'nope') end it 'raises an unauthorized error' do @@ -351,7 +351,7 @@ module VCAP::CloudController context 'when the organization of the app does not have access to the domain' do before do - VCAP::CloudController::PrivateDomain.make(name: 'tomato.avocado-toast.com') + create(:private_domain, name: 'tomato.avocado-toast.com') end it 'raises an error' do @@ -363,8 +363,8 @@ module VCAP::CloudController end context 'when multiple domains exist' do - let!(:specific_domain) { VCAP::CloudController::SharedDomain.make(name: 'tomato.avocado-toast.com') } - let!(:broader_domain) { VCAP::CloudController::SharedDomain.make(name: 'avocado-toast.com') } + let!(:specific_domain) { create(:shared_domain, name: 'tomato.avocado-toast.com') } + let!(:broader_domain) { create(:shared_domain, name: 'avocado-toast.com') } it 'creates the route in the most specific domain' do ManifestRouteUpdate.update(app.guid, message, user_audit_info) @@ -377,7 +377,7 @@ module VCAP::CloudController context 'when there is no host provided' do before do - VCAP::CloudController::SharedDomain.make(name: 'potato.tomato.avocado-toast.com') + create(:shared_domain, name: 'potato.tomato.avocado-toast.com') end it('raises an error indicating that a host must be provided') do @@ -388,7 +388,7 @@ module VCAP::CloudController end context 'when the host is invalid' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(name: 'avocado-toast.com') } + let!(:domain) { create(:shared_domain, name: 'avocado-toast.com') } let(:message) do ManifestRoutesUpdateMessage.new( routes: [ @@ -405,10 +405,10 @@ module VCAP::CloudController end context 'when route options are provided' do - let!(:domain) { VCAP::CloudController::SharedDomain.make(name: 'tomato.avocado-toast.com') } + let!(:domain) { create(:shared_domain, name: 'tomato.avocado-toast.com') } before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end context 'when creating a new route with loadbalancing options' do @@ -510,7 +510,7 @@ module VCAP::CloudController end context 'when updating an existing route with new loadbalancing options' do - let!(:route) { Route.make(host: 'potato', domain: domain, path: '/some-path', space: app.space) } + let!(:route) { create(:route, host: 'potato', domain: domain, path: '/some-path', space: app.space) } let(:message) do ManifestRoutesUpdateMessage.new( routes: [ @@ -534,13 +534,12 @@ module VCAP::CloudController context 'when updating an existing route from round-robin to hash' do let!(:route) do - Route.make( - host: 'potato', - domain: domain, - path: '/some-path', - space: app.space, - options: { loadbalancing: 'round-robin' } - ) + create(:route, + host: 'potato', + domain: domain, + path: '/some-path', + space: app.space, + options: { loadbalancing: 'round-robin' }) end let(:message) do @@ -567,17 +566,16 @@ module VCAP::CloudController context 'when updating an existing hash route with new hash_header' do let!(:route) do - Route.make( - host: 'potato', - domain: domain, - path: '/some-path', - space: app.space, - options: { - loadbalancing: 'hash', - hash_header: 'X-Old-Header', - hash_balance: '2.0' - } - ) + create(:route, + host: 'potato', + domain: domain, + path: '/some-path', + space: app.space, + options: { + loadbalancing: 'hash', + hash_header: 'X-Old-Header', + hash_balance: '2.0' + }) end let(:message) do @@ -601,17 +599,16 @@ module VCAP::CloudController context 'when updating an existing hash route with new hash_balance' do let!(:route) do - Route.make( - host: 'potato', - domain: domain, - path: '/some-path', - space: app.space, - options: { - loadbalancing: 'hash', - hash_header: 'X-User-ID', - hash_balance: '2.0' - } - ) + create(:route, + host: 'potato', + domain: domain, + path: '/some-path', + space: app.space, + options: { + loadbalancing: 'hash', + hash_header: 'X-User-ID', + hash_balance: '2.0' + }) end let(:message) do @@ -635,17 +632,16 @@ module VCAP::CloudController context 'when updating an existing hash route to remove loadbalancing' do let!(:route) do - Route.make( - host: 'potato', - domain: domain, - path: '/some-path', - space: app.space, - options: { - loadbalancing: 'hash', - hash_header: 'X-User-ID', - hash_balance: '2.0' - } - ) + create(:route, + host: 'potato', + domain: domain, + path: '/some-path', + space: app.space, + options: { + loadbalancing: 'hash', + hash_header: 'X-User-ID', + hash_balance: '2.0' + }) end let(:message) do diff --git a/spec/unit/actions/organization_create_spec.rb b/spec/unit/actions/organization_create_spec.rb index 77e810e1d0e..702ee9c73b8 100644 --- a/spec/unit/actions/organization_create_spec.rb +++ b/spec/unit/actions/organization_create_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe OrganizationCreate do describe 'create' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } diff --git a/spec/unit/actions/organization_delete_spec.rb b/spec/unit/actions/organization_delete_spec.rb index c3f61a92e3b..3d6329a71e8 100644 --- a/spec/unit/actions/organization_delete_spec.rb +++ b/spec/unit/actions/organization_delete_spec.rb @@ -11,46 +11,44 @@ module VCAP::CloudController subject(:org_delete) { OrganizationDelete.new(space_delete, user_audit_info) } describe '#delete' do - let!(:org_1) { Organization.make } - let!(:org_2) { Organization.make } - let!(:org_3) { Organization.make } - let!(:space) { Space.make(organization: org_1) } - let!(:space_2) { Space.make(organization: org_1) } - let!(:space_3) { Space.make(organization: org_3) } - let!(:app) { AppModel.make(space_guid: space.guid) } - let!(:app_2) { AppModel.make(space_guid: space_3.guid) } - let!(:service_instance) { ManagedServiceInstance.make(space:) } - let!(:service_instance_2) { ManagedServiceInstance.make(space: space_2) } - let!(:private_domain_1) { PrivateDomain.make(owning_organization: org_1) } - let!(:private_domain_2) { PrivateDomain.make(owning_organization: org_2) } - let!(:service_broker) { ServiceBroker.make } - let!(:service) { Service.make(service_broker:) } - let!(:service_plan) { ServicePlan.make(service: service, public: false) } + let!(:org_1) { create(:organization) } + let!(:org_2) { create(:organization) } + let!(:org_3) { create(:organization) } + let!(:space) { create(:space, organization: org_1) } + let!(:space_2) { create(:space, organization: org_1) } + let!(:space_3) { create(:space, organization: org_3) } + let!(:app) { create(:app_model, space_guid: space.guid) } + let!(:app_2) { create(:app_model, space_guid: space_3.guid) } + let!(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_instance_2) { create(:managed_service_instance, space: space_2) } + let!(:private_domain_1) { create(:private_domain, owning_organization: org_1) } + let!(:private_domain_2) { create(:private_domain, owning_organization: org_2) } + let!(:service_broker) { create(:service_broker) } + let!(:service) { create(:service, service_broker:) } + let!(:service_plan) { create(:service_plan, service: service, public: false) } let!(:service_plan_visibility) do - ServicePlanVisibility.make(organization_guid: org_1.guid, service_plan_guid: service_plan.guid) + create(:service_plan_visibility, organization_guid: org_1.guid, service_plan_guid: service_plan.guid) end - let!(:space_quota_definition) { SpaceQuotaDefinition.make(organization: org_1) } - let!(:isolation_segment) { IsolationSegmentModel.make(organization_guids: [org_1.guid]) } - let!(:user_1) { User.make } + let!(:space_quota_definition) { create(:space_quota_definition, organization: org_1) } + let!(:isolation_segment) { create(:isolation_segment_model, organization_guids: [org_1.guid]) } + let!(:user_1) { create(:user) } let!(:org1_label) do - OrganizationLabelModel.make( - key_prefix: 'indiana.edu', - key_name: 'state', - value: 'Indiana', - resource_guid: org_1.guid - ) + create(:organization_label_model, + key_prefix: 'indiana.edu', + key_name: 'state', + value: 'Indiana', + resource_guid: org_1.guid) end let!(:org1_annotation) do - OrganizationAnnotationModel.make( - key_name: 'city', - value: 'Monticello', - resource_guid: org_1.guid - ) + create(:organization_annotation_model, + key_name: 'city', + value: 'Monticello', + resource_guid: org_1.guid) end let!(:org_dataset) { Organization.where(guid: [org_1.guid, org_2.guid]) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } before do @@ -208,7 +206,7 @@ module VCAP::CloudController end context 'when owned private domains are shared with other orgs' do - let!(:shared_with_org) { Organization.make } + let!(:shared_with_org) { create(:organization) } before do private_domain_1.add_shared_organization(shared_with_org) diff --git a/spec/unit/actions/organization_quota_apply_spec.rb b/spec/unit/actions/organization_quota_apply_spec.rb index f3f81c9e5c0..33447da3c6b 100644 --- a/spec/unit/actions/organization_quota_apply_spec.rb +++ b/spec/unit/actions/organization_quota_apply_spec.rb @@ -5,15 +5,15 @@ module VCAP::CloudController RSpec.describe OrganizationQuotaApply do describe '#apply' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } subject { OrganizationQuotaApply.new(user_audit_info) } - let(:org) { VCAP::CloudController::Organization.make } - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make } + let(:org) { create(:organization) } + let(:org_quota) { create(:quota_definition) } let(:message) do VCAP::CloudController::OrganizationQuotaApplyMessage.new({ data: [{ guid: org.guid }] @@ -85,7 +85,7 @@ module VCAP::CloudController end context 'when applying quota to multiple orgs' do - let(:org2) { VCAP::CloudController::Organization.make } + let(:org2) { create(:organization) } let(:message) do VCAP::CloudController::OrganizationQuotaApplyMessage.new({ data: [{ guid: org.guid }, { guid: org2.guid }] @@ -124,10 +124,10 @@ module VCAP::CloudController end context 'when trying to set a log rate limit and there are apps with unlimited log rates' do - let(:space) { VCAP::CloudController::Space.make(guid: 'space-guid', organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } - let(:org_quota) { VCAP::CloudController::QuotaDefinition.make(log_rate_limit: 2000) } + let(:space) { create(:space, guid: 'space-guid', organization: org) } + let(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process_model, app: app_model, log_rate_limit: -1) } + let(:org_quota) { create(:quota_definition, log_rate_limit: 2000) } it 'raises an error' do expect do diff --git a/spec/unit/actions/organization_quota_delete_spec.rb b/spec/unit/actions/organization_quota_delete_spec.rb index 8eee8968396..133acb7f026 100644 --- a/spec/unit/actions/organization_quota_delete_spec.rb +++ b/spec/unit/actions/organization_quota_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe OrganizationQuotaDeleteAction do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } @@ -11,7 +11,7 @@ module VCAP::CloudController subject(:org_quota_delete) { OrganizationQuotaDeleteAction.new(user_audit_info) } describe '#delete' do - let!(:quota) { QuotaDefinition.make } + let!(:quota) { create(:quota_definition) } it 'deletes the organization quota' do expect do diff --git a/spec/unit/actions/organization_quotas_create_spec.rb b/spec/unit/actions/organization_quotas_create_spec.rb index eab1fae1cdc..ce26b8d3849 100644 --- a/spec/unit/actions/organization_quotas_create_spec.rb +++ b/spec/unit/actions/organization_quotas_create_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe OrganizationQuotasCreate do describe 'create' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } @@ -13,7 +13,7 @@ module VCAP::CloudController subject(:org_quotas_create) { OrganizationQuotasCreate.new(user_audit_info) } context 'when creating a organization quota' do - let(:org) { VCAP::CloudController::Organization.make } + let(:org) { create(:organization) } let(:message) do VCAP::CloudController::OrganizationQuotasCreateMessage.new({ diff --git a/spec/unit/actions/organization_quotas_update_spec.rb b/spec/unit/actions/organization_quotas_update_spec.rb index 8f54426ac25..a8b8a10f66d 100644 --- a/spec/unit/actions/organization_quotas_update_spec.rb +++ b/spec/unit/actions/organization_quotas_update_spec.rb @@ -5,13 +5,13 @@ module VCAP::CloudController RSpec.describe OrganizationQuotasUpdate do describe 'update' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } context 'when updating an organization quota' do - let!(:org_quota) { VCAP::CloudController::QuotaDefinition.make(name: 'org_quota_name', non_basic_services_allowed: true) } + let!(:org_quota) { create(:quota_definition, name: 'org_quota_name', non_basic_services_allowed: true) } let(:message) do VCAP::CloudController::OrganizationQuotasUpdateMessage.new({ @@ -110,7 +110,7 @@ module VCAP::CloudController end context 'when it is a uniqueness error' do - let(:victoria_org_quota) { VCAP::CloudController::QuotaDefinition.make(name: 'victoria_org_quota') } + let(:victoria_org_quota) { create(:quota_definition, name: 'victoria_org_quota') } let(:name) { 'victoria_org_quota' } let(:update_message) { VCAP::CloudController::OrganizationQuotasUpdateMessage.new(name:) } @@ -134,10 +134,10 @@ module VCAP::CloudController context 'when there are affected processes that have an unlimited log rate limit' do def create_orgs_with_unlimited_log_rate_process(count) count.downto(1) do |i| - org = VCAP::CloudController::Organization.make(guid: "org-guid-#{i}", name: "org-name-#{i}", quota_definition: org_quota) - space = VCAP::CloudController::Space.make(guid: "space-guid-#{i}", organization: org) - app_model = VCAP::CloudController::AppModel.make(name: "app-#{i}", space: space) - VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) + org = create(:organization, guid: "org-guid-#{i}", name: "org-name-#{i}", quota_definition: org_quota) + space = create(:space, guid: "space-guid-#{i}", organization: org) + app_model = create(:app_model, name: "app-#{i}", space: space) + create(:process_model, app: app_model, log_rate_limit: -1) end end @@ -181,11 +181,11 @@ def create_orgs_with_unlimited_log_rate_process(count) end context 'and there is more than one affected process within an org' do - let(:org) { VCAP::CloudController::Organization.make(guid: 'org-guid', name: 'org-name', quota_definition: org_quota) } - let(:space) { VCAP::CloudController::Space.make(guid: 'space-guid', organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'app', space: space) } - let!(:process_1) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } - let!(:process_2) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let(:org) { create(:organization, guid: 'org-guid', name: 'org-name', quota_definition: org_quota) } + let(:space) { create(:space, guid: 'space-guid', organization: org) } + let(:app_model) { create(:app_model, name: 'app', space: space) } + let!(:process_1) { create(:process_model, app: app_model, log_rate_limit: -1) } + let!(:process_2) { create(:process_model, app: app_model, log_rate_limit: -1) } it 'only names the org once in the error message' do expect do diff --git a/spec/unit/actions/organization_update_spec.rb b/spec/unit/actions/organization_update_spec.rb index bb46f4213ab..9c5c5eba7d9 100644 --- a/spec/unit/actions/organization_update_spec.rb +++ b/spec/unit/actions/organization_update_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe OrganizationUpdate do describe 'update' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } subject(:org_update) { OrganizationUpdate.new(user_audit_info) } - let(:org) { VCAP::CloudController::Organization.make(name: 'old-org-name') } + let(:org) { create(:organization, name: 'old-org-name') } context 'when a name and label are requested' do let(:message) do @@ -73,7 +73,7 @@ module VCAP::CloudController context 'when the org name is not unique' do it 'errors usefully' do - VCAP::CloudController::Organization.make(name: 'new-org-name') + create(:organization, name: 'new-org-name') expect do org_update.update(org, message) @@ -116,7 +116,7 @@ module VCAP::CloudController context 'when the org name is not unique' do it 'errors usefully' do - VCAP::CloudController::Organization.make(name: 'new-org-name') + create(:organization, name: 'new-org-name') expect do org_update.update(org, message) diff --git a/spec/unit/actions/package_copy_spec.rb b/spec/unit/actions/package_copy_spec.rb index 80b6b2b0a2e..d57b1e900b8 100644 --- a/spec/unit/actions/package_copy_spec.rb +++ b/spec/unit/actions/package_copy_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController RSpec.describe PackageCopy do subject(:package_copy) { PackageCopy.new } - let(:target_app) { AppModel.make } - let!(:source_package) { PackageModel.make(type:) } + let(:target_app) { create(:app_model) } + let!(:source_package) { create(:package_model, type:) } let(:type) { 'docker' } describe '#copy' do @@ -28,7 +28,7 @@ module VCAP::CloudController end it 'copies over docker info' do - source_package = PackageModel.make(type: 'docker', docker_image: 'image-magick.com') + source_package = create(:package_model, type: 'docker', docker_image: 'image-magick.com') result = package_copy.copy(destination_app_guid: target_app.guid, source_package: source_package, user_audit_info: user_audit_info) created_package = PackageModel.find(guid: result.guid) @@ -97,7 +97,7 @@ module VCAP::CloudController end context 'when the source and destination apps are the same' do - let!(:source_package) { PackageModel.make(type: type, app_guid: target_app.guid) } + let!(:source_package) { create(:package_model, type: type, app_guid: target_app.guid) } it 'raises an InvalidPackage error' do expect do diff --git a/spec/unit/actions/package_create_spec.rb b/spec/unit/actions/package_create_spec.rb index 8b0816655ca..61e99fd20ad 100644 --- a/spec/unit/actions/package_create_spec.rb +++ b/spec/unit/actions/package_create_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe PackageCreate do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:type) { 'docker' } let(:relationships) { { app: { data: { guid: app.guid } } } } let(:message) do diff --git a/spec/unit/actions/package_delete_spec.rb b/spec/unit/actions/package_delete_spec.rb index 7964ed6689e..82aaaee17e7 100644 --- a/spec/unit/actions/package_delete_spec.rb +++ b/spec/unit/actions/package_delete_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController describe '#delete' do context 'when the package exists' do - let!(:package) { PackageModel.make } + let!(:package) { create(:package_model) } it 'deletes the package record' do expect do @@ -57,7 +57,7 @@ module VCAP::CloudController end it 'deletes associated labels' do - label = PackageLabelModel.make(resource_guid: package.guid, key_name: 'test', value: 'bommel') + label = create(:package_label_model, resource_guid: package.guid, key_name: 'test', value: 'bommel') expect do package_delete.delete([package]) end.to change(PackageLabelModel, :count).by(-1) @@ -66,7 +66,7 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation = PackageAnnotationModel.make(resource_guid: package.guid, key_name: 'test', value: 'bommel') + annotation = create(:package_annotation_model, resource_guid: package.guid, key_name: 'test', value: 'bommel') expect do package_delete.delete([package]) end.to change(PackageAnnotationModel, :count).by(-1) @@ -76,7 +76,7 @@ module VCAP::CloudController end context 'when passed a set of packages' do - let!(:packages) { [PackageModel.make, PackageModel.make] } + let!(:packages) { create_list(:package_model, 2) } it 'bulk deletes them' do expect do diff --git a/spec/unit/actions/package_update_spec.rb b/spec/unit/actions/package_update_spec.rb index 2e4957978a3..e0b23c9e094 100644 --- a/spec/unit/actions/package_update_spec.rb +++ b/spec/unit/actions/package_update_spec.rb @@ -18,7 +18,7 @@ module VCAP::CloudController } } end - let(:package) { PackageModel.make } + let(:package) { create(:package_model) } let(:message) { PackageUpdateMessage.new(body) } it 'updates the package metadata' do @@ -38,7 +38,7 @@ module VCAP::CloudController password: 'It is a secret' } end - let(:package) { PackageModel.make(type: 'docker', docker_image: 'image-magick.com') } + let(:package) { create(:package_model, type: 'docker', docker_image: 'image-magick.com') } let(:message) { PackageUpdateMessage.new(body) } it "updates the package's docker credentials" do @@ -57,7 +57,7 @@ module VCAP::CloudController username: 'Walz' } end - let(:package) { PackageModel.make(type: 'docker', docker_image: 'image-magick.com') } + let(:package) { create(:package_model, type: 'docker', docker_image: 'image-magick.com') } let(:message) { PackageUpdateMessage.new(body) } it "updates the package's docker username" do @@ -76,7 +76,7 @@ module VCAP::CloudController password: 'Absolutely secret' } end - let(:package) { PackageModel.make(type: 'docker', docker_image: 'image-magick.com') } + let(:package) { create(:package_model, type: 'docker', docker_image: 'image-magick.com') } let(:message) { PackageUpdateMessage.new(body) } it "updates the package's docker password" do diff --git a/spec/unit/actions/package_upload_spec.rb b/spec/unit/actions/package_upload_spec.rb index 4e925fe03fe..f9c47946c32 100644 --- a/spec/unit/actions/package_upload_spec.rb +++ b/spec/unit/actions/package_upload_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController end describe '#upload_async' do - let(:package) { PackageModel.make(type: 'bits') } + let(:package) { create(:package_model, type: 'bits') } let(:message) { PackageUploadMessage.new({ 'bits_path' => '/tmp/path' }) } let(:config) { Config.new({ name: 'local', index: '1' }) } let(:user_guid) { 'gooid' } @@ -61,7 +61,7 @@ module VCAP::CloudController end describe '#upload_async_without_event' do - let(:package) { PackageModel.make(type: 'bits') } + let(:package) { create(:package_model, type: 'bits') } let(:message) { PackageUploadMessage.new({ 'bits_path' => '/tmp/path' }) } let(:config) { Config.new({ name: 'local', index: '1' }) } @@ -88,7 +88,7 @@ module VCAP::CloudController end describe '#upload_sync_without_event' do - let(:package) { PackageModel.make(type: 'bits') } + let(:package) { create(:package_model, type: 'bits') } let(:message) { PackageUploadMessage.new({ 'bits_path' => '/tmp/path' }) } before do diff --git a/spec/unit/actions/process_create_from_app_droplet_spec.rb b/spec/unit/actions/process_create_from_app_droplet_spec.rb index 915b8d25ff7..646c39f043c 100644 --- a/spec/unit/actions/process_create_from_app_droplet_spec.rb +++ b/spec/unit/actions/process_create_from_app_droplet_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController RSpec.describe ProcessCreateFromAppDroplet do let(:droplet) { nil } - let(:app) { AppModel.make(droplet: droplet, name: 'my_app') } + let(:app) { create(:app_model, droplet: droplet, name: 'my_app') } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } subject { ProcessCreateFromAppDroplet.new(user_audit_info) } describe '#create' do let(:process_types) { { web: 'thing', other: 'stuff' } } - let(:droplet) { DropletModel.make(state: DropletModel::STAGED_STATE, process_types: process_types) } + let(:droplet) { create(:droplet_model, state: DropletModel::STAGED_STATE, process_types: process_types) } context 'when the app has a droplet that has a process type' do it 'creates missing processes without setting their commands' do @@ -25,7 +25,7 @@ module VCAP::CloudController end it 'does not delete existing processes' do - existing_process = ProcessModel.make(type: 'manifest-born-process', app: app) + existing_process = create(:process_model, type: 'manifest-born-process', app: app) subject.create(app) @@ -33,15 +33,15 @@ module VCAP::CloudController end it 'does not update the process’s command' do - existing_process = ProcessModel.make(type: 'other', command: 'old', app: app, metadata: {}) + existing_process = create(:process_model, type: 'other', command: 'old', app: app, metadata: {}) expect do subject.create(app) end.not_to(change { existing_process.refresh.command }) end context 'when the sidecar memory validation fails' do - let!(:sidecar) { SidecarModel.make(app: app, name: 'my_sidecar', command: 'athenz', memory: 2000) } - let!(:sidecar_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar, type: 'other') } + let!(:sidecar) { create(:sidecar_model, app: app, name: 'my_sidecar', command: 'athenz', memory: 2000) } + let!(:sidecar_process_type) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'other') } it 'translates the validation failure to a luxurious error' do expect do @@ -79,8 +79,8 @@ module VCAP::CloudController end context 'when the app has a droplet, but the droplet does not have a process type' do - let(:droplet) { DropletModel.make(state: DropletModel::STAGED_STATE, process_types: nil) } - let(:app) { AppModel.make(droplet:) } + let(:droplet) { create(:droplet_model, state: DropletModel::STAGED_STATE, process_types: nil) } + let(:app) { create(:app_model, droplet:) } it 'raises procfile not found' do expect do diff --git a/spec/unit/actions/process_create_spec.rb b/spec/unit/actions/process_create_spec.rb index 546cffe3b25..e2e69b1115b 100644 --- a/spec/unit/actions/process_create_spec.rb +++ b/spec/unit/actions/process_create_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe ProcessCreate do subject(:process_create) { ProcessCreate.new(user_audit_info) } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } describe '#create' do @@ -46,13 +46,12 @@ module VCAP::CloudController end it 'adds existing routes to the process' do - route = Route.make(space: app.space) - destination = RouteMappingModel.make( - route: route, - app: app, - process_type: 'web', - app_port: 3121 - ) + route = create(:route, space: app.space) + destination = create(:route_mapping_model, + route: route, + app: app, + process_type: 'web', + app_port: 3121) process = process_create.create(app, message) @@ -61,14 +60,13 @@ module VCAP::CloudController end it 'validates number of ports when adding existing routes to a new process' do - route = Route.make(space: app.space) + route = create(:route, space: app.space) 11.times do |i| - RouteMappingModel.make( - route: route, - app: app, - process_type: 'web', - app_port: 3120 + i - ) + create(:route_mapping_model, + route: route, + app: app, + process_type: 'web', + app_port: 3120 + i) end expect do @@ -77,8 +75,8 @@ module VCAP::CloudController end it 'validates sidecar memory usage' do - sidecar = SidecarModel.make(app: app, name: 'my_sidecar', command: 'athenz', memory: 2000) - SidecarProcessTypeModel.make(sidecar: sidecar, type: message[:type]) + sidecar = create(:sidecar_model, app: app, name: 'my_sidecar', command: 'athenz', memory: 2000) + create(:sidecar_process_type_model, sidecar: sidecar, type: message[:type]) expect do process_create.create(app, message) diff --git a/spec/unit/actions/process_delete_spec.rb b/spec/unit/actions/process_delete_spec.rb index 46bf53573fe..2e803e8764d 100644 --- a/spec/unit/actions/process_delete_spec.rb +++ b/spec/unit/actions/process_delete_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe ProcessDelete do subject(:process_delete) { ProcessDelete.new(user_audit_info) } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } describe '#delete' do context 'when the process exists' do - let!(:process) { ProcessModel.make(app: app, type: 'potato') } + let!(:process) { create(:process_model, app: app, type: 'potato') } it 'deletes the process record' do expect do @@ -28,7 +28,7 @@ module VCAP::CloudController end it 'deletes associated labels' do - label = ProcessLabelModel.make(resource_guid: process.guid, key_name: 'test1', value: 'bommel') + label = create(:process_label_model, resource_guid: process.guid, key_name: 'test1', value: 'bommel') expect do process_delete.delete([process]) end.to change(ProcessLabelModel, :count).by(-1) @@ -37,7 +37,7 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation = ProcessAnnotationModel.make(resource_guid: process.guid, key_name: 'test1', value: 'bommel') + annotation = create(:process_annotation_model, resource_guid: process.guid, key_name: 'test1', value: 'bommel') expect do process_delete.delete([process]) end.to change(ProcessAnnotationModel, :count).by(-1) @@ -47,8 +47,8 @@ module VCAP::CloudController end context 'when deleting multiple' do - let!(:process1) { ProcessModel.make(:process, app:) } - let!(:process2) { ProcessModel.make(:process, app:) } + let!(:process1) { create(:process_model, :process, app:) } + let!(:process2) { create(:process_model, :process, app:) } it 'deletes the process record' do expect do diff --git a/spec/unit/actions/process_restart_spec.rb b/spec/unit/actions/process_restart_spec.rb index 4de63630d89..2f659ed34ee 100644 --- a/spec/unit/actions/process_restart_spec.rb +++ b/spec/unit/actions/process_restart_spec.rb @@ -9,17 +9,16 @@ module VCAP::CloudController let(:environment_variables) { { 'FOO' => 'bar' } } let(:desired_state) { ProcessModel::STARTED } let(:app) do - AppModel.make( - :docker, - desired_state:, - environment_variables: - ) + create(:app_model, + :docker, + desired_state:, + environment_variables:) end - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } - let!(:droplet) { DropletModel.make(app:) } - let!(:process) { ProcessModel.make(:process, state: desired_state, app: app) } + let!(:droplet) { create(:droplet_model, app:) } + let!(:process) { create(:process_model, :process, state: desired_state, app: app) } let(:runner) { instance_double(VCAP::CloudController::Diego::Runner) } before do @@ -174,7 +173,7 @@ module VCAP::CloudController end context 'revision to set' do - let(:revision) { RevisionModel.make } + let(:revision) { create(:revision_model) } it 'sets the revision of the process if passed in' do ProcessRestart.restart(process: process, config: config, stop_in_runtime: false, revision: revision) diff --git a/spec/unit/actions/process_scale_spec.rb b/spec/unit/actions/process_scale_spec.rb index bdbe22313c1..b6e9004e655 100644 --- a/spec/unit/actions/process_scale_spec.rb +++ b/spec/unit/actions/process_scale_spec.rb @@ -13,7 +13,7 @@ module VCAP::CloudController } end let(:message) { ProcessScaleMessage.new(valid_message_params) } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let!(:process) { ProcessModelFactory.make(disk_quota: 50, app: app) } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } @@ -129,7 +129,7 @@ module VCAP::CloudController context 'when the parent app is being deployed' do before do - VCAP::CloudController::DeploymentModel.make(app: app, state: 'DEPLOYING') + create(:deployment_model, app: app, state: 'DEPLOYING') end it 'succeeds if the process is not web' do diff --git a/spec/unit/actions/process_terminate_spec.rb b/spec/unit/actions/process_terminate_spec.rb index 91a5c8234a0..fefc9fa2681 100644 --- a/spec/unit/actions/process_terminate_spec.rb +++ b/spec/unit/actions/process_terminate_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe ProcessTerminate do subject(:process_terminate) { ProcessTerminate.new(user_audit_info, process, index) } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let!(:process) { ProcessModelFactory.make(app:) } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } let(:index) { 0 } diff --git a/spec/unit/actions/process_update_spec.rb b/spec/unit/actions/process_update_spec.rb index 4c383739e66..a4e16d311e1 100644 --- a/spec/unit/actions/process_update_spec.rb +++ b/spec/unit/actions/process_update_spec.rb @@ -38,21 +38,20 @@ module VCAP::CloudController } ) end - let!(:droplet) { DropletModel.make(process_types: { web: 'BE rackup' }) } - let!(:app) { AppModel.make(droplet:) } + let!(:droplet) { create(:droplet_model, process_types: { web: 'BE rackup' }) } + let!(:app) { create(:app_model, droplet:) } let!(:process) do - ProcessModel.make( - :process, - type: 'web', - command: 'initial command', - user: nil, - health_check_type: 'port', - health_check_timeout: 10, - health_check_interval: 5, - ports: [1574, 3389], - app: app, - state: 'STARTED' - ) + create(:process, + :process, + type: 'web', + command: 'initial command', + user: nil, + health_check_type: 'port', + health_check_timeout: 10, + health_check_interval: 5, + ports: [1574, 3389], + app: app, + state: 'STARTED') end let(:user_guid) { 'user-guid' } @@ -104,14 +103,13 @@ module VCAP::CloudController context 'when the old healthcheck is http and the new healtcheck is not' do let!(:process) do - ProcessModel.make( - :process, - command: 'initial command', - health_check_type: 'http', - health_check_http_endpoint: '/healthcheck', - health_check_timeout: 10, - ports: [1574, 3389] - ) + create(:process, + :process, + command: 'initial command', + health_check_type: 'http', + health_check_http_endpoint: '/healthcheck', + health_check_timeout: 10, + ports: [1574, 3389]) end let(:health_check) do @@ -131,11 +129,10 @@ module VCAP::CloudController context 'when nothing else is changed' do let!(:process) do - ProcessModel.make( - :process, - health_check_type: 'http', - health_check_http_endpoint: '/healthcheck' - ) + create(:process, + :process, + health_check_type: 'http', + health_check_http_endpoint: '/healthcheck') end let(:health_check) do @@ -245,15 +242,14 @@ module VCAP::CloudController context 'when the old readiness healthcheck is http and the new readiness healtcheck is not' do let!(:process) do - ProcessModel.make( - :process, - command: 'initial command', - readiness_health_check_type: 'http', - readiness_health_check_http_endpoint: '/ready', - readiness_health_check_interval: 5, - health_check_timeout: 10, - ports: [1574, 3389] - ) + create(:process, + :process, + command: 'initial command', + readiness_health_check_type: 'http', + readiness_health_check_http_endpoint: '/ready', + readiness_health_check_interval: 5, + health_check_timeout: 10, + ports: [1574, 3389]) end let(:readiness_health_check) do @@ -273,11 +269,10 @@ module VCAP::CloudController context 'when nothing else is changed' do let!(:process) do - ProcessModel.make( - :process, - readiness_health_check_type: 'http', - readiness_health_check_http_endpoint: '/ready' - ) + create(:process, + :process, + readiness_health_check_type: 'http', + readiness_health_check_http_endpoint: '/ready') end let(:readiness_health_check) do @@ -483,7 +478,7 @@ module VCAP::CloudController context 'when there is a deployment in flight' do before do - DeploymentModel.make(app: app, state: DeploymentModel::DEPLOYING_STATE) + create(:deployment_model, app: app, state: DeploymentModel::DEPLOYING_STATE) end context 'when the process type is web' do @@ -496,15 +491,14 @@ module VCAP::CloudController context 'when the process type is NOT web' do let!(:process) do - ProcessModel.make( - :process, - type: 'gerg', - command: 'zrob', - health_check_type: 'port', - health_check_timeout: 10, - ports: [1574, 3389], - app: app - ) + create(:process, + :process, + type: 'gerg', + command: 'zrob', + health_check_type: 'port', + health_check_timeout: 10, + ports: [1574, 3389], + app: app) end it 'does not raise an error and updates the process' do diff --git a/spec/unit/actions/revision_create_spec.rb b/spec/unit/actions/revision_create_spec.rb index 637e4e12d8f..aa3a0b4eb90 100644 --- a/spec/unit/actions/revision_create_spec.rb +++ b/spec/unit/actions/revision_create_spec.rb @@ -4,18 +4,17 @@ module VCAP::CloudController RSpec.describe RevisionCreate do let(:droplet) do - DropletModel.make( - app: app, - process_types: { - 'web' => 'droplet_web_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, + app: app, + process_types: { + 'web' => 'droplet_web_command', + 'worker' => 'droplet_worker_command' + }) end - let(:app) { AppModel.make(revisions_enabled: true) } + let(:app) { create(:app_model, revisions_enabled: true) } let(:user_audit_info) { UserAuditInfo.new(user_guid: '456', user_email: 'mona@example.com', user_name: 'mona') } - let(:sidecar) { SidecarModel.make(app: app, command: 'sleep infinity', name: 'sleepy', memory: 12) } - let!(:sidecar_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') } + let(:sidecar) { create(:sidecar_model, app: app, command: 'sleep infinity', name: 'sleepy', memory: 12) } + let!(:sidecar_process_type) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') } before do app.update(droplet:) @@ -99,7 +98,7 @@ module VCAP::CloudController context 'when there are multiple revisions for an app' do it 'increments the version by 1' do - RevisionModel.make(app: app, version: 1, created_at: 4.days.ago) + create(:revision_model, app: app, version: 1, created_at: 4.days.ago) expect do RevisionCreate.create( @@ -116,11 +115,11 @@ module VCAP::CloudController end it 'rolls over to version 1 when we pass version 9999' do - RevisionModel.make(app: app, version: 1, created_at: 5.days.ago) - RevisionModel.make(app: app, version: 2, created_at: 4.days.ago) + create(:revision_model, app: app, version: 1, created_at: 5.days.ago) + create(:revision_model, app: app, version: 2, created_at: 4.days.ago) # ... - RevisionModel.make(app: app, version: 9998, created_at: 3.days.ago) - RevisionModel.make(app: app, version: 9999, created_at: 2.days.ago) + create(:revision_model, app: app, version: 9998, created_at: 3.days.ago) + create(:revision_model, app: app, version: 9999, created_at: 2.days.ago) RevisionCreate.create( app: app, @@ -134,11 +133,11 @@ module VCAP::CloudController end it 'replaces any existing revisions after rolling over' do - RevisionModel.make(app: app, version: 2, created_at: 4.days.ago) + create(:revision_model, app: app, version: 2, created_at: 4.days.ago) # ... - RevisionModel.make(app: app, version: 9998, created_at: 3.days.ago) - RevisionModel.make(app: app, version: 9999, created_at: 2.days.ago) - RevisionModel.make(app: app, version: 1, created_at: 1.day.ago) + create(:revision_model, app: app, version: 9998, created_at: 3.days.ago) + create(:revision_model, app: app, version: 9999, created_at: 2.days.ago) + create(:revision_model, app: app, version: 1, created_at: 1.day.ago) RevisionCreate.create( app: app, diff --git a/spec/unit/actions/revision_delete_spec.rb b/spec/unit/actions/revision_delete_spec.rb index 8ffc64ca1a1..ba8c52b5bf1 100644 --- a/spec/unit/actions/revision_delete_spec.rb +++ b/spec/unit/actions/revision_delete_spec.rb @@ -12,8 +12,8 @@ module VCAP::CloudController end it 'deletes associated labels' do - label1 = RevisionLabelModel.make(revision: revision1, key_name: 'test', value: 'bommel') - label2 = RevisionLabelModel.make(revision: revision2, key_name: 'test', value: 'bommel') + label1 = create(:revision_label_model, revision: revision1, key_name: 'test', value: 'bommel') + label2 = create(:revision_label_model, revision: revision2, key_name: 'test', value: 'bommel') expect do revision_delete @@ -22,8 +22,8 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation1 = RevisionAnnotationModel.make(revision: revision1, key_name: 'test', value: 'bommel') - annotation2 = RevisionAnnotationModel.make(revision: revision2, key_name: 'test', value: 'bommel') + annotation1 = create(:revision_annotation_model, revision: revision1, key_name: 'test', value: 'bommel') + annotation2 = create(:revision_annotation_model, revision: revision2, key_name: 'test', value: 'bommel') expect do revision_delete @@ -32,8 +32,8 @@ module VCAP::CloudController end it 'deletes associated process commands' do - process_command1 = RevisionProcessCommandModel.make(revision: revision1) - process_command2 = RevisionProcessCommandModel.make(revision: revision2) + process_command1 = create(:revision_process_command_model, revision: revision1) + process_command2 = create(:revision_process_command_model, revision: revision2) expect do revision_delete @@ -42,10 +42,10 @@ module VCAP::CloudController end it 'deletes associated sidecars and sidecar process types' do - sidecar1 = RevisionSidecarModel.make(revision: revision1, revision_sidecar_process_type_guids: nil) - sidecar2 = RevisionSidecarModel.make(revision: revision2, revision_sidecar_process_type_guids: nil) - sidecar_process_type1 = RevisionSidecarProcessTypeModel.make(revision_sidecar: sidecar1) - sidecar_process_type2 = RevisionSidecarProcessTypeModel.make(revision_sidecar: sidecar2) + sidecar1 = create(:revision_sidecar_model, :no_process_types, revision: revision1) + sidecar2 = create(:revision_sidecar_model, :no_process_types, revision: revision2) + sidecar_process_type1 = create(:revision_sidecar_process_type_model, revision_sidecar: sidecar1) + sidecar_process_type2 = create(:revision_sidecar_process_type_model, revision_sidecar: sidecar2) expect do revision_delete @@ -54,9 +54,9 @@ module VCAP::CloudController end end - let!(:app) { AppModel.make } - let!(:revision1) { RevisionModel.make(app: app, process_command_guids: nil) } - let!(:revision2) { RevisionModel.make(app: app, process_command_guids: nil) } + let!(:app) { create(:app_model) } + let!(:revision1) { create(:revision_model, :no_commands, app: app) } + let!(:revision2) { create(:revision_model, :no_commands, app: app) } describe '#delete' do it_behaves_like 'RevisionDelete action' do diff --git a/spec/unit/actions/revision_resolver_spec.rb b/spec/unit/actions/revision_resolver_spec.rb index e27cda982a9..8d5622b84ea 100644 --- a/spec/unit/actions/revision_resolver_spec.rb +++ b/spec/unit/actions/revision_resolver_spec.rb @@ -4,18 +4,17 @@ module VCAP::CloudController RSpec.describe RevisionResolver do let(:droplet) do - DropletModel.make( - app: app, - process_types: { - 'web' => 'droplet_web_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, + app: app, + process_types: { + 'web' => 'droplet_web_command', + 'worker' => 'droplet_worker_command' + }) end - let(:app) { AppModel.make(revisions_enabled: true, environment_variables: { 'key' => 'value' }) } + let(:app) { create(:app_model, revisions_enabled: true, environment_variables: { 'key' => 'value' }) } let(:user_audit_info) { UserAuditInfo.new(user_guid: '456', user_email: 'mona@example.com', user_name: 'mona') } - let!(:older_web_process) { ProcessModel.make(app: app, type: 'web', created_at: 2.minutes.ago) } - let!(:worker_process) { ProcessModel.make(app: app, type: 'worker') } + let!(:older_web_process) { create(:process_model, app: app, type: 'web', created_at: 2.minutes.ago) } + let!(:worker_process) { create(:process_model, app: app, type: 'worker') } before do app.update(droplet:) @@ -60,10 +59,10 @@ module VCAP::CloudController context 'when the latest revision is out of date' do it 'creates a revision from the app values with the appropriate description' do - RevisionModel.make(:custom_web_command, - app: app, - droplet: app.droplet, - environment_variables: { 'foo' => 'bar' }) + create(:revision_model, :custom_web_command, + app: app, + droplet: app.droplet, + environment_variables: { 'foo' => 'bar' }) expect do RevisionResolver.update_app_revision(app, user_audit_info) @@ -78,14 +77,13 @@ module VCAP::CloudController end context 'when sidecars have been added' do - let!(:sidecar) { SidecarModel.make(app:) } + let!(:sidecar) { create(:sidecar_model, app:) } it 'creates a revision from the app values' do - RevisionModel.make( - app: app, - droplet: app.droplet, - environment_variables: app.environment_variables - ) + create(:revision_model, + app: app, + droplet: app.droplet, + environment_variables: app.environment_variables) expect do RevisionResolver.update_app_revision(app, user_audit_info) @@ -99,11 +97,10 @@ module VCAP::CloudController context 'when the latest revisions is up to date' do it 'returns the latest_revision' do - RevisionModel.make( - app: app, - droplet: app.droplet, - environment_variables: app.environment_variables - ) + create(:revision_model, + app: app, + droplet: app.droplet, + environment_variables: app.environment_variables) revision = nil expect do @@ -117,11 +114,11 @@ module VCAP::CloudController describe '.rollback_app_revision' do let(:initial_revision) do - RevisionModel.make(:custom_web_command, - version: 1, - droplet: droplet, - app: app, - environment_variables: { BISH: 'BASH', FOO: 'BAR' }) + create(:revision_model, :custom_web_command, + version: 1, + droplet: droplet, + app: app, + environment_variables: { BISH: 'BASH', FOO: 'BAR' }) end before do @@ -145,12 +142,12 @@ module VCAP::CloudController context 'when revisions are enabled' do let!(:latest_revision) do - RevisionModel.make(:custom_web_command, - app: app, - droplet: app.droplet, - environment_variables: { 'foo' => 'bar' }, - description: ['latest revision'], - version: 2) + create(:revision_model, :custom_web_command, + app: app, + droplet: app.droplet, + environment_variables: { 'foo' => 'bar' }, + description: ['latest revision'], + version: 2) end context 'rolling back' do @@ -166,8 +163,8 @@ module VCAP::CloudController end it 'does not copy metadata to the new rollback revision' do - RevisionAnnotationModel.make(revision: initial_revision, key_name: 'foo', value: 'bar') - RevisionLabelModel.make(revision: initial_revision, key_name: 'baz', value: 'qux') + create(:revision_annotation_model, revision: initial_revision, key_name: 'foo', value: 'bar') + create(:revision_label_model, revision: initial_revision, key_name: 'baz', value: 'qux') rollback_revision = RevisionResolver.rollback_app_revision(app, initial_revision, user_audit_info) diff --git a/spec/unit/actions/revisions_update_spec.rb b/spec/unit/actions/revisions_update_spec.rb index 8d5dea36f2f..5f39dd43fb0 100644 --- a/spec/unit/actions/revisions_update_spec.rb +++ b/spec/unit/actions/revisions_update_spec.rb @@ -18,7 +18,7 @@ module VCAP::CloudController } } end - let(:revision) { RevisionModel.make } + let(:revision) { create(:revision_model) } let(:message) { RevisionsUpdateMessage.new(body) } it 'updates the revision metadata' do diff --git a/spec/unit/actions/role_create_spec.rb b/spec/unit/actions/role_create_spec.rb index 0c32d22795e..b1e08ded003 100644 --- a/spec/unit/actions/role_create_spec.rb +++ b/spec/unit/actions/role_create_spec.rb @@ -5,9 +5,9 @@ module VCAP::CloudController RSpec.describe RoleCreate do let(:db) { Sequel::Model.db } - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_audit_info) { UserAuditInfo.new(user_email: 'amelia@cats.com', user_guid: 'gooid') } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } diff --git a/spec/unit/actions/role_delete_spec.rb b/spec/unit/actions/role_delete_spec.rb index e4c12985221..641f9a4e6a6 100644 --- a/spec/unit/actions/role_delete_spec.rb +++ b/spec/unit/actions/role_delete_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe RoleDeleteAction do let(:user_audit_info) { UserAuditInfo.new(user_email: 'amelia@cats.com', user_guid: 'gooid') } - let(:user_with_role) { User.make(guid: 'i-have-a-role-to-delete') } + let(:user_with_role) { create(:user, guid: 'i-have-a-role-to-delete') } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } before do @@ -37,7 +37,7 @@ module VCAP::CloudController end context 'space auditor' do - let!(:role) { SpaceAuditor.make(user: user_with_role) } + let!(:role) { create(:space_auditor, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.space_auditor_remove' @@ -45,7 +45,7 @@ module VCAP::CloudController end context 'space manager' do - let!(:role) { SpaceManager.make(user: user_with_role) } + let!(:role) { create(:space_manager, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.space_manager_remove' @@ -53,7 +53,7 @@ module VCAP::CloudController end context 'space supporter' do - let!(:role) { SpaceSupporter.make(user: user_with_role) } + let!(:role) { create(:space_supporter, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.space_supporter_remove' @@ -61,7 +61,7 @@ module VCAP::CloudController end context 'space developer' do - let!(:role) { SpaceDeveloper.make(user: user_with_role) } + let!(:role) { create(:space_developer, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.space_developer_remove' @@ -69,7 +69,7 @@ module VCAP::CloudController end context 'org manager' do - let!(:role) { OrganizationManager.make(user: user_with_role) } + let!(:role) { create(:organization_manager, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.organization_manager_remove' @@ -77,7 +77,7 @@ module VCAP::CloudController end context 'org billing manager' do - let!(:role) { OrganizationBillingManager.make(user: user_with_role) } + let!(:role) { create(:organization_billing_manager, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.organization_billing_manager_remove' @@ -85,7 +85,7 @@ module VCAP::CloudController end context 'org auditor' do - let!(:role) { OrganizationAuditor.make(user: user_with_role) } + let!(:role) { create(:organization_auditor, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.organization_auditor_remove' @@ -93,7 +93,7 @@ module VCAP::CloudController end context 'org user' do - let!(:role) { OrganizationUser.make(user: user_with_role) } + let!(:role) { create(:organization_user, user: user_with_role) } it_behaves_like 'deletion', { event_type: 'audit.user.organization_user_remove' diff --git a/spec/unit/actions/route_create_spec.rb b/spec/unit/actions/route_create_spec.rb index 86fdca59888..17fcc256114 100644 --- a/spec/unit/actions/route_create_spec.rb +++ b/spec/unit/actions/route_create_spec.rb @@ -13,9 +13,9 @@ module VCAP::CloudController end describe '#create' do - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:org) { VCAP::CloudController::Organization.make } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } + let(:space) { create(:space, organization: org) } + let(:org) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: org) } context 'when successful' do let(:message) do @@ -221,8 +221,8 @@ module VCAP::CloudController end context 'when the domain has an owning org that is different from the space\'s parent org' do - let(:other_org) { VCAP::CloudController::Organization.make } - let(:inaccessible_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: other_org) } + let(:other_org) { create(:organization) } + let(:inaccessible_domain) { create(:private_domain, owning_organization: other_org) } let(:message) do RouteCreateMessage.new({ @@ -245,7 +245,7 @@ module VCAP::CloudController end context 'when the domain already has a route' do - let!(:existing_route) { VCAP::CloudController::Route.make(host: '', space: space, domain: domain) } + let!(:existing_route) { create(:route, host: '', space: space, domain: domain) } let(:message) do RouteCreateMessage.new({ @@ -291,10 +291,10 @@ module VCAP::CloudController end context 'when the space quota for routes is maxed out' do - let!(:space_quota_definition) { SpaceQuotaDefinition.make(total_routes: 0, organization: org) } + let!(:space_quota_definition) { create(:space_quota_definition, total_routes: 0, organization: org) } let!(:space_with_quota) do - Space.make(space_quota_definition: space_quota_definition, - organization: org) + create(:space, space_quota_definition: space_quota_definition, + organization: org) end let(:message) do @@ -318,12 +318,12 @@ module VCAP::CloudController end context 'when the org quota for routes is maxed out' do - let!(:org_quota_definition) { QuotaDefinition.make(total_routes: 0, total_reserved_route_ports: 0) } - let!(:org_with_quota) { Organization.make(quota_definition: org_quota_definition) } + let!(:org_quota_definition) { create(:quota_definition, total_routes: 0, total_reserved_route_ports: 0) } + let!(:org_with_quota) { create(:organization, quota_definition: org_quota_definition) } let!(:space_in_org_with_quota) do - Space.make(organization: org_with_quota) + create(:space, organization: org_with_quota) end - let(:domain_in_org_with_quota) { Domain.make(owning_organization: org_with_quota) } + let(:domain_in_org_with_quota) { create(:domain, owning_organization: org_with_quota) } let(:message) do RouteCreateMessage.new({ @@ -346,7 +346,7 @@ module VCAP::CloudController end context 'when the FQDN is too long' do - let(:domain_with_long_name) { Domain.make(owning_organization: org, name: "#{'a' * 60}.#{'b' * 60}.#{'c' * 60}.#{'d' * 60}.com") } + let(:domain_with_long_name) { create(:domain, owning_organization: org, name: "#{'a' * 60}.#{'b' * 60}.#{'c' * 60}.#{'d' * 60}.com") } let(:message) do RouteCreateMessage.new({ @@ -370,7 +370,7 @@ module VCAP::CloudController end context 'when the domain is unscoped' do - let(:shared_domain) { SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } it 'requires host not to be empty' do message = RouteCreateMessage.new({ @@ -493,7 +493,7 @@ module VCAP::CloudController context 'when a route already exists' do it 'prevents conflict with hostless route on a matching domain' do - Route.make(domain: domain, host: '', space: space) + create(:route, domain: domain, host: '', space: space) message = RouteCreateMessage.new({ host: '', @@ -513,7 +513,7 @@ module VCAP::CloudController end it 'prevents conflict with matching route on host' do - Route.make(domain: domain, host: 'a-host', space: space) + create(:route, domain: domain, host: 'a-host', space: space) message = RouteCreateMessage.new({ host: 'a-host', @@ -533,7 +533,7 @@ module VCAP::CloudController end it 'prevents conflict with matching route on path' do - Route.make(domain: domain, host: 'a-host', path: '/a-path', space: space) + create(:route, domain: domain, host: 'a-host', path: '/a-path', space: space) message = RouteCreateMessage.new({ host: 'a-host', @@ -555,7 +555,7 @@ module VCAP::CloudController end context 'when the domain is internal' do - let(:internal_domain) { SharedDomain.make(internal: true) } + let(:internal_domain) { create(:shared_domain, internal: true) } it 'requires host not to be a wildcard' do message = RouteCreateMessage.new({ @@ -616,7 +616,7 @@ module VCAP::CloudController end context 'when using a reserved system hostname' do - let(:system_domain) { SharedDomain.make } + let(:system_domain) { create(:shared_domain) } before do VCAP::CloudController::Config.config.set(:system_domain, system_domain.name) @@ -644,7 +644,7 @@ module VCAP::CloudController describe 'ports' do context 'when the domain supports ports (tcp)' do - let(:domain) { SharedDomain.make(router_group_guid: 'some-router-group') } + let(:domain) { create(:shared_domain, router_group_guid: 'some-router-group') } let(:message) do RouteCreateMessage.new({ port: 1234, @@ -680,7 +680,7 @@ module VCAP::CloudController end context 'when a route with the same domain and port exist' do - let!(:duplicate_route) { Route.make(domain: domain, host: '', port: 1234, space: space) } + let!(:duplicate_route) { create(:route, domain: domain, host: '', port: 1234, space: space) } it 'errors to prevent creating a duplicate route' do expect do @@ -702,9 +702,9 @@ module VCAP::CloudController end context 'when the space quota limit on reserved ports has been maxed out' do - let!(:space_quota_definition) { SpaceQuotaDefinition.make(total_reserved_route_ports: 0, organization: org) } + let!(:space_quota_definition) { create(:space_quota_definition, total_reserved_route_ports: 0, organization: org) } let!(:space) do - Space.make(space_quota_definition: space_quota_definition, organization: org) + create(:space, space_quota_definition: space_quota_definition, organization: org) end it 'raises an error with a helpful message' do @@ -715,10 +715,10 @@ module VCAP::CloudController end context 'when the org quota limit on reserved ports has been maxed out' do - let!(:org_quota_definition) { QuotaDefinition.make(total_reserved_route_ports: 0) } - let!(:org_with_quota) { Organization.make(quota_definition: org_quota_definition) } - let!(:space) { Space.make(organization: org_with_quota) } - let(:domain) { Domain.make(owning_organization: org_with_quota) } + let!(:org_quota_definition) { create(:quota_definition, total_reserved_route_ports: 0) } + let!(:org_with_quota) { create(:organization, quota_definition: org_quota_definition) } + let!(:space) { create(:space, organization: org_with_quota) } + let(:domain) { create(:domain, owning_organization: org_with_quota) } it 'raises an error with a helpful message' do expect do diff --git a/spec/unit/actions/route_delete_spec.rb b/spec/unit/actions/route_delete_spec.rb index 748a22aaa36..fc73f5f68f6 100644 --- a/spec/unit/actions/route_delete_spec.rb +++ b/spec/unit/actions/route_delete_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe RouteDeleteAction do let(:user_audit_info) { instance_double(UserAuditInfo) } let(:route_event_repo) { instance_double(Repositories::RouteEventRepository) } - let(:space) { Space.make } + let(:space) { create(:space) } subject(:route_delete) { RouteDeleteAction.new(user_audit_info) } describe '#delete' do - let!(:route) { Route.make } + let!(:route) { create(:route) } before do allow(Repositories::RouteEventRepository).to receive(:new).and_return(route_event_repo) @@ -32,26 +32,24 @@ module VCAP::CloudController end describe 'recursive deletion' do - let(:app) { AppModel.make } - let(:route) { Route.make(space: space, host: 'test') } - let(:service_instance) { ManagedServiceInstance.make(:routing, space:) } - let!(:route_binding) { RouteBinding.make(route:, service_instance:) } - let!(:route_mapping) { RouteMappingModel.make(app: app, route: route, app_port: 8080) } + let(:app) { create(:app_model) } + let(:route) { create(:route, space: space, host: 'test') } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } + let!(:route_mapping) { create(:route_mapping_model, app: app, route: route, app_port: 8080) } let!(:route_label) do - VCAP::CloudController::RouteLabelModel.make( - resource_guid: route.guid, - key_prefix: 'pfx.com', - key_name: 'potato', - value: 'baked' - ) + create(:route_label_model, + resource_guid: route.guid, + key_prefix: 'pfx.com', + key_name: 'potato', + value: 'baked') end let!(:route_annotation) do - VCAP::CloudController::RouteAnnotationModel.make( - resource_guid: route.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:route_annotation_model, + resource_guid: route.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end before do diff --git a/spec/unit/actions/route_destination_update_spec.rb b/spec/unit/actions/route_destination_update_spec.rb index a59c9b6ed12..20372d20dc1 100644 --- a/spec/unit/actions/route_destination_update_spec.rb +++ b/spec/unit/actions/route_destination_update_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController describe '#update' do let(:process) { ProcessModelFactory.make(state: 'STARTED') } - let!(:destination) { RouteMappingModel.make({ protocol: 'http1', app_guid: process.app.guid, process_type: process.type }) } + let!(:destination) { create(:route_mapping_model, { protocol: 'http1', app_guid: process.app.guid, process_type: process.type }) } let(:process_route_handler) { instance_double(ProcessRouteHandler, notify_backend_of_route_update: nil) } let(:message) do @@ -42,9 +42,9 @@ module VCAP::CloudController allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(routing_api_client) allow_any_instance_of(VCAP::CloudController::RouteValidator).to receive(:validate) - VCAP::CloudController::Route.make(:tcp) + create(:route, :tcp) end - let!(:tcp_destination) { RouteMappingModel.make({ route: tcp_route }) } + let!(:tcp_destination) { create(:route_mapping_model, { route: tcp_route }) } it 'does not update the destination record' do expect { RouteDestinationUpdate.update(tcp_destination, message) }.to raise_error(StandardError) diff --git a/spec/unit/actions/route_mapping_delete_spec.rb b/spec/unit/actions/route_mapping_delete_spec.rb index a386fadfa41..6d80ec30c45 100644 --- a/spec/unit/actions/route_mapping_delete_spec.rb +++ b/spec/unit/actions/route_mapping_delete_spec.rb @@ -4,15 +4,15 @@ module VCAP::CloudController RSpec.describe RouteMappingDelete do subject(:route_mapping_delete) { RouteMappingDelete.new(user_audit_info) } let(:logger) { instance_double(Steno::Logger) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user_email' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } - let(:process1) { ProcessModel.make(app: app, type: 'other') } - let(:process2) { ProcessModel.make(app: app, type: 'other') } - let(:route) { Route.make(space:) } - let!(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: 'other', guid: 'go wild') } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } + let(:process1) { create(:process_model, app: app, type: 'other') } + let(:process2) { create(:process_model, app: app, type: 'other') } + let(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: 'other', guid: 'go wild') } let(:process1_route_handler) { instance_double(ProcessRouteHandler, update_route_information: nil) } let(:process2_route_handler) { instance_double(ProcessRouteHandler, update_route_information: nil) } let(:event_repository) { instance_double(Repositories::AppEventRepository) } @@ -41,7 +41,7 @@ module VCAP::CloudController end it 'can delete multiple route mappings' do - route_mapping_2 = RouteMappingModel.make(app:) + route_mapping_2 = create(:route_mapping_model, app:) route_mapping_delete.delete([route_mapping, route_mapping_2]) expect(route_mapping).not_to exist expect(route_mapping_2).not_to exist @@ -89,7 +89,7 @@ module VCAP::CloudController end it 'deletes only present route mappings' do - route_mapping_2 = RouteMappingModel.make(app:) + route_mapping_2 = create(:route_mapping_model, app:) expect { route_mapping_delete.delete([route_mapping, route_mapping_2]) }.not_to raise_error expect(route_mapping_2).not_to exist end diff --git a/spec/unit/actions/route_share_spec.rb b/spec/unit/actions/route_share_spec.rb index aaa29fd7b83..5d080a126fd 100644 --- a/spec/unit/actions/route_share_spec.rb +++ b/spec/unit/actions/route_share_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe RouteShare do let(:route_share) { RouteShare.new } - let(:route) { Route.make } - let(:target_space1) { Space.make } - let(:target_space2) { Space.make } + let(:route) { create(:route) } + let(:target_space1) { create(:space) } + let(:target_space2) { create(:space) } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid-1', user_email: 'user@email.com') } describe '#create' do diff --git a/spec/unit/actions/route_transfer_owner_spec.rb b/spec/unit/actions/route_transfer_owner_spec.rb index 92878bbc5fb..da4272fb2e7 100644 --- a/spec/unit/actions/route_transfer_owner_spec.rb +++ b/spec/unit/actions/route_transfer_owner_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe RouteTransferOwner do let(:route_share) { RouteShare.new } - let(:route) { Route.make domain: SharedDomain.make, space: original_owning_space } - let(:original_owning_space) { Space.make name: 'original_owning_space' } - let(:target_space) { Space.make name: 'target_space' } - let(:target_space_dup_name) { Space.make name: 'original_owning_space' } - let(:shared_space) { Space.make name: 'shared_space' } + let(:route) { create(:route, domain: create(:shared_domain), space: original_owning_space) } + let(:original_owning_space) { create(:space, name: 'original_owning_space') } + let(:target_space) { create(:space, name: 'target_space') } + let(:target_space_dup_name) { create(:space, name: 'original_owning_space') } + let(:shared_space) { create(:space, name: 'shared_space') } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid-1', user_email: 'user@email.com') } describe '#transfer' do diff --git a/spec/unit/actions/route_unshare_spec.rb b/spec/unit/actions/route_unshare_spec.rb index 46040c9d622..278c768e6b3 100644 --- a/spec/unit/actions/route_unshare_spec.rb +++ b/spec/unit/actions/route_unshare_spec.rb @@ -5,13 +5,13 @@ module VCAP::CloudController RSpec.describe RouteUnshare do let(:route_share) { RouteShare.new } let(:route_unshare) { RouteUnshare.new } - let(:route) { Route.make } - let(:target_space1) { Space.make } - let(:target_space2) { Space.make } + let(:route) { create(:route) } + let(:target_space1) { create(:space) } + let(:target_space2) { create(:space) } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid-1', user_email: 'user@email.com') } describe '#unshare' do - let(:target_space3) { Space.make } + let(:target_space3) { create(:space) } before do allow_any_instance_of(Repositories::RouteEventRepository).to receive(:record_route_unshare) diff --git a/spec/unit/actions/route_update_spec.rb b/spec/unit/actions/route_update_spec.rb index be966d96fe2..33c4639ffd2 100644 --- a/spec/unit/actions/route_update_spec.rb +++ b/spec/unit/actions/route_update_spec.rb @@ -41,8 +41,8 @@ module VCAP::CloudController end let(:message) { RouteUpdateMessage.new(body) } - let(:process) { ProcessModel.make } - let(:route_mapping) { RouteMappingModel.make(app: process.app) } + let(:process) { create(:process_model) } + let(:route_mapping) { create(:route_mapping_model, app: process.app) } let(:route) { route_mapping.route } subject { RouteUpdate.new } @@ -192,7 +192,7 @@ module VCAP::CloudController context 'when the route has existing options for loadbalancing=hash' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) route[:options] = '{"loadbalancing": "hash", "hash_header": "foobar", "hash_balance": "2"}' end @@ -399,7 +399,7 @@ module VCAP::CloudController context 'when hash_based_routing feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end context 'when updating to hash loadbalancing without hash_header' do diff --git a/spec/unit/actions/routing/route_delete_spec.rb b/spec/unit/actions/routing/route_delete_spec.rb index 7340327278a..291689f811e 100644 --- a/spec/unit/actions/routing/route_delete_spec.rb +++ b/spec/unit/actions/routing/route_delete_spec.rb @@ -14,7 +14,7 @@ module VCAP::CloudController let(:route_event_repository) { instance_double(Repositories::RouteEventRepository, record_route_delete_request: nil) } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid', user_email: 'user-email') } let(:recursive) { false } - let!(:route) { Route.make } + let!(:route) { create(:route) } describe 'delete_unmapped_route' do it 'deletes the route' do @@ -31,8 +31,8 @@ module VCAP::CloudController context 'when there are route mappings' do it 'does not deletes the mappings or route' do - route_mapping = RouteMappingModel.make(route:) - route_mapping_2 = RouteMappingModel.make(route:) + route_mapping = create(:route_mapping_model, route:) + route_mapping_2 = create(:route_mapping_model, route:) route_delete_action.delete_unmapped_route(route:) @@ -43,7 +43,7 @@ module VCAP::CloudController end context 'when there is a service binding' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:route) { route_binding.route } it 'does not delete the route' do @@ -80,8 +80,8 @@ module VCAP::CloudController end context 'when there are route mappings' do - let!(:route_mapping) { RouteMappingModel.make route: } - let!(:route_mapping_2) { RouteMappingModel.make route: } + let!(:route_mapping) { create(:route_mapping_model, route:) } + let!(:route_mapping_2) { create(:route_mapping_model, route:) } it 'deletes the mappings' do route_delete_action.delete_sync(route:, recursive:) @@ -99,7 +99,7 @@ module VCAP::CloudController end context 'when there are route services bound to the route' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:route) { route_binding.route } context 'and it is a recursive delete' do diff --git a/spec/unit/actions/security_group_apply_spec.rb b/spec/unit/actions/security_group_apply_spec.rb index c7a1f0c04f5..ec041dcdef2 100644 --- a/spec/unit/actions/security_group_apply_spec.rb +++ b/spec/unit/actions/security_group_apply_spec.rb @@ -9,9 +9,9 @@ module VCAP::CloudController describe '#apply_running' do subject { SecurityGroupApply } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } let(:message) do VCAP::CloudController::SecurityGroupApplyMessage.new({ data: [{ guid: space.guid }] @@ -92,9 +92,9 @@ module VCAP::CloudController describe '#apply_staging' do subject { SecurityGroupApply } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } let(:message) do VCAP::CloudController::SecurityGroupApplyMessage.new({ data: [{ guid: space.guid }] diff --git a/spec/unit/actions/security_group_create_spec.rb b/spec/unit/actions/security_group_create_spec.rb index bbd9f6c1b76..f9435e468d0 100644 --- a/spec/unit/actions/security_group_create_spec.rb +++ b/spec/unit/actions/security_group_create_spec.rb @@ -6,8 +6,8 @@ module VCAP::CloudController RSpec.describe SecurityGroupCreate do describe 'create' do subject { SecurityGroupCreate } - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } context 'when creating a security-group' do context 'with default values' do @@ -81,7 +81,7 @@ module VCAP::CloudController end context 'with rules' do - let(:group) { VCAP::CloudController::SecurityGroup.make } + let(:group) { create(:security_group) } let(:first_group) do { diff --git a/spec/unit/actions/security_group_delete_spec.rb b/spec/unit/actions/security_group_delete_spec.rb index 935b1c978e4..4dfeee951dd 100644 --- a/spec/unit/actions/security_group_delete_spec.rb +++ b/spec/unit/actions/security_group_delete_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController subject(:security_group_delete) { SecurityGroupDeleteAction.new } describe '#delete' do - let!(:security_group) { SecurityGroup.make(name: 'test-security-group') } + let!(:security_group) { create(:security_group, name: 'test-security-group') } it 'deletes the security group record' do expect do @@ -16,7 +16,7 @@ module VCAP::CloudController end describe 'recursive deletion' do - let(:space) { Space.make(name: 'petunia') } + let(:space) { create(:space, name: 'petunia') } before do security_group.add_space(space) diff --git a/spec/unit/actions/security_group_unapply_spec.rb b/spec/unit/actions/security_group_unapply_spec.rb index aca70dd3ecc..6835bbc61f9 100644 --- a/spec/unit/actions/security_group_unapply_spec.rb +++ b/spec/unit/actions/security_group_unapply_spec.rb @@ -6,8 +6,8 @@ module VCAP::CloudController describe '#unapply_running' do subject { SecurityGroupUnapply } - let(:space) { VCAP::CloudController::Space.make } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:space) { create(:space) } + let(:security_group) { create(:security_group) } before do security_group.add_space(space) @@ -47,8 +47,8 @@ module VCAP::CloudController describe '#unapply_staging' do subject { SecurityGroupUnapply } - let(:space) { VCAP::CloudController::Space.make } - let(:security_group) { VCAP::CloudController::SecurityGroup.make } + let(:space) { create(:space) } + let(:security_group) { create(:security_group) } before do security_group.add_staging_space(space) diff --git a/spec/unit/actions/security_group_update_spec.rb b/spec/unit/actions/security_group_update_spec.rb index 144676d6ee7..3442f0bc785 100644 --- a/spec/unit/actions/security_group_update_spec.rb +++ b/spec/unit/actions/security_group_update_spec.rb @@ -9,12 +9,11 @@ module VCAP::CloudController let(:name) { 'my-security-group' } let!(:security_group) do - VCAP::CloudController::SecurityGroup.make( - name: 'original-name', - rules: [{ 'protocol' => 'udp', 'ports' => '8080', 'destination' => '198.41.191.47/1' }], - running_default: false, - staging_default: true - ) + create(:security_group, + name: 'original-name', + rules: [{ 'protocol' => 'udp', 'ports' => '8080', 'destination' => '198.41.191.47/1' }], + running_default: false, + staging_default: true) end context 'when updating a security group' do @@ -86,7 +85,7 @@ module VCAP::CloudController end context 'when a uniqueness error occurs due to the requested name' do - let!(:original) { VCAP::CloudController::SecurityGroup.make(name:) } + let!(:original) { create(:security_group, name:) } it 'raises a human-friendly error' do expect do diff --git a/spec/unit/actions/service_credential_binding_app_create_spec.rb b/spec/unit/actions/service_credential_binding_app_create_spec.rb index ec6749ea182..15c9507b7b3 100644 --- a/spec/unit/actions/service_credential_binding_app_create_spec.rb +++ b/spec/unit/actions/service_credential_binding_app_create_spec.rb @@ -12,8 +12,8 @@ module V3 let(:manifest_triggered) { false } let(:audit_hash) { { some_info: 'some_value' } } let(:volume_mount_services_enabled) { true } - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } let(:binding_details) {} let(:user_guid) { Sham.uaa_id } let(:user_audit_info) { UserAuditInfo.new(user_email: 'run@lola.run', user_guid: user_guid) } @@ -68,7 +68,7 @@ module V3 end context 'when a binding already exists' do - let!(:binding) { ServiceBinding.make(service_instance:, app:) } + let!(:binding) { create(:service_binding, service_instance:, app:) } context 'when no last binding operation exists' do it 'raises an error' do @@ -139,7 +139,7 @@ module V3 end context 'app_guid + name uniqueness validation' do - let!(:other_binding) { ServiceBinding.make(service_instance: other_service_instance, app: app, name: name) } + let!(:other_binding) { create(:service_binding, service_instance: other_service_instance, app: app, name: name) } context 'two bindings with the same binding name' do it 'raises an error' do @@ -162,8 +162,8 @@ module V3 end context 'when app and service instance are in different spaces' do - let(:different_space) { Space.make } - let(:app) { AppModel.make(space: different_space) } + let(:different_space) { create(:space) } + let(:app) { create(:app_model, space: different_space) } it 'raises an error' do expect do @@ -178,7 +178,7 @@ module V3 # We mock that a second binding is created after the first one acquires a lock and expect an `UnprocessableCreate` error. allow(app).to receive(:lock!).and_wrap_original do |m, *args, &block| m.call(*args, &block) - ServiceBinding.make(service_instance:, app:) + create(:service_binding, service_instance:, app:) end expect do @@ -191,8 +191,8 @@ module V3 context 'when multiple bindings are allowed' do let(:message) { VCAP::CloudController::ServiceCredentialAppBindingCreateMessage.new({ name: name, strategy: 'multiple' }) } - let(:binding_1) { ServiceBinding.make(service_instance:, app:, name:) } - let(:binding_2) { ServiceBinding.make(service_instance:, app:, name:) } + let(:binding_1) { create(:service_binding, service_instance:, app:, name:) } + let(:binding_2) { create(:service_binding, service_instance:, app:, name:) } before do TestConfig.override(max_service_credential_bindings_per_app_service_instance: 3) @@ -300,8 +300,8 @@ module V3 } end - let(:service_instance) { UserProvidedServiceInstance.make(**si_details) } - let(:other_service_instance) { UserProvidedServiceInstance.make(**si_details, name: 'other_instance_name') } + let(:service_instance) { create(:user_provided_service_instance, **si_details) } + let(:other_service_instance) { create(:user_provided_service_instance, **si_details, name: 'other_instance_name') } it_behaves_like 'the credential binding precursor' end @@ -314,14 +314,14 @@ module V3 } end - let(:service_instance) { ManagedServiceInstance.make(**si_details) } - let(:other_service_instance) { ManagedServiceInstance.make(**si_details, name: 'other_instance_name') } + let(:service_instance) { create(:managed_service_instance, **si_details) } + let(:other_service_instance) { create(:managed_service_instance, **si_details, name: 'other_instance_name') } it_behaves_like 'the credential binding precursor' context 'when binding from an app in a shared space' do - let(:other_space) { Space.make } - let(:service_instance) { ManagedServiceInstance.make(**si_details, space: other_space) } + let(:other_space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, **si_details, space: other_space) } before { service_instance.add_shared_space(space) } @@ -350,7 +350,7 @@ module V3 end context 'when the service is a volume service and service volume mounting is disabled' do - let(:service_instance) { ManagedServiceInstance.make(:volume_mount, **si_details) } + let(:service_instance) { create(:managed_service_instance, :volume_mount, **si_details) } it 'raises an error' do expect do @@ -360,7 +360,7 @@ module V3 end context 'when the service is a volume service and service volume mounting is enabled' do - let(:service_instance) { ManagedServiceInstance.make(:volume_mount, **si_details) } + let(:service_instance) { create(:managed_service_instance, :volume_mount, **si_details) } it 'does not raise an error' do expect do @@ -406,9 +406,9 @@ module V3 describe 'app specific behaviour' do context 'managed service instance' do - let(:service_offering) { Service.make(bindings_retrievable: true) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, bind: bind_response) } before do @@ -470,7 +470,7 @@ module V3 syslog_drain_url: 'https://drain.syslog.example.com/runlolarun' } end - let(:service_instance) { UserProvidedServiceInstance.make(**details) } + let(:service_instance) { create(:user_provided_service_instance, **details) } it_behaves_like 'the sync credential binding', ServiceBinding, true diff --git a/spec/unit/actions/service_credential_binding_delete_spec.rb b/spec/unit/actions/service_credential_binding_delete_spec.rb index 922dc9a08ea..ef38bba267a 100644 --- a/spec/unit/actions/service_credential_binding_delete_spec.rb +++ b/spec/unit/actions/service_credential_binding_delete_spec.rb @@ -9,7 +9,7 @@ module V3 let(:user_audit_info) { UserAuditInfo.new(user_email: 'run@lola.run', user_guid: user_guid) } let(:action) { described_class.new(type, user_audit_info) } let(:binding_event_repo) { instance_double(Repositories::ServiceGenericBindingEventRepository) } - let(:space) { Space.make } + let(:space) { create(:space) } before do allow(Repositories::ServiceGenericBindingEventRepository).to receive(:new).with(audit_event).and_return(binding_event_repo) @@ -42,7 +42,7 @@ module V3 RSpec.shared_examples 'managed service instance binding delete' do |klass| context 'managed service instance' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it_behaves_like 'service binding deletion', klass @@ -80,7 +80,7 @@ module V3 RSpec.shared_examples 'polling last operation' do |klass| describe '#poll' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:description) { Sham.description } let(:state) { 'in progress' } let(:last_operation_response) do @@ -195,7 +195,7 @@ module V3 describe 'app binding' do let(:audit_event) { 'service_binding' } let(:type) { :credential } - let(:app) { AppModel.make(space:) } + let(:app) { create(:app_model, space:) } let(:last_operation_type) { 'create' } let(:last_operation_state) { 'succeeded' } let(:binding) do @@ -206,7 +206,7 @@ module V3 end describe '#blocking_operation_in_progress?' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it_behaves_like 'blocking operation in progress' end @@ -215,7 +215,7 @@ module V3 it_behaves_like 'managed service instance binding delete', ServiceBinding context 'user-provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it_behaves_like 'successful credential binding delete', ServiceBinding end @@ -239,7 +239,7 @@ module V3 end describe '#blocking_operation_in_progress?' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it_behaves_like 'blocking operation in progress' end diff --git a/spec/unit/actions/service_credential_binding_key_create_spec.rb b/spec/unit/actions/service_credential_binding_key_create_spec.rb index 9e279b6b194..cbf733c915e 100644 --- a/spec/unit/actions/service_credential_binding_key_create_spec.rb +++ b/spec/unit/actions/service_credential_binding_key_create_spec.rb @@ -10,8 +10,8 @@ module V3 let(:audit_hash) { { some_info: 'some_value' } } let(:user_guid) { Sham.uaa_id } let(:user_audit_info) { UserAuditInfo.new(user_email: 'run@lola.run', user_guid: user_guid) } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:binding_details) {} let(:name) { 'test-key' } let(:binding_event_repo) { instance_double(Repositories::ServiceGenericBindingEventRepository) } @@ -55,7 +55,7 @@ module V3 end context 'when a key with the same name already exists' do - let!(:binding) { ServiceKey.make(service_instance: service_instance, name: message.name) } + let!(:binding) { create(:service_key, service_instance: service_instance, name: message.name) } context 'when no last key operation exists' do it 'raises an error' do @@ -142,7 +142,7 @@ module V3 end context 'user-provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it 'raises error' do expect { action.precursor(service_instance, message:) }.to raise_error( @@ -153,7 +153,7 @@ module V3 end context 'managed service instance' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } context 'validations' do context 'when plan is not bindable' do @@ -206,7 +206,7 @@ module V3 end context 'when the name is taken' do - let(:existing_service_key) { ServiceKey.make(service_instance: service_instance, name: message.name) } + let(:existing_service_key) { create(:service_key, service_instance: service_instance, name: message.name) } it 'raises an error' do expect { action.precursor(service_instance, message:) }.to raise_error( @@ -223,13 +223,13 @@ module V3 end context 'quotas' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } context 'when service key limit has been reached for the space' do before do - quota = SpaceQuotaDefinition.make(total_service_keys: 1, organization: org) + quota = create(:space_quota_definition, total_service_keys: 1, organization: org) quota.add_space(space) - ServiceKey.make(service_instance:) + create(:service_key, service_instance:) end it 'raises an error' do @@ -242,9 +242,9 @@ module V3 context 'when service key limit has been reached for the org' do before do - quotas = QuotaDefinition.make(total_service_keys: 1) + quotas = create(:quota_definition, total_service_keys: 1) quotas.add_organization(org) - ServiceKey.make(service_instance:) + create(:service_key, service_instance:) end it 'raises an error' do @@ -257,7 +257,7 @@ module V3 end context 'when creating keys with the same name concurrently' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it 'ensures one creation is successful and the other fails due to name conflict' do # First request, should succeed @@ -292,9 +292,9 @@ module V3 describe 'key specific behaviour' do context 'managed service instance' do - let(:service_offering) { Service.make(bindings_retrievable: true) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, bind: bind_response) } before do diff --git a/spec/unit/actions/service_instance_create_user_provided_spec.rb b/spec/unit/actions/service_instance_create_user_provided_spec.rb index 9d4e6d2d4af..71821d66e27 100644 --- a/spec/unit/actions/service_instance_create_user_provided_spec.rb +++ b/spec/unit/actions/service_instance_create_user_provided_spec.rb @@ -7,7 +7,7 @@ module CloudController RSpec.describe ServiceInstanceCreateUserProvided do subject(:action) { described_class.new(event_repository) } - let(:space) { Space.make } + let(:space) { create(:space) } let(:message) { ServiceInstanceCreateUserProvidedMessage.new(request) } let(:instance) { ServiceInstance.last } let(:name) { 'my-service-instance' } @@ -129,7 +129,7 @@ module CloudController describe 'when already taken' do it 'raises an error' do - ServiceInstance.make(name:, space:) + create(:service_instance, name:, space:) expect { action.create(message) }. to raise_error( diff --git a/spec/unit/actions/service_instance_purge_spec.rb b/spec/unit/actions/service_instance_purge_spec.rb index 07d77c2f931..d919d7148de 100644 --- a/spec/unit/actions/service_instance_purge_spec.rb +++ b/spec/unit/actions/service_instance_purge_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ServiceInstancePurge do - let(:user_audit_info) { UserAuditInfo.new(user_guid: User.make.guid, user_email: 'email') } + let(:user_audit_info) { UserAuditInfo.new(user_guid: create(:user).guid, user_email: 'email') } let(:event_repository) { Repositories::ServiceEventRepository.new(user_audit_info) } subject { described_class.new(event_repository) } @@ -29,8 +29,8 @@ module VCAP::CloudController end context 'when there are service bindings' do - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } it 'records the service binding delete event' do subject.purge(service_instance) @@ -51,10 +51,10 @@ module VCAP::CloudController end context 'when there are route bindings' do - let(:route_1) { Route.make(space: service_instance.space) } - let(:route_2) { Route.make(space: service_instance.space) } - let!(:route_binding_1) { RouteBinding.make(service_instance: service_instance, route: route_1) } - let!(:route_binding_2) { RouteBinding.make(service_instance: service_instance, route: route_2) } + let(:route_1) { create(:route, space: service_instance.space) } + let(:route_2) { create(:route, space: service_instance.space) } + let!(:route_binding_1) { create(:route_binding, service_instance: service_instance, route: route_1) } + let!(:route_binding_2) { create(:route_binding, service_instance: service_instance, route: route_2) } it 'records the service binding delete event' do subject.purge(service_instance) @@ -77,13 +77,13 @@ module VCAP::CloudController describe '#purge' do context 'managed service instance' do - let(:service_instance) { ManagedServiceInstance.make(:routing) } + let(:service_instance) { create(:managed_service_instance, :routing) } it_behaves_like 'delete service instance' context 'when there are service keys' do - let!(:service_key_1) { ServiceKey.make(service_instance:) } - let!(:service_key_2) { ServiceKey.make(service_instance:) } + let!(:service_key_1) { create(:service_key, service_instance:) } + let!(:service_key_2) { create(:service_key, service_instance:) } it 'records the service key delete event' do subject.purge(service_instance) @@ -104,7 +104,7 @@ module VCAP::CloudController end context 'when the service instance has shared spaces' do - let(:target_space) { Space.make } + let(:target_space) { create(:space) } before { service_instance.add_shared_space(target_space) } @@ -122,8 +122,8 @@ module VCAP::CloudController context 'user provided service instance' do let(:service_instance) do - si = UserProvidedServiceInstance.make(:routing) - si.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + si = create(:user_provided_service_instance, :routing) + si.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') si end diff --git a/spec/unit/actions/service_instance_share_spec.rb b/spec/unit/actions/service_instance_share_spec.rb index 7f1a080de5f..bc0ee64352f 100644 --- a/spec/unit/actions/service_instance_share_spec.rb +++ b/spec/unit/actions/service_instance_share_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe ServiceInstanceShare do let(:service_instance_share) { ServiceInstanceShare.new } - let(:service_instance) { ManagedServiceInstance.make } - let(:user_provided_service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } + let(:user_provided_service_instance) { create(:user_provided_service_instance) } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid-1', user_email: 'user@email.com') } - let(:target_space1) { Space.make } - let(:target_space2) { Space.make } + let(:target_space1) { create(:space) } + let(:target_space2) { create(:space) } describe '#create' do it 'creates share' do @@ -97,8 +97,8 @@ module VCAP::CloudController end context 'when a service instance already exists in the target space with the same name as the service being shared' do - let(:service_instance) { ManagedServiceInstance.make(name: 'banana') } - let!(:target_space_service_instance) { ManagedServiceInstance.make(name: 'banana', space: target_space1) } + let(:service_instance) { create(:managed_service_instance, name: 'banana') } + let!(:target_space_service_instance) { create(:managed_service_instance, name: 'banana', space: target_space1) } it 'raises an api error' do expect do @@ -109,8 +109,8 @@ module VCAP::CloudController end context 'when a service instance with the same name has already been shared with the target space' do - let(:service_instance1) { ManagedServiceInstance.make(name: 'banana') } - let(:service_instance2) { ManagedServiceInstance.make(name: 'banana') } + let(:service_instance1) { create(:managed_service_instance, name: 'banana') } + let(:service_instance2) { create(:managed_service_instance, name: 'banana') } before do service_instance_share.create(service_instance1, [Space.first(guid: target_space1.guid)], user_audit_info) @@ -164,8 +164,8 @@ module VCAP::CloudController end context 'when the service plan is inactive' do - let(:service_plan) { ServicePlan.make(active: false, name: 'service-plan-name') } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service_plan) { create(:service_plan, active: false, name: 'service-plan-name') } + let(:service_instance) { create(:managed_service_instance, service_plan:) } it 'raises an api error' do error_msg = 'The service instance could not be shared as the service-plan-name plan is inactive.' @@ -176,13 +176,13 @@ module VCAP::CloudController end context 'when the service plan is from a private space-scoped broker' do - let(:source_org) { Organization.make(name: 'source-org') } - let(:source_space) { Space.make(name: 'source-space', organization: source_org) } - let(:broker) { ServiceBroker.make(space: source_space) } - let(:service) { Service.make(service_broker: broker, label: 'space-scoped-service') } - let(:service_plan) { ServicePlan.make(service: service, name: 'my-plan') } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } - let(:target_space1) { Space.make(name: 'target-space', organization: source_org) } + let(:source_org) { create(:organization, name: 'source-org') } + let(:source_space) { create(:space, name: 'source-space', organization: source_org) } + let(:broker) { create(:service_broker, space: source_space) } + let(:service) { create(:service, service_broker: broker, label: 'space-scoped-service') } + let(:service_plan) { create(:service_plan, service: service, name: 'my-plan') } + let(:service_instance) { create(:managed_service_instance, service_plan:) } + let(:target_space1) { create(:space, name: 'target-space', organization: source_org) } it 'raises an api error' do error_msg = 'Access to service space-scoped-service and plan my-plan is not enabled in source-org/target-space.' @@ -193,8 +193,8 @@ module VCAP::CloudController end context 'when the service plan is not public' do - let(:service_plan) { ServicePlan.make(public: false) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service_plan) { create(:service_plan, public: false) } + let(:service_instance) { create(:managed_service_instance, service_plan:) } it 'raises an api error if service access disabled in both source and target' do error_msg = "Access to service #{service_instance.service.label} and plan #{service_instance.service_plan.name} is not " \ @@ -205,12 +205,12 @@ module VCAP::CloudController end context 'and when the source org has service plan access enabled but the target org has service plan access disabled' do - let(:source_org) { Organization.make } - let(:space) { Space.make(organization: source_org) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:, space:) } + let(:source_org) { create(:organization) } + let(:space) { create(:space, organization: source_org) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } before do - ServicePlanVisibility.make(organization: source_org, service_plan: service_instance.service_plan) + create(:service_plan_visibility, organization: source_org, service_plan: service_instance.service_plan) end it 'raises an api error' do @@ -223,12 +223,12 @@ module VCAP::CloudController end context 'and when the source org has service plan access disabled but the target org has service plan access enabled' do - let(:source_org) { Organization.make } - let(:space) { Space.make(organization: source_org) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:, space:) } + let(:source_org) { create(:organization) } + let(:space) { create(:space, organization: source_org) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } before do - ServicePlanVisibility.make(organization: target_space1.organization, service_plan: service_instance.service_plan) + create(:service_plan_visibility, organization: target_space1.organization, service_plan: service_instance.service_plan) end it 'creates the share' do @@ -238,13 +238,13 @@ module VCAP::CloudController end context 'and when source org has had service plan access enabled and the target org has service plan access enabled' do - let(:source_org) { Organization.make } - let(:space) { Space.make(organization: source_org) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:, space:) } + let(:source_org) { create(:organization) } + let(:space) { create(:space, organization: source_org) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } before do - ServicePlanVisibility.make(organization: target_space1.organization, service_plan: service_instance.service_plan) - ServicePlanVisibility.make(organization: source_org, service_plan: service_instance.service_plan) + create(:service_plan_visibility, organization: target_space1.organization, service_plan: service_instance.service_plan) + create(:service_plan_visibility, organization: source_org, service_plan: service_instance.service_plan) end it 'creates the share' do diff --git a/spec/unit/actions/service_instance_unshare_spec.rb b/spec/unit/actions/service_instance_unshare_spec.rb index 0bcbb221bfe..79140a0d900 100644 --- a/spec/unit/actions/service_instance_unshare_spec.rb +++ b/spec/unit/actions/service_instance_unshare_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe ServiceInstanceUnshare do let(:service_instance_unshare) { ServiceInstanceUnshare.new } - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:user_audit_info) { UserAuditInfo.new(user_guid: 'user-guid-1', user_email: 'user@email.com') } - let(:target_space) { Space.make } + let(:target_space) { create(:space) } let(:accepts_incomplete) { true } before do @@ -30,8 +30,8 @@ module VCAP::CloudController end context 'when the service plan is inactive' do - let(:service_plan) { ServicePlan.make(active: false) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service_plan) { create(:service_plan, active: false) } + let(:service_instance) { create(:managed_service_instance, service_plan:) } it 'unshares successfully' do service_instance_unshare.unshare(service_instance, target_space, user_audit_info) @@ -40,9 +40,9 @@ module VCAP::CloudController end context 'when bindings exist in the target space' do - let(:app) { AppModel.make(space: target_space, name: 'myapp') } + let(:app) { create(:app_model, space: target_space, name: 'myapp') } let(:delete_binding_action) { instance_double(V3::ServiceCredentialBindingDelete) } - let(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding) { create(:service_binding, app:, service_instance:) } before do allow(V3::ServiceCredentialBindingDelete).to receive(:new).with(:credential, user_audit_info) { delete_binding_action } @@ -66,12 +66,12 @@ module VCAP::CloudController end context 'when bindings have delete operations in progress' do - let!(:app_1) { AppModel.make(space: target_space, name: 'myapp1') } - let!(:app_2) { AppModel.make(space: target_space, name: 'myapp2') } - let!(:app_3) { AppModel.make(space: target_space, name: 'myapp3') } - let!(:service_binding_1) { ServiceBinding.make(app: app_1, service_instance: service_instance) } - let!(:service_binding_2) { ServiceBinding.make(app: app_2, service_instance: service_instance) } - let!(:service_binding_3) { ServiceBinding.make(app: app_3, service_instance: service_instance) } + let!(:app_1) { create(:app_model, space: target_space, name: 'myapp1') } + let!(:app_2) { create(:app_model, space: target_space, name: 'myapp2') } + let!(:app_3) { create(:app_model, space: target_space, name: 'myapp3') } + let!(:service_binding_1) { create(:service_binding, app: app_1, service_instance: service_instance) } + let!(:service_binding_2) { create(:service_binding, app: app_2, service_instance: service_instance) } + let!(:service_binding_3) { create(:service_binding, app: app_3, service_instance: service_instance) } before do allow(delete_binding_action).to receive(:delete).and_return({ finished: false }) @@ -102,7 +102,7 @@ module VCAP::CloudController err = StandardError.new('some-error') allow(delete_binding_action).to receive(:delete).with(service_binding).and_raise(err) - service_binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress', type: 'delete') + service_binding.service_binding_operation = create(:service_binding_operation, state: 'in progress', type: 'delete') end it 'returns only the error from delete action' do @@ -117,9 +117,9 @@ module VCAP::CloudController end context 'when bindings exist in the source space' do - let(:app) { AppModel.make(space: service_instance.space, name: 'myapp') } + let(:app) { create(:app_model, space: service_instance.space, name: 'myapp') } let(:delete_binding_action) { instance_double(ServiceBindingDelete) } - let(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding) { create(:service_binding, app:, service_instance:) } it 'unshares without deleting the binding' do allow(ServiceBindingDelete).to receive(:new).with(user_audit_info, accepts_incomplete) { delete_binding_action } diff --git a/spec/unit/actions/service_instance_update_user_provided_spec.rb b/spec/unit/actions/service_instance_update_user_provided_spec.rb index dfbbb888366..afea87950a6 100644 --- a/spec/unit/actions/service_instance_update_user_provided_spec.rb +++ b/spec/unit/actions/service_instance_update_user_provided_spec.rb @@ -34,26 +34,25 @@ module VCAP::CloudController end let(:original_name) { 'foo' } let!(:service_instance) do - si = VCAP::CloudController::UserProvidedServiceInstance.make( - guid: 'bommel', - name: original_name, - credentials: { - foo: 'bar', - baz: 'qux' - }, - syslog_drain_url: 'https://foo.com', - route_service_url: 'https://bar.com', - tags: %w[accounting mongodb] - ) - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') - si.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + si = create(:user_provided_service_instance, + guid: 'bommel', + name: original_name, + credentials: { + foo: 'bar', + baz: 'qux' + }, + syslog_drain_url: 'https://foo.com', + route_service_url: 'https://bar.com', + tags: %w[accounting mongodb]) + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + si.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') si end - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: service_instance, credentials: { foo: 'bar', baz: 'qux' }) } - let!(:route_binding) { VCAP::CloudController::RouteBinding.make(service_instance: service_instance, route_service_url: 'https://bar.com') } + let!(:service_binding) { create(:service_binding, service_instance: service_instance, credentials: { foo: 'bar', baz: 'qux' }) } + let!(:route_binding) { create(:route_binding, service_instance: service_instance, route_service_url: 'https://bar.com') } let(:message) { ServiceInstanceUpdateUserProvidedMessage.new(body) } it 'updates the values in the service instance in the database' do @@ -170,7 +169,7 @@ module VCAP::CloudController end describe 'when already taken' do - let!(:other_service_instance) { UserProvidedServiceInstance.make(name: 'already_taken', space: service_instance.space) } + let!(:other_service_instance) { create(:user_provided_service_instance, name: 'already_taken', space: service_instance.space) } let(:body) do { name: 'already_taken' } end diff --git a/spec/unit/actions/service_offering_delete_spec.rb b/spec/unit/actions/service_offering_delete_spec.rb index e1710c65e5c..4c98dc94ebd 100644 --- a/spec/unit/actions/service_offering_delete_spec.rb +++ b/spec/unit/actions/service_offering_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ServiceOfferingDelete do - let(:service_offering_model) { Service.make } + let(:service_offering_model) { create(:service) } it 'can delete service offerings' do subject.delete(service_offering_model) @@ -15,7 +15,7 @@ module VCAP::CloudController context 'when the service offering has a service plan' do before do - ServicePlan.make(service: service_offering_model) + create(:service_plan, service: service_offering_model) end it 'does not delete the service offering' do diff --git a/spec/unit/actions/service_plan_delete_spec.rb b/spec/unit/actions/service_plan_delete_spec.rb index 263d861a4ef..7b697b39914 100644 --- a/spec/unit/actions/service_plan_delete_spec.rb +++ b/spec/unit/actions/service_plan_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ServicePlanDelete do - let(:service_plan_model) { ServicePlan.make } + let(:service_plan_model) { create(:service_plan) } it 'can delete service plans' do subject.delete(service_plan_model) @@ -15,7 +15,7 @@ module VCAP::CloudController context 'when the service plan has a service instance' do before do - ManagedServiceInstance.make(service_plan: service_plan_model) + create(:managed_service_instance, service_plan: service_plan_model) end it 'does not delete the service plan' do diff --git a/spec/unit/actions/service_route_binding_create_spec.rb b/spec/unit/actions/service_route_binding_create_spec.rb index 8fade3fbaca..4b45bf292a6 100644 --- a/spec/unit/actions/service_route_binding_create_spec.rb +++ b/spec/unit/actions/service_route_binding_create_spec.rb @@ -6,8 +6,8 @@ module VCAP::CloudController module V3 RSpec.describe ServiceRouteBindingCreate do - let(:space) { Space.make } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:route) { create(:route, space:) } let(:route_service_url) { 'https://route_service_url.com' } let(:message) do @@ -52,8 +52,8 @@ module V3 end context 'route is internal' do - let(:domain) { SharedDomain.make(internal: true, name: 'my.domain.com') } - let(:route) { Route.make(domain:, space:) } + let(:domain) { create(:shared_domain, internal: true, name: 'my.domain.com') } + let(:route) { create(:route, domain:, space:) } it 'raises an error' do expect do @@ -66,7 +66,7 @@ module V3 end context 'route and service instance are in different spaces' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'raises an error' do expect do @@ -79,7 +79,7 @@ module V3 end context 'route binding already exists' do - let!(:binding) { RouteBinding.make(service_instance:, route:) } + let!(:binding) { create(:route_binding, service_instance:, route:) } context 'when no last service route binding operation exists' do it 'raises an error' do @@ -190,8 +190,8 @@ module V3 context 'route already bound to a different service instance' do it 'raises an error' do - other_instance = UserProvidedServiceInstance.make(space:, route_service_url:) - RouteBinding.make(service_instance: other_instance, route: route) + other_instance = create(:user_provided_service_instance, space:, route_service_url:) + create(:route_binding, service_instance: other_instance, route: route) expect do action.precursor(service_instance, route, message:) @@ -215,20 +215,20 @@ module V3 end context 'managed service instance' do - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } it_behaves_like '#precursor' context 'service instance not a route service' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it_behaves_like '#precursor for non-route service instance' end context 'service instance not bindable' do - let(:service_offering) { Service.make(bindable: false, requires: ['route_forwarding']) } + let(:service_offering) { create(:service, bindable: false, requires: ['route_forwarding']) } it 'raises an error' do expect do @@ -268,12 +268,12 @@ module V3 end context 'user-provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } it_behaves_like '#precursor' context 'service instance not a route service' do - let(:service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it_behaves_like '#precursor for non-route service instance' end @@ -330,7 +330,7 @@ module V3 let(:process) { ProcessModelFactory.make(space: route.space, state: 'STARTED') } it 'notifies diego' do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) action.bind(precursor) expect(messenger).to have_received(:send_desire_request).with(process) @@ -339,9 +339,9 @@ module V3 end context 'managed service instance' do - let(:service_offering) { Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, bind: bind_response) } before do @@ -369,7 +369,7 @@ module V3 context 'user-provided service instance' do let(:route_service_url) { 'https://route_service_url.com' } - let(:service_instance) { UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } it_behaves_like '#route bind' end @@ -384,9 +384,9 @@ module V3 describe 'route specific behaviour' do let(:messenger) { instance_double(Diego::Messenger, send_desire_request: nil) } - let(:service_offering) { Service.make(bindings_retrievable: true, requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, bindings_retrievable: true, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:broker_provided_operation) { Sham.guid } let(:bind_response) { { async: true, operation: broker_provided_operation } } let(:description) { Sham.description } @@ -453,7 +453,7 @@ module V3 let(:process) { ProcessModelFactory.make(space: route.space, state: 'STARTED') } it 'notifies diego' do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) action.poll(binding) expect(messenger).to have_received(:send_desire_request).with(process) diff --git a/spec/unit/actions/service_route_binding_delete_spec.rb b/spec/unit/actions/service_route_binding_delete_spec.rb index 526087c312c..3a23ac76abb 100644 --- a/spec/unit/actions/service_route_binding_delete_spec.rb +++ b/spec/unit/actions/service_route_binding_delete_spec.rb @@ -37,7 +37,7 @@ module V3 let(:process) { ProcessModelFactory.make(space: route.space, state: 'STARTED') } it 'notifies diego' do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) perform_action @@ -47,8 +47,8 @@ module V3 end RSpec.describe ServiceRouteBindingDelete do - let(:space) { Space.make } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:route) { create(:route, space:) } let(:route_service_url) { 'https://route_service_url.com' } let(:last_operation_type) { 'create' } let(:last_operation_state) { 'succeeded' } @@ -74,18 +74,18 @@ module V3 end describe '#blocking_operation_in_progress?' do - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } it_behaves_like 'blocking operation in progress' end describe '#delete' do context 'managed service instance' do - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } it_behaves_like 'service binding deletion', RouteBinding @@ -122,7 +122,7 @@ module V3 end context 'user-provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make(space:, route_service_url:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } let(:perform_action) { action.delete(binding) } it_behaves_like 'successful route binding delete' @@ -130,9 +130,9 @@ module V3 end describe '#poll' do - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:description) { Sham.description } let(:state) { 'in progress' } diff --git a/spec/unit/actions/services/locks/deleter_lock_spec.rb b/spec/unit/actions/services/locks/deleter_lock_spec.rb index 387b1f0adf7..fa0785bf186 100644 --- a/spec/unit/actions/services/locks/deleter_lock_spec.rb +++ b/spec/unit/actions/services/locks/deleter_lock_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::DeleterLock do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:deleter_lock) { DeleterLock.new service_instance } - let(:operation) { ServiceInstanceOperation.make(state: 'override me') } + let(:operation) { create(:service_instance_operation, state: 'override me') } # in MySQL, milliseconds will get truncated, so to make the test # deterministic we need to truncate them in the setup as well, @@ -38,10 +38,8 @@ module VCAP::CloudController describe 'locking again' do context 'when previous operation is not create in progress' do let(:operation) do - ServiceInstanceOperation.make( - state: 'in progress', - type: 'NOT create' - ) + create(:service_instance_operation, state: 'in progress', + type: 'NOT create') end it 'does not let you lock again' do @@ -53,10 +51,8 @@ module VCAP::CloudController context 'when previous operation is create in progress' do let(:operation) do - ServiceInstanceOperation.make( - state: 'in progress', - type: 'create' - ) + create(:service_instance_operation, state: 'in progress', + type: 'create') end it 'lets you lock again' do @@ -68,10 +64,8 @@ module VCAP::CloudController context 'when previous operation is create not in progress' do let(:operation) do - ServiceInstanceOperation.make( - state: 'NOT in progress', - type: 'create' - ) + create(:service_instance_operation, state: 'NOT in progress', + type: 'create') end it 'lets you lock again' do @@ -105,10 +99,8 @@ module VCAP::CloudController context 'when previous operation is create and NOT in progress' do let(:operation) do - ServiceInstanceOperation.make( - state: 'NOT in progress', - type: 'create' - ) + create(:service_instance_operation, state: 'NOT in progress', + type: 'create') end it 'sets the last operation of the service instance to delete failed' do @@ -123,11 +115,9 @@ module VCAP::CloudController context 'when previous operation is create and in progress' do let(:operation) do - ServiceInstanceOperation.make( - state: 'in progress', - type: 'create', - created_at: previous_operation_time - ) + create(:service_instance_operation, state: 'in progress', + type: 'create', + created_at: previous_operation_time) end it 'sets the last operation of the service instance to create in progress' do diff --git a/spec/unit/actions/services/locks/updater_lock_spec.rb b/spec/unit/actions/services/locks/updater_lock_spec.rb index 6935514ce7b..13533e48efc 100644 --- a/spec/unit/actions/services/locks/updater_lock_spec.rb +++ b/spec/unit/actions/services/locks/updater_lock_spec.rb @@ -2,9 +2,9 @@ module VCAP::CloudController RSpec.describe UpdaterLock do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:updater_lock) { UpdaterLock.new(service_instance) } - let(:operation) { ServiceInstanceOperation.make(state: 'override me') } + let(:operation) { create(:service_instance_operation, state: 'override me') } before do service_instance.service_instance_operation = operation @@ -37,7 +37,7 @@ module VCAP::CloudController context 'when the instance already has an operation in progress' do before do - service_instance.service_instance_operation = ServiceInstanceOperation.make(state: 'in progress') + service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') end it 'raises an AsyncServiceInstanceOperationInProgress error' do @@ -50,11 +50,11 @@ module VCAP::CloudController end context 'when the instance has a service binding with an operation in progress' do - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } before do - service_binding_2.service_binding_operation = ServiceBindingOperation.make(state: 'in progress') + service_binding_2.service_binding_operation = create(:service_binding_operation, state: 'in progress') end it 'raises an ServiceBindingLockedError error' do @@ -87,7 +87,7 @@ module VCAP::CloudController end describe 'unlocking synchronously' do - let(:new_service_plan) { ServicePlan.make } + let(:new_service_plan) { create(:service_plan) } it 'updates the last operation of the service instance to the new state' do updater_lock.synchronous_unlock! diff --git a/spec/unit/actions/services/service_instance_create_managed_spec.rb b/spec/unit/actions/services/service_instance_create_managed_spec.rb index 3b7676fc08a..52f8666988d 100644 --- a/spec/unit/actions/services/service_instance_create_managed_spec.rb +++ b/spec/unit/actions/services/service_instance_create_managed_spec.rb @@ -10,8 +10,8 @@ module VCAP::CloudController subject(:create_action) { ServiceInstanceCreate.new(event_repository, logger) } describe '#create' do - let(:space) { Space.make } - let(:service_plan) { ServicePlan.make } + let(:space) { create(:space) } + let(:service_plan) { create(:service_plan) } let(:request_attrs) do { 'space_guid' => space.guid, @@ -120,7 +120,7 @@ module VCAP::CloudController end context 'when the service plan contains maintenance_info' do - let(:service_plan) { ServicePlan.make(maintenance_info: { 'version' => '2.0' }) } + let(:service_plan) { create(:service_plan, maintenance_info: { 'version' => '2.0' }) } let(:request_attrs) do { 'space_guid' => space.guid, diff --git a/spec/unit/actions/services/service_instance_delete_spec.rb b/spec/unit/actions/services/service_instance_delete_spec.rb index e6ef686546d..d39cbc392ce 100644 --- a/spec/unit/actions/services/service_instance_delete_spec.rb +++ b/spec/unit/actions/services/service_instance_delete_spec.rb @@ -4,27 +4,27 @@ module VCAP::CloudController RSpec.describe ServiceInstanceDelete do let(:event_repository) { Repositories::ServiceEventRepository.new(UserAuditInfo.new(user_guid: user.guid, user_email: user_email)) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } subject(:service_instance_delete) { ServiceInstanceDelete.new(event_repository:) } describe '#delete' do - let!(:route_service_instance) { ManagedServiceInstance.make(:routing) } - let!(:managed_service_instance) { ManagedServiceInstance.make } - let!(:user_provided_service_instance) { UserProvidedServiceInstance.make } + let!(:route_service_instance) { create(:managed_service_instance, :routing) } + let!(:managed_service_instance) { create(:managed_service_instance) } + let!(:user_provided_service_instance) { create(:user_provided_service_instance) } - let!(:service_binding_1) { ServiceBinding.make(service_instance: managed_service_instance) } - let!(:service_binding_2) { ServiceBinding.make(service_instance: managed_service_instance) } - let!(:service_binding_3) { ServiceBinding.make(service_instance: user_provided_service_instance) } - let!(:service_binding_4) { ServiceBinding.make(service_instance: user_provided_service_instance) } + let!(:service_binding_1) { create(:service_binding, service_instance: managed_service_instance) } + let!(:service_binding_2) { create(:service_binding, service_instance: managed_service_instance) } + let!(:service_binding_3) { create(:service_binding, service_instance: user_provided_service_instance) } + let!(:service_binding_4) { create(:service_binding, service_instance: user_provided_service_instance) } - let!(:route_1) { Route.make(space: route_service_instance.space) } - let!(:route_2) { Route.make(space: route_service_instance.space) } - let!(:route_binding_1) { RouteBinding.make(route: route_1, service_instance: route_service_instance) } - let!(:route_binding_2) { RouteBinding.make(route: route_2, service_instance: route_service_instance) } + let!(:route_1) { create(:route, space: route_service_instance.space) } + let!(:route_2) { create(:route, space: route_service_instance.space) } + let!(:route_binding_1) { create(:route_binding, route: route_1, service_instance: route_service_instance) } + let!(:route_binding_2) { create(:route_binding, route: route_2, service_instance: route_service_instance) } - let!(:service_key) { ServiceKey.make(service_instance: managed_service_instance) } + let!(:service_key) { create(:service_key, service_instance: managed_service_instance) } let(:service_instance_dataset) { ServiceInstance.dataset } @@ -61,7 +61,7 @@ module VCAP::CloudController end it 'deletes associated labels' do - labels = service_instance_dataset.map { |si| ServiceInstanceLabelModel.make(resource_guid: si.guid, key_name: 'test', value: 'bommel') } + labels = service_instance_dataset.map { |si| create(:service_instance_label_model, resource_guid: si.guid, key_name: 'test', value: 'bommel') } expect do service_instance_delete.delete(service_instance_dataset) @@ -70,7 +70,7 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotations = service_instance_dataset.map { |si| ServiceInstanceAnnotationModel.make(resource_guid: si.guid, key_name: 'test', value: 'bommel') } + annotations = service_instance_dataset.map { |si| create(:service_instance_annotation_model, resource_guid: si.guid, key_name: 'test', value: 'bommel') } expect do service_instance_delete.delete(service_instance_dataset) @@ -79,7 +79,7 @@ module VCAP::CloudController end it 'deletes user provided service instances' do - user_provided_instance = UserProvidedServiceInstance.make + user_provided_instance = create(:user_provided_service_instance) errors, warnings = service_instance_delete.delete(service_instance_dataset) expect(errors).to be_empty expect(warnings).to be_empty @@ -94,7 +94,7 @@ module VCAP::CloudController end it 'unshares shared managed service instance and records only one unshare event' do - shared_to_space = Space.make + shared_to_space = create(:space) managed_service_instance.add_shared_space(shared_to_space) expect(managed_service_instance).to receive(:remove_shared_space) @@ -105,7 +105,7 @@ module VCAP::CloudController end it 'deletes the last operation for each managed service instance' do - instance_operation_1 = ServiceInstanceOperation.make(state: 'succeeded') + instance_operation_1 = create(:service_instance_operation, state: 'succeeded') route_service_instance.service_instance_operation = instance_operation_1 route_service_instance.save @@ -124,7 +124,7 @@ module VCAP::CloudController end context 'when accepts_incomplete is true' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } subject(:service_instance_delete) do ServiceInstanceDelete.new( @@ -144,7 +144,7 @@ module VCAP::CloudController end context 'when there is a service binding' do - let(:service_binding) { ServiceBinding.make(service_instance:) } + let(:service_binding) { create(:service_binding, service_instance:) } context 'when the broker responds asynchronously to the unbind call' do before do @@ -190,8 +190,8 @@ module VCAP::CloudController end context 'when there are multiple service bindings' do - let(:service_binding) { ServiceBinding.make(service_instance:) } - let(:service_binding2) { ServiceBinding.make(service_instance:) } + let(:service_binding) { create(:service_binding, service_instance:) } + let(:service_binding2) { create(:service_binding, service_instance:) } context 'when the broker responds asynchronously to all unbind calls' do before do @@ -234,9 +234,9 @@ module VCAP::CloudController end context 'when there is a binding with operation in progress' do - let(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_operation) { ServiceBindingOperation.make(state: 'in progress', service_binding_id: service_binding_1.id) } - let(:service_binding_2) { ServiceBinding.make(service_instance:) } + let(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_operation) { create(:service_binding_operation, state: 'in progress', service_binding_id: service_binding_1.id) } + let(:service_binding_2) { create(:service_binding, service_instance:) } before do stub_unbind(service_binding_1, accepts_incomplete: true, status: 202, body: {}.to_json) @@ -333,10 +333,9 @@ module VCAP::CloudController context 'when a service instance has an update operation in progress' do before do - route_service_instance.service_instance_operation = ServiceInstanceOperation.make( - state: 'in progress', - type: 'update' - ) + route_service_instance.service_instance_operation = create(:service_instance_operation, + state: 'in progress', + type: 'update') end it 'returns an operation in progress error for route and service bindings' do @@ -353,13 +352,12 @@ module VCAP::CloudController end context 'when a service instance has a create operation in progress' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } before do - service_instance.service_instance_operation = ServiceInstanceOperation.make( - state: 'in progress', - type: 'create' - ) + service_instance.service_instance_operation = create(:service_instance_operation, + state: 'in progress', + type: 'create') end context 'when service instance deprovision happen to be synchronous' do @@ -553,7 +551,7 @@ module VCAP::CloudController end it 'does not attempt to unshare the service instance' do - shared_to_space = Space.make + shared_to_space = create(:space) managed_service_instance.add_shared_space(shared_to_space) expect_any_instance_of(ServiceInstanceUnshare).not_to receive(:unshare) @@ -582,7 +580,7 @@ module VCAP::CloudController context 'when unsharing fails for a shared service instance' do before do - shared_to_space = Space.make + shared_to_space = create(:space) managed_service_instance.add_shared_space(shared_to_space) allow(managed_service_instance).to receive(:remove_shared_space).and_raise('Unsharing failed') diff --git a/spec/unit/actions/services/service_instance_read_spec.rb b/spec/unit/actions/services/service_instance_read_spec.rb index 8d8bcb9bd4c..f2a05134988 100644 --- a/spec/unit/actions/services/service_instance_read_spec.rb +++ b/spec/unit/actions/services/service_instance_read_spec.rb @@ -3,13 +3,13 @@ module VCAP::CloudController RSpec.describe ServiceInstanceRead do - let(:service) { Service.make } - let(:service_plan) { ServicePlan.make(service:) } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service) { create(:service) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, service_plan:) } describe '#fetch_parameters' do context 'when the service supports fetching instance parameters' do - let(:service) { Service.make(instances_retrievable: true) } + let(:service) { create(:service, instances_retrievable: true) } let(:fake_broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } before do @@ -63,7 +63,7 @@ module VCAP::CloudController end context 'when the service instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } before do service_instance.service_instance_operation = last_operation @@ -83,7 +83,7 @@ module VCAP::CloudController context 'when the service does not support fetching instance parameters' do context 'when the service instance is user provided' do - let(:service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it 'does not call the broker to fetch parameters' do expect(VCAP::Services::ServiceClientProvider).not_to receive(:provide) @@ -103,7 +103,7 @@ module VCAP::CloudController end context 'when the service has instances_retrievable set to false' do - let(:service) { Service.make(instances_retrievable: false) } + let(:service) { create(:service, instances_retrievable: false) } it 'does not call the broker to fetch parameters' do expect(VCAP::Services::ServiceClientProvider).not_to receive(:provide) @@ -122,7 +122,7 @@ module VCAP::CloudController end context 'and has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } before do service_instance.service_instance_operation = last_operation diff --git a/spec/unit/actions/services/service_instance_update_managed_spec.rb b/spec/unit/actions/services/service_instance_update_managed_spec.rb index 33ddc1574c4..374110c1c0d 100644 --- a/spec/unit/actions/services/service_instance_update_managed_spec.rb +++ b/spec/unit/actions/services/service_instance_update_managed_spec.rb @@ -13,17 +13,17 @@ module VCAP::CloudController services_event_repository: services_event_repo ) end - let(:service_broker) { ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:allow_context_updates) { false } - let(:service) { Service.make(plan_updateable: true, service_broker: service_broker, allow_context_updates: allow_context_updates) } - let(:old_service_plan) { ServicePlan.make(:v2, service:) } + let(:service) { create(:service, plan_updateable: true, service_broker: service_broker, allow_context_updates: allow_context_updates) } + let(:old_service_plan) { create(:service_plan, :v2, service:) } let(:new_plan_maintenance_info) {} - let(:new_service_plan) { ServicePlan.make(:v2, service: service, maintenance_info: new_plan_maintenance_info) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, maintenance_info: new_plan_maintenance_info) } let(:service_instance) do - ManagedServiceInstance.make(service_plan: old_service_plan, - maintenance_info: old_service_plan.maintenance_info, - tags: [], - name: 'Old name') + create(:managed_service_instance, service_plan: old_service_plan, + maintenance_info: old_service_plan.maintenance_info, + tags: [], + name: 'Old name') end let(:updated_name) { 'New name' } @@ -172,7 +172,7 @@ module VCAP::CloudController context 'arbitrary params are the only change' do let(:request_attrs) { { 'parameters' => updated_parameters } } let(:old_maintenance_info) { { 'version' => '5.0.0' } } - let(:old_service_plan) { ServicePlan.make(:v2, service: service, maintenance_info: old_maintenance_info) } + let(:old_service_plan) { create(:service_plan, :v2, service: service, maintenance_info: old_maintenance_info) } it 'sends a request to the broker updating only parameters' do service_instance_update.update_service_instance(service_instance, request_attrs) @@ -435,7 +435,7 @@ module VCAP::CloudController let(:broker_body) { {} } let(:stub_opts) { { status: 200, body: broker_body.to_json } } - let(:service_instance) { ManagedServiceInstance.make(maintenance_info: old_maintenance_info) } + let(:service_instance) { create(:managed_service_instance, maintenance_info: old_maintenance_info) } before do stub_update(service_instance, stub_opts) @@ -539,7 +539,7 @@ module VCAP::CloudController end context 'when the maintenance_info.version provided is the same as the one on the service instance' do - let(:service_instance) { ManagedServiceInstance.make(maintenance_info: new_maintenance_info.merge({ description: 'some description' })) } + let(:service_instance) { create(:managed_service_instance, maintenance_info: new_maintenance_info.merge({ description: 'some description' })) } it 'does NOT make a call to the broker' do service_instance_update.update_service_instance(service_instance, request_attrs) @@ -551,7 +551,7 @@ module VCAP::CloudController end context 'when maintenance_info.version provided and does not exist on service_instance' do - let(:service_instance) { ManagedServiceInstance.make(maintenance_info: nil) } + let(:service_instance) { create(:managed_service_instance, maintenance_info: nil) } it 'updates the broker with new maintenance_info' do service_instance_update.update_service_instance(service_instance, request_attrs) diff --git a/spec/unit/actions/services/service_key_create_spec.rb b/spec/unit/actions/services/service_key_create_spec.rb index fb1300b9e34..2cea50c5f2b 100644 --- a/spec/unit/actions/services/service_key_create_spec.rb +++ b/spec/unit/actions/services/service_key_create_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe ServiceKeyCreate do subject(:service_key_create) { ServiceKeyCreate.new(logger) } - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:service_binding_url_pattern) { %r{/v2/service_instances/#{service_instance.guid}/service_bindings/} } let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } @@ -35,7 +35,7 @@ module VCAP::CloudController context 'and the instance has another operation in progress' do it 'fails' do - service_instance.service_instance_operation = ServiceInstanceOperation.make state: 'in progress' + service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') service_key_create = ServiceKeyCreate.new(logger) _, errors = service_key_create.create(service_instance, key_attrs, {}) expect(errors.first).to be_instance_of CloudController::Errors::ApiError diff --git a/spec/unit/actions/services/service_key_delete_spec.rb b/spec/unit/actions/services/service_key_delete_spec.rb index 9e743c56279..4da35b4bf2e 100644 --- a/spec/unit/actions/services/service_key_delete_spec.rb +++ b/spec/unit/actions/services/service_key_delete_spec.rb @@ -24,11 +24,11 @@ def service_key_url_regex(opts={}) end describe '#delete' do - let!(:service_key_1) { ServiceKey.make } - let!(:service_key_2) { ServiceKey.make } + let!(:service_key_1) { create(:service_key) } + let!(:service_key_2) { create(:service_key) } let(:service_instance) { service_key_1.service_instance } let!(:service_key_dataset) { ServiceKey.dataset } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } @@ -52,7 +52,7 @@ def service_key_url_regex(opts={}) context 'when the instance has another operation in progress' do it 'raises an error' do - service_instance.service_instance_operation = ServiceInstanceOperation.make state: 'in progress' + service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') errors = service_key_delete.delete([service_key_1]) expect(errors.first).to be_instance_of CloudController::Errors::ApiError expect(errors.first.name).to eq('AsyncServiceInstanceOperationInProgress') @@ -71,7 +71,7 @@ def service_key_url_regex(opts={}) end context 'when one key deletion fails' do - let(:service_key_3) { ServiceKey.make } + let(:service_key_3) { create(:service_key) } before do allow(client).to receive(:unbind).with(service_key_1).and_return({}) diff --git a/spec/unit/actions/set_default_isolation_segment_spec.rb b/spec/unit/actions/set_default_isolation_segment_spec.rb index 07519aee2f6..5659e8b62f9 100644 --- a/spec/unit/actions/set_default_isolation_segment_spec.rb +++ b/spec/unit/actions/set_default_isolation_segment_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController RSpec.describe SetDefaultIsolationSegment do subject(:set_default_isolation_segment) { SetDefaultIsolationSegment.new } - let(:org) { VCAP::CloudController::Organization.make } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'JB') } + let(:org) { create(:organization) } + let(:isolation_segment) { create(:isolation_segment_model, name: 'JB') } let(:isolation_segment_guid) { isolation_segment.guid } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } let(:message) do @@ -68,7 +68,7 @@ module VCAP::CloudController context 'when the org already has an assigned isolation segment' do before do - other_iso_seg = IsolationSegmentModel.make + other_iso_seg = create(:isolation_segment_model) assigner.assign(other_iso_seg, [org]) org.update(default_isolation_segment_guid: other_iso_seg.guid) expect(org.default_isolation_segment_guid).not_to be_nil diff --git a/spec/unit/actions/sidecar_create_spec.rb b/spec/unit/actions/sidecar_create_spec.rb index 5bfe4b820a0..523a913f652 100644 --- a/spec/unit/actions/sidecar_create_spec.rb +++ b/spec/unit/actions/sidecar_create_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe SidecarCreate do - let(:app) { AppModel.make } - let!(:process) { ProcessModel.make(app: app, memory: 500, type: 'web') } + let(:app) { create(:app_model) } + let!(:process) { create(:process, app: app, memory: 500, type: 'web') } let(:params) do { name: 'sidecar-name', @@ -72,8 +72,8 @@ module VCAP::CloudController end context 'the memory allocated for the total sidecars exceeds the memory allocated for the associated process' do - let!(:first_sidecar) { SidecarModel.make(app_guid: app.guid, memory: 300) } - let!(:sptm) { SidecarProcessTypeModel.make(type: process.type, sidecar_guid: first_sidecar.guid, app_guid: app.guid) } + let!(:first_sidecar) { create(:sidecar_model, app_guid: app.guid, memory: 300) } + let!(:sptm) { create(:sidecar_process_type_model, type: process.type, sidecar_guid: first_sidecar.guid, app_guid: app.guid) } let(:params) do { name: 'sidecar-name', diff --git a/spec/unit/actions/sidecar_delete_spec.rb b/spec/unit/actions/sidecar_delete_spec.rb index 7eb0afd0079..d212dd87836 100644 --- a/spec/unit/actions/sidecar_delete_spec.rb +++ b/spec/unit/actions/sidecar_delete_spec.rb @@ -12,8 +12,8 @@ module VCAP::CloudController end it 'deletes associated sidecar process types' do - process_type1 = SidecarProcessTypeModel.make(sidecar: sidecar1) - process_type2 = SidecarProcessTypeModel.make(sidecar: sidecar2) + process_type1 = create(:sidecar_process_type_model, sidecar: sidecar1) + process_type2 = create(:sidecar_process_type_model, sidecar: sidecar2) expect do sidecar_delete @@ -22,9 +22,9 @@ module VCAP::CloudController end end - let!(:app) { AppModel.make } - let!(:sidecar1) { SidecarModel.make(app:) } - let!(:sidecar2) { SidecarModel.make(app:) } + let!(:app) { create(:app_model) } + let!(:sidecar1) { create(:sidecar_model, app:) } + let!(:sidecar2) { create(:sidecar_model, app:) } describe '#delete' do it_behaves_like 'SidecarDelete action' do diff --git a/spec/unit/actions/sidecar_synchronize_from_app_droplet_spec.rb b/spec/unit/actions/sidecar_synchronize_from_app_droplet_spec.rb index 2046775c98c..6c493c60611 100644 --- a/spec/unit/actions/sidecar_synchronize_from_app_droplet_spec.rb +++ b/spec/unit/actions/sidecar_synchronize_from_app_droplet_spec.rb @@ -4,12 +4,11 @@ module VCAP::CloudController RSpec.describe SidecarSynchronizeFromAppDroplet do describe '#synchronize' do - let(:app) { AppModel.make(droplet: droplet, name: 'my_app', sidecar_guids: app_sidecars.map(&:guid)) } + let(:app) { create(:app_model, droplet: droplet, name: 'my_app', sidecar_guids: app_sidecars.map(&:guid)) } let(:droplet) do - DropletModel.make( - state: DropletModel::STAGED_STATE, - sidecars: droplet_sidecars - ) + create(:droplet_model, + state: DropletModel::STAGED_STATE, + sidecars: droplet_sidecars) end let(:app_sidecars) { [] } @@ -33,10 +32,9 @@ module VCAP::CloudController context 'when the droplet has no sidecars' do let(:droplet) do - DropletModel.make( - state: DropletModel::STAGED_STATE, - sidecars: nil - ) + create(:droplet_model, + state: DropletModel::STAGED_STATE, + sidecars: nil) end it 'neither errors nor creates sidecars' do @@ -52,8 +50,8 @@ module VCAP::CloudController context 'the app has both origin-buildpack and origin-user sidecars' do let(:app_sidecars) do [ - SidecarModel.make(name: 'user-sidecar', origin: SidecarModel::ORIGIN_USER), - SidecarModel.make(name: 'buildpack-sidecar', origin: SidecarModel::ORIGIN_BUILDPACK) + create(:sidecar_model, name: 'user-sidecar', origin: SidecarModel::ORIGIN_USER), + create(:sidecar_model, name: 'buildpack-sidecar', origin: SidecarModel::ORIGIN_BUILDPACK) ] end @@ -76,7 +74,7 @@ module VCAP::CloudController context 'but a droplet sidecar name matches an user-origin sidecar name' do let(:app_sidecars) do [ - SidecarModel.make(name: 'conflicted-sidecar', command: 'previous-sidecar-command', origin: SidecarModel::ORIGIN_USER) + create(:sidecar_model, name: 'conflicted-sidecar', command: 'previous-sidecar-command', origin: SidecarModel::ORIGIN_USER) ] end @@ -100,7 +98,7 @@ module VCAP::CloudController context 'but a droplet sidecar name matches a buildpack-origin sidecar name' do let(:app_sidecars) do [ - SidecarModel.make(name: 'buildpack-sidecar', command: 'previous-buildpack-command', origin: SidecarModel::ORIGIN_BUILDPACK) + create(:sidecar_model, name: 'buildpack-sidecar', command: 'previous-buildpack-command', origin: SidecarModel::ORIGIN_BUILDPACK) ] end diff --git a/spec/unit/actions/sidecar_update_spec.rb b/spec/unit/actions/sidecar_update_spec.rb index 75188e5340e..5323efe98c3 100644 --- a/spec/unit/actions/sidecar_update_spec.rb +++ b/spec/unit/actions/sidecar_update_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe SidecarUpdate do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:params) do { name: 'sidecar-name', @@ -14,17 +14,16 @@ module VCAP::CloudController end let(:message) { SidecarUpdateMessage.new(params) } let(:sidecar) do - SidecarModel.make( - name: 'my_sidecar', - command: 'rackup', - app: app, - memory: 123 - ) + create(:sidecar_model, + name: 'my_sidecar', + command: 'rackup', + app: app, + memory: 123) end - let!(:process) { ProcessModel.make(app: app, memory: 500, type: 'other_worker') } + let!(:process) { create(:process, app: app, memory: 500, type: 'other_worker') } before do - SidecarProcessTypeModel.make(type: 'other_worker', sidecar: sidecar) + create(:sidecar_process_type_model, type: 'other_worker', sidecar: sidecar) end describe '.update' do @@ -79,7 +78,7 @@ module VCAP::CloudController end context 'memory allocation' do - let!(:new_worker_process) { ProcessModel.make(app: app, memory: 100, type: 'worker') } + let!(:new_worker_process) { create(:process, app: app, memory: 100, type: 'worker') } it 'raises InvalidSidecar when the memory allocated for the sidecar exceeds the memory allocated for the associated process' do expect do @@ -128,8 +127,8 @@ module VCAP::CloudController end context 'the memory allocated for the total sidecars exceeds the memory allocated for the associated process' do - let!(:first_sidecar) { SidecarModel.make(app_guid: app.guid, memory: 300) } - let!(:sptm) { SidecarProcessTypeModel.make(type: process.type, sidecar_guid: first_sidecar.guid, app_guid: app.guid) } + let!(:first_sidecar) { create(:sidecar_model, app_guid: app.guid, memory: 300) } + let!(:sptm) { create(:sidecar_process_type_model, type: process.type, sidecar_guid: first_sidecar.guid, app_guid: app.guid) } let(:params) do { memory_in_mb: 300 @@ -153,7 +152,7 @@ module VCAP::CloudController process_types: ['totes_new'] } end - let!(:totes_new_process) { ProcessModel.make(app: app, memory: 500, type: 'totes_new') } + let!(:totes_new_process) { create(:process, app: app, memory: 500, type: 'totes_new') } it 'raises InvalidSidecar' do expect do @@ -167,12 +166,11 @@ module VCAP::CloudController context 'the memory allocated to the sidecar exceeds half the memory allocated for the newly associated process' do let(:sidecar) do - SidecarModel.make( - name: 'my_sidecar', - command: 'rackup', - app: app, - memory: 250 - ) + create(:sidecar_model, + name: 'my_sidecar', + command: 'rackup', + app: app, + memory: 250) end let(:params) do @@ -181,8 +179,8 @@ module VCAP::CloudController } end - let!(:process) { ProcessModel.make(app: app, memory: 500, type: 'other_worker') } - let!(:new_process) { ProcessModel.make(app: app, memory: 500, type: 'other_worker') } + let!(:process) { create(:process, app: app, memory: 500, type: 'other_worker') } + let!(:new_process) { create(:process, app: app, memory: 500, type: 'other_worker') } it 'its only counted once for all processes and succeeds' do SidecarUpdate.update(sidecar, message) diff --git a/spec/unit/actions/space_create_spec.rb b/spec/unit/actions/space_create_spec.rb index c1547d30001..5119312dccd 100644 --- a/spec/unit/actions/space_create_spec.rb +++ b/spec/unit/actions/space_create_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe SpaceCreate do describe 'create' do - let(:org) { VCAP::CloudController::Organization.make } + let(:org) { create(:organization) } let(:relationships) { { organization: { data: { guid: org.guid } } } } let(:user_audit_info) { UserAuditInfo.new(user_email: 'gooid', user_guid: 'amelia@cats.com', user_name: 'amelia') } diff --git a/spec/unit/actions/space_delete_spec.rb b/spec/unit/actions/space_delete_spec.rb index 9fe2c7d8fa4..f09e6c59980 100644 --- a/spec/unit/actions/space_delete_spec.rb +++ b/spec/unit/actions/space_delete_spec.rb @@ -8,12 +8,12 @@ module VCAP::CloudController let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } describe '#delete' do - let!(:space) { Space.make(name: 'space-1') } - let!(:space_2) { Space.make(name: 'space-2') } - let!(:app) { AppModel.make(space_guid: space.guid) } + let!(:space) { create(:space, name: 'space-1') } + let!(:space_2) { create(:space, name: 'space-2') } + let!(:app) { create(:app_model, space: space) } let(:space_dataset) { Space.dataset } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } before do @@ -63,7 +63,7 @@ module VCAP::CloudController end describe 'service instances' do - let!(:service_instance) { ManagedServiceInstance.make(space: space_2) } + let!(:service_instance) { create(:managed_service_instance, space: space_2) } before do stub_deprovision(service_instance, accepts_incomplete: true) @@ -91,13 +91,13 @@ module VCAP::CloudController end context 'when deletion of service instances fail' do - let!(:space_3) { Space.make(name: 'space-3') } - let!(:space_4) { Space.make(name: 'space-4') } + let!(:space_3) { create(:space, name: 'space-3') } + let!(:space_4) { create(:space, name: 'space-4') } - let!(:service_instance_1) { ManagedServiceInstance.make(space: space_3) } # deletion fail - let!(:service_instance_2) { ManagedServiceInstance.make(space: space_3) } # deletion fail - let!(:service_instance_3) { ManagedServiceInstance.make(space: space_3) } # deletion succeeds - let!(:service_instance_4) { ManagedServiceInstance.make(space: space_4) } # deletion fail + let!(:service_instance_1) { create(:managed_service_instance, space: space_3) } # deletion fail + let!(:service_instance_2) { create(:managed_service_instance, space: space_3) } # deletion fail + let!(:service_instance_3) { create(:managed_service_instance, space: space_3) } # deletion succeeds + let!(:service_instance_4) { create(:managed_service_instance, space: space_4) } # deletion fail before do stub_deprovision(service_instance_1, accepts_incomplete: true, status: 500) @@ -145,7 +145,7 @@ module VCAP::CloudController end context 'when unsharing a service instance that has been shared to the space fails' do - let(:other_space) { Space.make } + let(:other_space) { create(:space) } let(:fake_shared_service) { instance_double(ManagedServiceInstance) } before do @@ -174,7 +174,7 @@ module VCAP::CloudController end context 'when deletion of a service instance is "in progress"' do - let!(:service_instance) { ManagedServiceInstance.make(space: space_2) } + let!(:service_instance) { create(:managed_service_instance, space: space_2) } before do stub_deprovision(service_instance, accepts_incomplete: true, status: 202) @@ -203,7 +203,7 @@ module VCAP::CloudController end context 'and there are multiple service instances deprovisioned with accepts_incomplete' do - let!(:service_instance_2) { ManagedServiceInstance.make(space:) } # deletion fail + let!(:service_instance_2) { create(:managed_service_instance, space:) } # deletion fail before do stub_deprovision(service_instance_2, accepts_incomplete: true, status: 202) @@ -224,11 +224,11 @@ module VCAP::CloudController end context 'when private brokers are associated with the space' do - let!(:service_to_be_deleted) { VCAP::CloudController::Service.make(service_broker: broker_to_be_deleted) } - let!(:service_plan_to_be_deleted) { VCAP::CloudController::ServicePlan.make(service: service_to_be_deleted) } - let!(:broker_to_be_deleted) { VCAP::CloudController::ServiceBroker.make(space_guid: space.guid) } - let!(:broker_to_be_deleted2) { VCAP::CloudController::ServiceBroker.make(space_guid: space.guid) } - let!(:service_instance_to_be_deleted) { ManagedServiceInstance.make(space: space, service_plan: service_plan_to_be_deleted) } + let!(:service_to_be_deleted) { create(:service, service_broker: broker_to_be_deleted) } + let!(:service_plan_to_be_deleted) { create(:service_plan, service: service_to_be_deleted) } + let!(:broker_to_be_deleted) { create(:service_broker, space_id: space.id) } + let!(:broker_to_be_deleted2) { create(:service_broker, space_id: space.id) } + let!(:service_instance_to_be_deleted) { create(:managed_service_instance, space: space, service_plan: service_plan_to_be_deleted) } before do stub_deprovision(service_instance_to_be_deleted, accepts_incomplete: true) @@ -286,8 +286,8 @@ module VCAP::CloudController end describe 'routes and route mappings' do - let!(:process) { ProcessModel.make app: app, type: 'web' } - let!(:route) { Route.make space: } + let!(:process) { create(:process_model, app: app, type: 'web') } + let!(:route) { create(:route, space:) } it 'deletes routes in the space (by way of model association dependency)' do expect(route.exists?).to be true @@ -299,18 +299,16 @@ module VCAP::CloudController describe 'label deletion' do let!(:space_label) do - VCAP::CloudController::SpaceLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: space.guid - ) + create(:space_label_model, + key_name: 'release', + value: 'stable', + resource_guid: space.guid) end let!(:space2_label) do - VCAP::CloudController::SpaceLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: space_2.guid - ) + create(:space_label_model, + key_name: 'release', + value: 'stable', + resource_guid: space_2.guid) end it 'deletes associated space labels' do @@ -322,7 +320,7 @@ module VCAP::CloudController end describe 'roles' do - let(:user_with_role) { User.make } + let(:user_with_role) { create(:user) } before do space.organization.add_user(user_with_role) diff --git a/spec/unit/actions/space_delete_unmapped_routes_spec.rb b/spec/unit/actions/space_delete_unmapped_routes_spec.rb index 504baebc8bb..cc1b11976db 100644 --- a/spec/unit/actions/space_delete_unmapped_routes_spec.rb +++ b/spec/unit/actions/space_delete_unmapped_routes_spec.rb @@ -9,17 +9,17 @@ module VCAP::CloudController let(:user_email) { 'cool_dude@hoopy_frood.com' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:app) { AppModel.make(space:) } - let(:domain) { PrivateDomain.make(owning_organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app) { create(:app_model, space:) } + let(:domain) { create(:private_domain, owning_organization: org) } describe '#delete' do context 'when there are some mapped routes and some unmapped routes' do - let!(:mapped_route) { Route.make(domain: domain, space: space, host: 'mapped') } - let!(:destination) { RouteMappingModel.make(app: app, route: mapped_route) } - let!(:unmapped_route_1) { Route.make(domain: domain, space: space, host: 'unmapped1') } - let!(:unmapped_route_2) { Route.make(domain: domain, space: space, host: 'unmapped2') } + let!(:mapped_route) { create(:route, domain: domain, space: space, host: 'mapped') } + let!(:destination) { create(:route_mapping_model, app: app, route: mapped_route) } + let!(:unmapped_route_1) { create(:route, domain: domain, space: space, host: 'unmapped1') } + let!(:unmapped_route_2) { create(:route, domain: domain, space: space, host: 'unmapped2') } it 'deletes only unmapped routes' do expect do @@ -32,11 +32,11 @@ module VCAP::CloudController end context 'when there are some bound routes and some unbound routes' do - let!(:bound_route) { Route.make(domain: domain, space: space, host: 'bound') } - let!(:service_instance) { ManagedServiceInstance.make(:routing, space:) } - let!(:_) { RouteBinding.make(service_instance: service_instance, route: bound_route) } - let!(:unbound_route_1) { Route.make(domain: domain, space: space, host: 'unbound1') } - let!(:unbound_route_2) { Route.make(domain: domain, space: space, host: 'unbound2') } + let!(:bound_route) { create(:route, domain: domain, space: space, host: 'bound') } + let!(:service_instance) { create(:managed_service_instance, :routing, space:) } + let!(:_) { create(:route_binding, service_instance: service_instance, route: bound_route) } + let!(:unbound_route_1) { create(:route, domain: domain, space: space, host: 'unbound1') } + let!(:unbound_route_2) { create(:route, domain: domain, space: space, host: 'unbound2') } it 'deletes only unbound routes' do expect do @@ -49,19 +49,19 @@ module VCAP::CloudController end context 'when there is a mix of bound and mapped routes' do - let!(:service_instance) { ManagedServiceInstance.make(:routing, space:) } + let!(:service_instance) { create(:managed_service_instance, :routing, space:) } - let!(:bound_and_mapped_route) { Route.make(domain: domain, space: space, host: 'bound', path: '/mapped') } - let!(:_0) { RouteBinding.make(service_instance: service_instance, route: bound_and_mapped_route) } - let!(:_1) { RouteMappingModel.make(app: app, route: bound_and_mapped_route) } + let!(:bound_and_mapped_route) { create(:route, domain: domain, space: space, host: 'bound', path: '/mapped') } + let!(:_0) { create(:route_binding, service_instance: service_instance, route: bound_and_mapped_route) } + let!(:_1) { create(:route_mapping_model, app: app, route: bound_and_mapped_route) } - let!(:bound_and_unmapped_route) { Route.make(domain: domain, space: space, host: 'bound', path: '/unmapped') } - let!(:_2) { RouteBinding.make(service_instance: service_instance, route: bound_and_unmapped_route) } + let!(:bound_and_unmapped_route) { create(:route, domain: domain, space: space, host: 'bound', path: '/unmapped') } + let!(:_2) { create(:route_binding, service_instance: service_instance, route: bound_and_unmapped_route) } - let!(:unbound_and_unmapped_route) { Route.make(domain: domain, space: space, host: 'unbound', path: '/unmapped') } + let!(:unbound_and_unmapped_route) { create(:route, domain: domain, space: space, host: 'unbound', path: '/unmapped') } - let!(:unbound_and_mapped_route) { Route.make(domain: domain, space: space, host: 'unbound', path: '/mapped') } - let!(:_3) { RouteMappingModel.make(app: app, route: unbound_and_mapped_route) } + let!(:unbound_and_mapped_route) { create(:route, domain: domain, space: space, host: 'unbound', path: '/mapped') } + let!(:_3) { create(:route_mapping_model, app: app, route: unbound_and_mapped_route) } it 'deletes only BOTH unmapped and unbound routes' do expect do @@ -73,9 +73,9 @@ module VCAP::CloudController end context 'when the unmapped routes have labels and annotations' do - let!(:unmapped_route_1) { Route.make(domain: domain, space: space, host: 'unmapped1') } - let!(:label_1) { RouteLabelModel.make(key_name: 'k1', value: 'v1', resource_guid: unmapped_route_1.guid) } - let!(:annot_1) { RouteAnnotationModel.make(key_name: 'k1', value: 'v1', resource_guid: unmapped_route_1.guid) } + let!(:unmapped_route_1) { create(:route, domain: domain, space: space, host: 'unmapped1') } + let!(:label_1) { create(:route_label_model, key_name: 'k1', value: 'v1', resource_guid: unmapped_route_1.guid) } + let!(:annot_1) { create(:route_annotation_model, key_name: 'k1', value: 'v1', resource_guid: unmapped_route_1.guid) } it 'deletes the labels, annotations and routes' do expect do diff --git a/spec/unit/actions/space_diff_manifest_spec.rb b/spec/unit/actions/space_diff_manifest_spec.rb index f0ba6c96154..d5d5afd2d39 100644 --- a/spec/unit/actions/space_diff_manifest_spec.rb +++ b/spec/unit/actions/space_diff_manifest_spec.rb @@ -41,13 +41,13 @@ module VCAP::CloudController end let(:app_manifests) { default_manifest['applications'] } - let(:space) { Space.make } - let(:app1_model) { AppModel.make(name: 'app-1', space: space) } - let!(:process1) { ProcessModel.make(app: app1_model) } - let!(:process2) { ProcessModel.make(app: app1_model, type: 'worker') } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make } - let(:route) { VCAP::CloudController::Route.make(domain: shared_domain, space: space, host: 'a_host') } - let!(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: app1_model, process_type: process1.type, route: route) } + let(:space) { create(:space) } + let(:app1_model) { create(:app_model, name: 'app-1', space: space) } + let!(:process1) { create(:process_model, app: app1_model) } + let!(:process2) { create(:process_model, app: app1_model, type: 'worker') } + let(:shared_domain) { create(:shared_domain) } + let(:route) { create(:route, domain: shared_domain, space: space, host: 'a_host') } + let!(:route_mapping) { create(:route_mapping_model, app: app1_model, process_type: process1.type, route: route) } subject { SpaceDiffManifest.generate_diff(app_manifests, space) } @@ -99,7 +99,7 @@ module VCAP::CloudController end context 'when processes do not change' do - let!(:process1) { ProcessModel.make(app: app1_model, memory: 256) } + let!(:process1) { create(:process_model, app: app1_model, memory: 256) } before do default_manifest['applications'][0]['processes'][0]['memory'] = '256M' @@ -194,8 +194,8 @@ module VCAP::CloudController end context 'when changing sidecar properties on an existing sidecar' do - let!(:sidecar) { SidecarModel.make(app: app1_model, memory: 500, name: 'sidecar1') } - let!(:sidecar_process_type_model) { SidecarProcessTypeModel.make(type: 'web', sidecar: sidecar) } + let!(:sidecar) { create(:sidecar_model, app: app1_model, memory: 500, name: 'sidecar1') } + let!(:sidecar_process_type_model) { create(:sidecar_process_type_model, type: 'web', sidecar: sidecar) } before do default_manifest['applications'][0]['sidecars'] = [ @@ -329,9 +329,9 @@ module VCAP::CloudController ] } end - let!(:sidecar_process_model) { ProcessModel.make(app: app1_model) } - let!(:sidecar_model) { SidecarModel.make(app: app1_model, memory: 2048) } - let!(:sidecar_process_type_model) { SidecarProcessTypeModel.make(type: sidecar_process_model.type, sidecar: sidecar_model) } + let!(:sidecar_process_model) { create(:process_model, app: app1_model) } + let!(:sidecar_model) { create(:sidecar_model, app: app1_model, memory: 2048) } + let!(:sidecar_process_type_model) { create(:sidecar_process_type_model, type: sidecar_process_model.type, sidecar: sidecar_model) } it 'returns an empty diff if the field is equivalent' do expect(subject).to eq([]) diff --git a/spec/unit/actions/space_quota_apply_spec.rb b/spec/unit/actions/space_quota_apply_spec.rb index 83c795d0347..365d7cefa4a 100644 --- a/spec/unit/actions/space_quota_apply_spec.rb +++ b/spec/unit/actions/space_quota_apply_spec.rb @@ -8,16 +8,16 @@ module VCAP::CloudController let(:all_spaces_visible) { false } describe '#apply' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } subject { SpaceQuotaApply.new(user_audit_info) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:space_quota) { create(:space_quota_definition, organization: org) } let(:message) do VCAP::CloudController::SpaceQuotaApplyMessage.new({ data: [{ guid: space.guid }] @@ -95,9 +95,9 @@ module VCAP::CloudController context 'when trying to set a log rate limit and there are apps with unlimited log rates' do let(:visible_space_guids) { [space.guid] } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'name1', space: space) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org, log_rate_limit: 2000) } + let(:app_model) { create(:app_model, name: 'name1', space: space) } + let!(:process_model) { create(:process_model, app: app_model, log_rate_limit: -1) } + let(:space_quota) { create(:space_quota_definition, organization: org, log_rate_limit: 2000) } it 'raises an error' do expect do @@ -109,7 +109,7 @@ module VCAP::CloudController end context "when the space is outside the space quota's org" do - let(:other_space) { VCAP::CloudController::Space.make } + let(:other_space) { create(:space) } let(:invalid_space_guid) { other_space.guid } let(:message_with_invalid_space_guid) do @@ -138,7 +138,7 @@ module VCAP::CloudController end context 'when applying quota to multiple spaces' do - let(:space2) { VCAP::CloudController::Space.make(organization: org) } + let(:space2) { create(:space, organization: org) } let(:visible_space_guids) { [space.guid, space2.guid] } let(:message) do VCAP::CloudController::SpaceQuotaApplyMessage.new({ diff --git a/spec/unit/actions/space_quota_delete_spec.rb b/spec/unit/actions/space_quota_delete_spec.rb index 56784a35ac5..d0906e5d9b1 100644 --- a/spec/unit/actions/space_quota_delete_spec.rb +++ b/spec/unit/actions/space_quota_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe SpaceQuotaDeleteAction do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } @@ -11,8 +11,8 @@ module VCAP::CloudController subject(:space_quota_delete) { SpaceQuotaDeleteAction.new(user_audit_info) } describe '#delete' do - let(:org) { Organization.make } - let!(:quota) { SpaceQuotaDefinition.make(organization: org) } + let(:org) { create(:organization) } + let!(:quota) { create(:space_quota_definition, organization: org) } it 'deletes the space quota' do expect do diff --git a/spec/unit/actions/space_quota_unapply_spec.rb b/spec/unit/actions/space_quota_unapply_spec.rb index 92985aa8dda..f279371f484 100644 --- a/spec/unit/actions/space_quota_unapply_spec.rb +++ b/spec/unit/actions/space_quota_unapply_spec.rb @@ -4,16 +4,16 @@ module VCAP::CloudController RSpec.describe SpaceQuotaUnapply do describe '#unapply' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } subject { SpaceQuotaUnapply.new(user_audit_info) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: org) } - let!(:space) { VCAP::CloudController::Space.make(organization: org, space_quota_definition: space_quota) } + let(:org) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, organization: org) } + let!(:space) { create(:space, organization: org, space_quota_definition: space_quota) } context 'when removing a quota from a space' do it 'disassociates the given space from the quota' do diff --git a/spec/unit/actions/space_quota_update_spec.rb b/spec/unit/actions/space_quota_update_spec.rb index 7721b0fae1b..ebae8f299c2 100644 --- a/spec/unit/actions/space_quota_update_spec.rb +++ b/spec/unit/actions/space_quota_update_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe SpaceQuotaUpdate do - let(:org) { VCAP::CloudController::Organization.make } - let(:user) { User.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } @@ -13,11 +13,10 @@ module VCAP::CloudController describe 'update' do context 'when updating a space quota' do let!(:space_quota) do - VCAP::CloudController::SpaceQuotaDefinition.make( - name: 'space_quota_name', - non_basic_services_allowed: true, - organization: org - ) + create(:space_quota_definition, + name: 'space_quota_name', + non_basic_services_allowed: true, + organization: org) end let(:message) do @@ -108,7 +107,7 @@ module VCAP::CloudController context 'when it is a uniqueness error' do let(:name) { 'victoria_space_quota' } - let!(:victoria_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(name: name, organization: org) } + let!(:victoria_space_quota) { create(:space_quota_definition, name: name, organization: org) } let(:update_message) { VCAP::CloudController::SpaceQuotaUpdateMessage.new(name:) } it 'raises a human-friendly error' do @@ -122,9 +121,9 @@ module VCAP::CloudController context 'when there are affected processes that have an unlimited log rate limit' do def create_spaces_with_unlimited_log_rate_process(count) count.downto(1) do |i| - space = VCAP::CloudController::Space.make(guid: "space-guid-#{i}", name: "space-name-#{i}", organization: org, space_quota_definition: space_quota) - app_model = VCAP::CloudController::AppModel.make(name: "app-#{i}", space: space) - VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) + space = create(:space, guid: "space-guid-#{i}", name: "space-name-#{i}", organization: org, space_quota_definition: space_quota) + app_model = create(:app_model, name: "app-#{i}", space: space) + create(:process, app: app_model, log_rate_limit: -1) end end @@ -168,11 +167,11 @@ def create_spaces_with_unlimited_log_rate_process(count) end context 'and there is more than one affected process within a space' do - let!(:org) { VCAP::CloudController::Organization.make(guid: 'org-guid', name: 'org-name') } - let!(:space) { VCAP::CloudController::Space.make(guid: 'space-guid', name: 'space-name', organization: org, space_quota_definition: space_quota) } - let!(:app_model) { VCAP::CloudController::AppModel.make(name: 'app', space: space) } - let!(:process_1) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } - let!(:process_2) { VCAP::CloudController::ProcessModel.make(app: app_model, log_rate_limit: -1) } + let!(:org) { create(:organization, guid: 'org-guid', name: 'org-name') } + let!(:space) { create(:space, guid: 'space-guid', name: 'space-name', organization: org, space_quota_definition: space_quota) } + let!(:app_model) { create(:app_model, name: 'app', space: space) } + let!(:process_1) { create(:process, app: app_model, log_rate_limit: -1) } + let!(:process_2) { create(:process, app: app_model, log_rate_limit: -1) } it 'only names the space once in the error message' do expect do diff --git a/spec/unit/actions/space_quotas_create_spec.rb b/spec/unit/actions/space_quotas_create_spec.rb index 79ee409f9d5..a735b37324a 100644 --- a/spec/unit/actions/space_quotas_create_spec.rb +++ b/spec/unit/actions/space_quotas_create_spec.rb @@ -5,15 +5,15 @@ module VCAP::CloudController RSpec.describe SpaceQuotasCreate do describe 'create' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } subject(:space_quotas_create) { SpaceQuotasCreate.new(user_audit_info) } - let(:org) { VCAP::CloudController::Organization.make(guid: 'some-org') } - let(:space) { VCAP::CloudController::Space.make(guid: 'some-space', organization: org) } + let(:org) { create(:organization, guid: 'some-org') } + let(:space) { create(:space, guid: 'some-space', organization: org) } let(:message) do VCAP::CloudController::SpaceQuotasCreateMessage.new({ name: 'my-name', @@ -157,7 +157,7 @@ module VCAP::CloudController end context 'because the space exists in a different org' do - let(:invalid_space) { Space.make(guid: 'invalid-space-guid', organization: Organization.make) } + let(:invalid_space) { create(:space, guid: 'invalid-space-guid', organization: create(:organization)) } let(:message_with_invalid_space_guid) do VCAP::CloudController::SpaceQuotasCreateMessage.new({ diff --git a/spec/unit/actions/space_update_isolation_segment_spec.rb b/spec/unit/actions/space_update_isolation_segment_spec.rb index 12aa060a456..0c51b0cfd87 100644 --- a/spec/unit/actions/space_update_isolation_segment_spec.rb +++ b/spec/unit/actions/space_update_isolation_segment_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe SpaceUpdateIsolationSegment do subject(:space_update) { SpaceUpdateIsolationSegment.new(user_audit_info) } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:user_guid) { double(:user, guid: '1337') } let(:user_email) { 'cool_dude@hoopy_frood.com' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } - let(:isolation_segment) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } describe '#update' do let(:message) do diff --git a/spec/unit/actions/space_update_spec.rb b/spec/unit/actions/space_update_spec.rb index 8cc993bec49..b54b457d686 100644 --- a/spec/unit/actions/space_update_spec.rb +++ b/spec/unit/actions/space_update_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController RSpec.describe SpaceUpdate do describe 'update' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(name: 'old-space-name', organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, name: 'old-space-name', organization: org) } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } context 'when a name and label are requested' do @@ -68,7 +68,7 @@ module VCAP::CloudController context 'when the space name is not unique' do it 'errors usefully' do - VCAP::CloudController::Space.make(name: 'new-space-name', organization: org) + create(:space, name: 'new-space-name', organization: org) expect do SpaceUpdate.new(user_audit_info).update(space, message) diff --git a/spec/unit/actions/stack_create_spec.rb b/spec/unit/actions/stack_create_spec.rb index 1bc21fd2280..145415747fd 100644 --- a/spec/unit/actions/stack_create_spec.rb +++ b/spec/unit/actions/stack_create_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe StackCreate do describe 'create' do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } diff --git a/spec/unit/actions/stack_delete_spec.rb b/spec/unit/actions/stack_delete_spec.rb index dda5885bc90..647784eb307 100644 --- a/spec/unit/actions/stack_delete_spec.rb +++ b/spec/unit/actions/stack_delete_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe StackDelete do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } @@ -11,7 +11,7 @@ module VCAP::CloudController describe '#delete' do context 'when the stack exists' do - let!(:stack) { Stack.make } + let!(:stack) { create(:stack) } it 'deletes the stack record' do expect do @@ -45,7 +45,7 @@ module VCAP::CloudController end it 'deletes associated labels' do - label = StackLabelModel.make(resource_guid: stack.guid, key_name: 'test1', value: 'bommel') + label = create(:stack_label_model, resource_guid: stack.guid, key_name: 'test1', value: 'bommel') expect do stack_delete.delete(stack) end.to change(StackLabelModel, :count).by(-1) @@ -54,7 +54,7 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation = StackAnnotationModel.make(resource_guid: stack.guid, key_name: 'test1', value: 'bommel') + annotation = create(:stack_annotation_model, resource_guid: stack.guid, key_name: 'test1', value: 'bommel') expect do stack_delete.delete(stack) end.to change(StackAnnotationModel, :count).by(-1) @@ -63,7 +63,7 @@ module VCAP::CloudController end context 'when there are apps associated with the stack' do - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } before do stack.apps << app diff --git a/spec/unit/actions/stack_update_spec.rb b/spec/unit/actions/stack_update_spec.rb index 59718985458..bc3e6d4691c 100644 --- a/spec/unit/actions/stack_update_spec.rb +++ b/spec/unit/actions/stack_update_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe StackUpdate do - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } @@ -22,7 +22,7 @@ module VCAP::CloudController } } end - let(:stack) { Stack.make } + let(:stack) { create(:stack) } let(:message) { StackUpdateMessage.new(body) } it 'updates the stack metadata' do @@ -57,7 +57,7 @@ module VCAP::CloudController end context 'when updating state_reason' do - let(:stack) { Stack.make(state: 'ACTIVE') } + let(:stack) { create(:stack, state: 'ACTIVE') } it 'updates state_reason when provided' do message = StackUpdateMessage.new({ diff --git a/spec/unit/actions/staging_cancel_spec.rb b/spec/unit/actions/staging_cancel_spec.rb index c37fc2bf1e6..a343573aef9 100644 --- a/spec/unit/actions/staging_cancel_spec.rb +++ b/spec/unit/actions/staging_cancel_spec.rb @@ -16,7 +16,7 @@ module VCAP::CloudController describe '#cancel' do context 'when the build is staging' do - let!(:build) { BuildModel.make(state: BuildModel::STAGING_STATE) } + let!(:build) { create(:build_model, state: BuildModel::STAGING_STATE) } it 'sends a stop staging request' do cancel_action.cancel([build]) @@ -25,7 +25,7 @@ module VCAP::CloudController end context 'when the build is in a terminal state' do - let!(:build) { BuildModel.make(state: BuildModel::FAILED_STATE) } + let!(:build) { create(:build_model, state: BuildModel::FAILED_STATE) } it 'does NOT send a stop staging request' do cancel_action.cancel([build]) diff --git a/spec/unit/actions/task_cancel_spec.rb b/spec/unit/actions/task_cancel_spec.rb index 834b094ef63..7502f1cb971 100644 --- a/spec/unit/actions/task_cancel_spec.rb +++ b/spec/unit/actions/task_cancel_spec.rb @@ -10,8 +10,8 @@ module VCAP::CloudController Config.new({}) end - let(:app) { AppModel.make } - let(:task) { TaskModel.make(name: 'ursulina', command: 'echo hi', app_guid: app.guid, state: TaskModel::RUNNING_STATE) } + let(:app) { create(:app_model) } + let(:task) { create(:task_model, name: 'ursulina', command: 'echo hi', app: app, state: TaskModel::RUNNING_STATE) } let(:user_audit_info) { instance_double(VCAP::CloudController::UserAuditInfo).as_null_object } let(:bbs_client) { instance_double(VCAP::CloudController::Diego::BbsTaskClient, cancel_task: nil) } diff --git a/spec/unit/actions/task_create_spec.rb b/spec/unit/actions/task_create_spec.rb index 762d00ee6e0..aa6e4542aa6 100644 --- a/spec/unit/actions/task_create_spec.rb +++ b/spec/unit/actions/task_create_spec.rb @@ -14,9 +14,9 @@ module VCAP::CloudController end describe '#create' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:space) { app.space } - let(:droplet) { DropletModel.make(app_guid: app.guid, state: DropletModel::STAGED_STATE, process_types: { 'web' => 'start app' }) } + let(:droplet) { create(:droplet_model, app: app, state: DropletModel::STAGED_STATE, process_types: { 'web' => 'start app' }, set_as_current_droplet: false) } let(:command) { 'bundle exec rake panda' } let(:name) { 'my_task_name' } let(:message) do @@ -243,7 +243,7 @@ module VCAP::CloudController end context 'when the app does not have an assigned droplet' do - let(:app_with_no_droplet) { AppModel.make } + let(:app_with_no_droplet) { create(:app_model) } it 'raises a NoAssignedDroplet error' do expect do @@ -274,7 +274,7 @@ module VCAP::CloudController end context 'when a custom droplet is specified' do - let(:custom_droplet) { DropletModel.make(app_guid: app.guid, state: DropletModel::STAGED_STATE) } + let(:custom_droplet) { create(:droplet_model, app: app, state: DropletModel::STAGED_STATE, set_as_current_droplet: false) } it 'creates the task with the specified droplet' do task = task_create_action.create(app, message, user_audit_info, droplet: custom_droplet) @@ -294,11 +294,11 @@ module VCAP::CloudController end describe 'process templates' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, command: 'start') } + let(:process) { create(:process_model, app: app, command: 'start') } describe 'users' do context 'when there is a template and no user provided' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, user: 'ContainerUser') } + let(:process) { create(:process_model, app: app, user: 'ContainerUser') } let(:message) { TaskCreateMessage.new name: name, disk_in_mb: 2048, memory_in_mb: 1024, template: { process: { guid: process.guid } } } it 'uses the user from the template' do @@ -308,7 +308,7 @@ module VCAP::CloudController end context 'when there is a template and a user provided' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, user: 'ContainerUser') } + let(:process) { create(:process_model, app: app, user: 'ContainerUser') } let(:message) { TaskCreateMessage.new name: name, user: 'vcap', template: { process: { guid: process.guid } } } it 'uses the user from the message' do @@ -318,7 +318,7 @@ module VCAP::CloudController end context 'when there is a template without a user and no user is provided' do - let(:process) { VCAP::CloudController::ProcessModel.make(app:) } + let(:process) { create(:process_model, app:) } let(:message) { TaskCreateMessage.new name: name, template: { process: { guid: process.guid } } } it 'uses the user from the message' do @@ -348,7 +348,7 @@ module VCAP::CloudController end context 'when the template process has no specified command and the message has no command requested' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web') } + let(:process) { create(:process_model, app: app, type: 'web') } let(:message) { TaskCreateMessage.new name: name, disk_in_mb: 2048, memory_in_mb: 1024, template: { process: { guid: process.guid } } } it 'uses the detected command from the process\'s droplet' do @@ -364,7 +364,7 @@ module VCAP::CloudController end context 'when there is a template and the message does NOT specify memory_in_mb' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', memory: 23) } + let(:process) { create(:process_model, app: app, type: 'web', memory: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', disk_in_mb: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the template process' do @@ -374,7 +374,7 @@ module VCAP::CloudController end context 'when there is a template and the message specifies memory_in_mb' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', memory: 23) } + let(:process) { create(:process_model, app: app, type: 'web', memory: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', memory_in_mb: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the template process' do @@ -390,7 +390,7 @@ module VCAP::CloudController end context 'when there is a template and the message does not specify log_rate_limit_in_bytes_per_second' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', log_rate_limit: 23) } + let(:process) { create(:process_model, app: app, type: 'web', log_rate_limit: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', disk_in_mb: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the template process' do @@ -400,7 +400,7 @@ module VCAP::CloudController end context 'when there is a template and the message specifies log_rate_limit_in_bytes_per_second' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', log_rate_limit: 23) } + let(:process) { create(:process_model, app: app, type: 'web', log_rate_limit: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', log_rate_limit_in_bytes_per_second: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the message' do @@ -416,7 +416,7 @@ module VCAP::CloudController end context 'when there is a template and the message does NOT specify disk_in_mb' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', disk_quota: 23) } + let(:process) { create(:process_model, app: app, type: 'web', disk_quota: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', memory_in_mb: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the template process' do @@ -426,7 +426,7 @@ module VCAP::CloudController end context 'when there is a template and the message specifies disk_in_mb' do - let(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'web', disk_quota: 23) } + let(:process) { create(:process_model, app: app, type: 'web', disk_quota: 23) } let(:message) { TaskCreateMessage.new(name: name, command: 'ok', disk_in_mb: 2048, template: { process: { guid: process.guid } }) } it 'uses the memory from the template process' do diff --git a/spec/unit/actions/task_delete_spec.rb b/spec/unit/actions/task_delete_spec.rb index 8099f7791c7..320a71d6730 100644 --- a/spec/unit/actions/task_delete_spec.rb +++ b/spec/unit/actions/task_delete_spec.rb @@ -6,12 +6,12 @@ module VCAP::CloudController describe '#delete_for_app' do subject(:task_delete) { described_class.new(user_audit_info) } - let!(:app) { AppModel.make } - let!(:task1) { TaskModel.make(app: app, state: TaskModel::SUCCEEDED_STATE) } - let!(:task2) { TaskModel.make(app: app, state: TaskModel::FAILED_STATE) } - let!(:task3) { TaskModel.make(app: app, state: TaskModel::PENDING_STATE) } - let!(:task4) { TaskModel.make(app: app, state: TaskModel::RUNNING_STATE) } - let!(:task5) { TaskModel.make(app: app, state: TaskModel::CANCELING_STATE) } + let!(:app) { create(:app_model) } + let!(:task1) { create(:task_model, app: app, state: TaskModel::SUCCEEDED_STATE) } + let!(:task2) { create(:task_model, app: app, state: TaskModel::FAILED_STATE) } + let!(:task3) { create(:task_model, app: app, state: TaskModel::PENDING_STATE) } + let!(:task4) { create(:task_model, app: app, state: TaskModel::RUNNING_STATE) } + let!(:task5) { create(:task_model, app: app, state: TaskModel::CANCELING_STATE) } let(:user_audit_info) { instance_double(VCAP::CloudController::UserAuditInfo).as_null_object } let(:bbs_task_client) { instance_double(VCAP::CloudController::Diego::BbsTaskClient, cancel_task: nil) } @@ -27,8 +27,8 @@ module VCAP::CloudController end it 'deletes associated labels' do - label1 = TaskLabelModel.make(task: task1, key_name: 'test', value: 'bommel') - label2 = TaskLabelModel.make(task: task2, key_name: 'test', value: 'bommel') + label1 = create(:task_label_model, task: task1, key_name: 'test', value: 'bommel') + label2 = create(:task_label_model, task: task2, key_name: 'test', value: 'bommel') expect do task_delete.delete_for_app(app.guid) @@ -37,8 +37,8 @@ module VCAP::CloudController end it 'deletes associated annotations' do - annotation1 = TaskAnnotationModel.make(task: task1, key_name: 'test', value: 'bommel') - annotation2 = TaskAnnotationModel.make(task: task2, key_name: 'test', value: 'bommel') + annotation1 = create(:task_annotation_model, task: task1, key_name: 'test', value: 'bommel') + annotation2 = create(:task_annotation_model, task: task2, key_name: 'test', value: 'bommel') expect do task_delete.delete_for_app(app.guid) diff --git a/spec/unit/actions/task_update_spec.rb b/spec/unit/actions/task_update_spec.rb index 97efecea5c2..b4bf82d4695 100644 --- a/spec/unit/actions/task_update_spec.rb +++ b/spec/unit/actions/task_update_spec.rb @@ -18,7 +18,7 @@ module VCAP::CloudController } } end - let(:task) { TaskModel.make } + let(:task) { create(:task_model) } let(:message) { TaskUpdateMessage.new(body) } it 'updates the task metadata' do diff --git a/spec/unit/actions/transactional_metadata_update_spec.rb b/spec/unit/actions/transactional_metadata_update_spec.rb index dae13e71f4a..05749b9698c 100644 --- a/spec/unit/actions/transactional_metadata_update_spec.rb +++ b/spec/unit/actions/transactional_metadata_update_spec.rb @@ -17,7 +17,7 @@ module VCAP::CloudController } end let(:update_request_body) { new_metadata } - let(:resource) { Service.make } + let(:resource) { create(:service) } let(:message) { MetadataUpdateMessage.new(update_request_body) } context 'when the resource has no metadata' do @@ -49,8 +49,8 @@ module VCAP::CloudController context 'when the resource has existing metadata' do before do - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: resource.guid, key_name: 'freaky', value: 'tuesday') - VCAP::CloudController::ServiceOfferingAnnotationModel.make(resource_guid: resource.guid, key_name: 'tokyo', value: 'apples') + create(:service_offering_label_model, resource_guid: resource.guid, key_name: 'freaky', value: 'tuesday') + create(:service_offering_annotation_model, resource_guid: resource.guid, key_name: 'tokyo', value: 'apples') end context 'and no metadata is specified' do diff --git a/spec/unit/actions/update_route_destinations_spec.rb b/spec/unit/actions/update_route_destinations_spec.rb index e73f03690e5..ade48c5822b 100644 --- a/spec/unit/actions/update_route_destinations_spec.rb +++ b/spec/unit/actions/update_route_destinations_spec.rb @@ -4,23 +4,22 @@ module VCAP::CloudController RSpec.describe UpdateRouteDestinations do subject(:update_destinations) { UpdateRouteDestinations } - let(:space) { Space.make } - let(:app_model) { AppModel.make(guid: 'some-guid', space: space) } - let(:app_model2) { AppModel.make(guid: 'some-other-guid', space: space) } - let(:docker_app) { AppModel.make(:docker, guid: 'docker-app-guid', space: space) } - let(:route) { Route.make } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, guid: 'some-guid', space: space) } + let(:app_model2) { create(:app_model, guid: 'some-other-guid', space: space) } + let(:docker_app) { create(:app_model, :docker, guid: 'docker-app-guid', space: space) } + let(:route) { create(:route) } let!(:existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'existing', - app_port: 3001 - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'existing', + app_port: 3001) end - let!(:process1) { ProcessModel.make(:process, guid: 'process1-guid', app: app_model, type: 'web', health_check_type: 'none') } - let!(:process2) { ProcessModel.make(:process, guid: 'process2-guid', app: app_model2, type: 'worker', health_check_type: 'none') } - let!(:process3) { ProcessModel.make(:process, guid: 'process3-guid', app: app_model, type: 'existing', health_check_type: 'none', ports: [3001]) } - let!(:docker_process) { ProcessModel.make(:process, app: docker_app, type: 'web') } + let!(:process1) { create(:process, :process, guid: 'process1-guid', app: app_model, type: 'web', health_check_type: 'none') } + let!(:process2) { create(:process, :process, guid: 'process2-guid', app: app_model2, type: 'worker', health_check_type: 'none') } + let!(:process3) { create(:process, :process, guid: 'process3-guid', app: app_model, type: 'existing', health_check_type: 'none', ports: [3001]) } + let!(:docker_process) { create(:process, :process, app: docker_app, type: 'web') } let(:process1_route_handler) { instance_double(ProcessRouteHandler, update_route_information: nil) } let(:process2_route_handler) { instance_double(ProcessRouteHandler, update_route_information: nil) } let(:process3_route_handler) { instance_double(ProcessRouteHandler, update_route_information: nil) } @@ -145,12 +144,11 @@ module VCAP::CloudController context 'when a fully equal destination already exists' do context 'destination includes buildpack app' do let!(:same_destination) do - RouteMappingModel.make( - app: app_model, - route: route, - app_port: 8080, - process_type: 'web' - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 8080, + process_type: 'web') end let(:params) do @@ -184,12 +182,11 @@ module VCAP::CloudController context 'destination includes docker app' do let!(:same_destination) do - RouteMappingModel.make( - app: docker_app, - route: route, - app_port: ProcessModel::NO_APP_PORT_SPECIFIED, - process_type: 'web' - ) + create(:route_mapping_model, + app: docker_app, + route: route, + app_port: ProcessModel::NO_APP_PORT_SPECIFIED, + process_type: 'web') end let(:params) do @@ -313,12 +310,11 @@ module VCAP::CloudController before do 99.times do |i| - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'existing', - app_port: 4001 + i - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'existing', + app_port: 4001 + i) end end @@ -398,7 +394,7 @@ module VCAP::CloudController end context 'tcp routes' do - let(:tcp_route) { Route.make(:tcp) } + let(:tcp_route) { create(:route, :tcp) } let(:routing_api_client) { double('routing_api_client', router_group:) } let(:router_group) { double('router_group', type: 'tcp', guid: 'router-group-guid') } @@ -467,13 +463,12 @@ module VCAP::CloudController context 'when a destination exists with a different http protocol' do context 'when existing protocol is http1 and new protocol is http2' do let!(:same_destination) do - RouteMappingModel.make( - app: app_model, - route: route, - app_port: 8080, - process_type: 'web', - protocol: 'http1' - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 8080, + process_type: 'web', + protocol: 'http1') end let(:params) do @@ -499,13 +494,12 @@ module VCAP::CloudController context 'when existing protocol is http2 and new protocol is not set' do let!(:same_destination) do - RouteMappingModel.make( - app: app_model, - route: route, - app_port: 8080, - process_type: 'web', - protocol: 'http2' - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: 8080, + process_type: 'web', + protocol: 'http2') end let(:params) do @@ -644,12 +638,11 @@ module VCAP::CloudController context 'when a fully equal destination already exists' do let!(:same_destination) do - RouteMappingModel.make( - app: app_model, - route: route, - app_port: ProcessModel::DEFAULT_HTTP_PORT, - process_type: 'web' - ) + create(:route_mapping_model, + app: app_model, + route: route, + app_port: ProcessModel::DEFAULT_HTTP_PORT, + process_type: 'web') end let(:params) do @@ -709,12 +702,11 @@ module VCAP::CloudController context 'when adding over 100 destinations' do before do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'existing', - app_port: 4001 - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'existing', + app_port: 4001) end it 'rejects any inserts' do @@ -760,15 +752,14 @@ module VCAP::CloudController end context 'when there are multiple routes with destinations to the same process' do - let(:other_route) { Route.make } + let(:other_route) { create(:route) } let!(:other_existing_destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: other_route, - process_type: 'existing', - app_port: 3001 - ) + create(:route_mapping_model, + app: app_model, + route: other_route, + process_type: 'existing', + app_port: 3001) end before do @@ -818,11 +809,10 @@ module VCAP::CloudController context 'when there are more than 100 destinations' do before do 102.times do |i| - VCAP::CloudController::RouteMappingModel.make( - app: app_model, - route: route, - process_type: 'existing-' + i.to_s - ) + create(:route_mapping_model, + app: app_model, + route: route, + process_type: 'existing-' + i.to_s) end end diff --git a/spec/unit/actions/user_create_spec.rb b/spec/unit/actions/user_create_spec.rb index 9d215ad10ee..1926c92b95a 100644 --- a/spec/unit/actions/user_create_spec.rb +++ b/spec/unit/actions/user_create_spec.rb @@ -24,7 +24,7 @@ module VCAP::CloudController describe '#create' do context 'when there is a sequel validation error' do context 'when the error is a uniqueness error' do - let(:existing_user) { User.make } + let(:existing_user) { create(:user) } let(:message) { UserCreateMessage.new({ guid: existing_user.guid, metadata: metadata }) } it 'returns an informative error message' do diff --git a/spec/unit/actions/user_delete_spec.rb b/spec/unit/actions/user_delete_spec.rb index dac22ba8a84..fad346f250f 100644 --- a/spec/unit/actions/user_delete_spec.rb +++ b/spec/unit/actions/user_delete_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController subject(:user_delete) { UserDeleteAction.new } describe '#delete' do - let!(:user) { User.make } + let!(:user) { create(:user) } it 'deletes the user record' do expect do diff --git a/spec/unit/actions/user_update_spec.rb b/spec/unit/actions/user_update_spec.rb index 39b87a9ba6b..575bf19edb1 100644 --- a/spec/unit/actions/user_update_spec.rb +++ b/spec/unit/actions/user_update_spec.rb @@ -39,7 +39,7 @@ module VCAP::CloudController } end - let(:user) { User.make } + let(:user) { create(:user) } let(:message) { UserUpdateMessage.new(body) } context 'when there is no current metadata' do diff --git a/spec/unit/actions/v2/app_create_spec.rb b/spec/unit/actions/v2/app_create_spec.rb index 0225cb8f867..c45a855187b 100644 --- a/spec/unit/actions/v2/app_create_spec.rb +++ b/spec/unit/actions/v2/app_create_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe V2::AppCreate do - let(:space) { Space.make } + let(:space) { create(:space) } let(:access_validator) { double('access_validator', validate_access: true) } subject(:app_create) { V2::AppCreate.new(access_validator:) } @@ -22,7 +22,7 @@ module VCAP::CloudController } end - let(:stack) { Stack.make(name: 'stacks-on-stacks') } + let(:stack) { create(:stack, name: 'stacks-on-stacks') } it 'creates the app' do process = app_create.create(request_attrs) @@ -91,7 +91,7 @@ module VCAP::CloudController end it 'does allow a buildpack name' do - admin_buildpack = Buildpack.make + admin_buildpack = create(:buildpack) request_attrs['buildpack'] = admin_buildpack.name expect { app_create.create(request_attrs) }.not_to raise_error end @@ -220,7 +220,7 @@ module VCAP::CloudController describe 'stack state validation' do context 'when stack is DISABLED' do - let(:disabled_stack) { Stack.make(name: 'disabled-stack', state: StackStates::STACK_DISABLED) } + let(:disabled_stack) { create(:stack, name: 'disabled-stack', state: StackStates::STACK_DISABLED) } let(:request_attrs) do { 'name' => 'maria', @@ -242,7 +242,7 @@ module VCAP::CloudController end context 'when stack is RESTRICTED' do - let(:restricted_stack) { Stack.make(name: 'restricted-stack', state: StackStates::STACK_RESTRICTED) } + let(:restricted_stack) { create(:stack, name: 'restricted-stack', state: StackStates::STACK_RESTRICTED) } let(:request_attrs) do { 'name' => 'maria', @@ -264,7 +264,7 @@ module VCAP::CloudController end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { Stack.make(name: 'deprecated-stack', state: StackStates::STACK_DEPRECATED) } + let(:deprecated_stack) { create(:stack, name: 'deprecated-stack', state: StackStates::STACK_DEPRECATED) } let(:request_attrs) do { 'name' => 'maria', @@ -284,7 +284,7 @@ module VCAP::CloudController end context 'when stack is ACTIVE' do - let(:active_stack) { Stack.make(name: 'active-stack', state: StackStates::STACK_ACTIVE) } + let(:active_stack) { create(:stack, name: 'active-stack', state: StackStates::STACK_ACTIVE) } let(:request_attrs) do { 'name' => 'maria', diff --git a/spec/unit/actions/v2/app_stage_spec.rb b/spec/unit/actions/v2/app_stage_spec.rb index c93277ba5f4..49c1903fee5 100644 --- a/spec/unit/actions/v2/app_stage_spec.rb +++ b/spec/unit/actions/v2/app_stage_spec.rb @@ -9,13 +9,13 @@ module V2 subject(:action) { AppStage.new(stagers:) } describe '#stage' do - let(:buildpack) { BuildpackLifecycleBuildpackModel.make(:custom_buildpack, buildpack_url: 'http://github.com/myorg/awesome-buildpack') } - let(:buildpack_lifecycle_data) { BuildpackLifecycleDataModel.make(stack: 'my_stack', buildpack_lifecycle_buildpack_guids: [buildpack.guid]) } + let(:buildpack) { create(:buildpack_lifecycle_buildpack_model, :custom_buildpack, buildpack_url: 'http://github.com/myorg/awesome-buildpack') } + let(:buildpack_lifecycle_data) { create(:buildpack_lifecycle_data_model, stack: 'my_stack', buildpack_lifecycle_buildpack_guids: [buildpack.guid]) } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } - let(:package) { PackageModel.make(app: app, state: PackageModel::READY_STATE) } - let(:build) { BuildModel.make(app: app, package: package, created_by_user_guid: 'user-guid') } + let(:package) { create(:package_model, app: app, state: PackageModel::READY_STATE) } + let(:build) { create(:build_model, app: app, package: package, created_by_user_guid: 'user-guid') } let(:build_create) { instance_double(BuildCreate, create_and_stage_without_event: build, staging_response: 'staging-response', warnings: []) } before do @@ -24,7 +24,7 @@ module V2 end it 'delegates to BuildCreate with a BuildCreateMessage based on the process' do - process = ProcessModel.make(memory: 765, disk_quota: 1234, app: app) + process = create(:process_model, memory: 765, disk_quota: 1234, app: app) process.reload action.stage(process) @@ -188,14 +188,15 @@ module V2 it 'logs build creates' do Timecop.freeze do - buildpack = BuildpackLifecycleBuildpackModel.make(:custom_buildpack, buildpack_url: 'http://github.com/myorg/awesome-buildpack') - buildpack_lifecycle_data = BuildpackLifecycleDataModel.make(stack: 'my_stack', buildpack_lifecycle_buildpack_guids: [buildpack.guid]) + buildpack = create(:buildpack_lifecycle_buildpack_model, :custom_buildpack, buildpack_url: 'http://github.com/myorg/awesome-buildpack') + buildpack_lifecycle_data = create(:buildpack_lifecycle_data_model, stack: 'my_stack', buildpack_lifecycle_buildpack_guids: [buildpack.guid]) - app = AppModel.make + app = create(:app_model) app.buildpack_lifecycle_data = buildpack_lifecycle_data app.save - process = ProcessModel.make(memory: 765, disk_quota: 1234, app: app) - PackageModel.make(app: process.app, state: PackageModel::READY_STATE) + process = create(:process_model, memory: 765, disk_quota: 1234, app: app) + create(:package_model, app: process.app, state: PackageModel::READY_STATE) + process.reload action.stage(process) expected_json = { @@ -229,7 +230,7 @@ module V2 end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { Stack.make(name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } + let(:deprecated_stack) { create(:stack, name: 'cflinuxfs3', state: 'DEPRECATED', description: 'EOL Dec 2025') } before do process.app.buildpack_lifecycle_data.update(stack: deprecated_stack.name) @@ -245,7 +246,7 @@ module V2 end context 'when stack is ACTIVE' do - let(:active_stack) { Stack.make(name: 'cflinuxfs5', state: 'ACTIVE') } + let(:active_stack) { create(:stack, name: 'cflinuxfs5', state: 'ACTIVE') } before do process.app.buildpack_lifecycle_data.update(stack: active_stack.name) @@ -259,7 +260,7 @@ module V2 end context 'when stack is DISABLED' do - let(:disabled_stack) { Stack.make(name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } + let(:disabled_stack) { create(:stack, name: 'cflinuxfs2', state: 'DISABLED', description: 'Migrate to cflinuxfs4') } before do process.app.buildpack_lifecycle_data.update(stack: disabled_stack.name) @@ -275,7 +276,7 @@ module V2 end context 'when stack is RESTRICTED' do - let(:restricted_stack) { Stack.make(name: 'cflinuxfs3-restricted', state: 'RESTRICTED', description: 'No new apps') } + let(:restricted_stack) { create(:stack, name: 'cflinuxfs3-restricted', state: 'RESTRICTED', description: 'No new apps') } before do process.app.buildpack_lifecycle_data.update(stack: restricted_stack.name) @@ -299,7 +300,7 @@ module V2 context 'for restaging existing app' do before do - BuildModel.make(app: process.app, state: 'STAGED') + create(:build_model, app: process.app, state: 'STAGED') end it 'allows staging with warnings' do diff --git a/spec/unit/actions/v2/app_stop_spec.rb b/spec/unit/actions/v2/app_stop_spec.rb index 5dcddba421c..8368cce63cb 100644 --- a/spec/unit/actions/v2/app_stop_spec.rb +++ b/spec/unit/actions/v2/app_stop_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController RSpec.describe V2::AppStop do let(:cancel_action) { instance_double(StagingCancel, cancel: nil) } - let(:app) { AppModel.make(desired_state: 'STARTED') } + let(:app) { create(:app_model, desired_state: 'STARTED') } let!(:process1) { ProcessModelFactory.make(app: app, state: 'STARTED', type: 'this') } let!(:process2) { ProcessModelFactory.make(app: app, state: 'STARTED', type: 'that') } @@ -30,7 +30,7 @@ module VCAP::CloudController end describe 'when there are builds staging' do - before { BuildModel.make(app: app, state: BuildModel::STAGING_STATE) } + before { create(:build_model, app: app, state: BuildModel::STAGING_STATE) } it 'does things' do V2::AppStop.stop(app, cancel_action) diff --git a/spec/unit/actions/v2/app_update_spec.rb b/spec/unit/actions/v2/app_update_spec.rb index 6e783cde4fc..a0bf8698945 100644 --- a/spec/unit/actions/v2/app_update_spec.rb +++ b/spec/unit/actions/v2/app_update_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController describe 'update' do context 'updating the process' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } let(:request_attrs) do { @@ -49,11 +49,11 @@ module VCAP::CloudController context 'when the app is deploying' do before do - VCAP::CloudController::DeploymentModel.make(app: app, state: 'DEPLOYING') + create(:deployment_model, app: app, state: 'DEPLOYING') end context 'when the process is of type web' do - let(:process) { ProcessModel.make(type: 'web') } + let(:process) { create(:process_model, type: 'web') } it 'raises an error and does NOT update the web process' do request_attrs = { @@ -106,7 +106,7 @@ module VCAP::CloudController end context 'when the process is NOT of type web' do - let(:process) { ProcessModel.make(type: 'totes-not-web') } + let(:process) { create(:process_model, type: 'totes-not-web') } it 'still updates the non-web processes' do app_update.update(app, process, request_attrs) @@ -128,9 +128,9 @@ module VCAP::CloudController end it 'updates the app' do - process = ProcessModel.make + process = create(:process_model) app = process.app - stack = Stack.make(name: 'stack-name') + stack = create(:stack, name: 'stack-name') request_attrs = { 'name' => 'maria', @@ -157,18 +157,16 @@ module VCAP::CloudController end context 'with revisions enabled' do - let!(:process) { ProcessModel.make } + let!(:process) { create(:process_model) } let!(:app) { process.app } - let!(:package) { PackageModel.make(app: app, package_hash: 'some-hash', state: PackageModel::READY_STATE) } + let!(:package) { create(:package_model, app: app, package_hash: 'some-hash', state: PackageModel::READY_STATE) } let!(:droplet) do - DropletModel.make( - app: app, - state: DropletModel::STAGED_STATE, - package: package, - process_types: { - 'web' => 'webby' - } - ) + create(:droplet_model, app: app, + state: DropletModel::STAGED_STATE, + package: package, + process_types: { + 'web' => 'webby' + }) end before do @@ -191,9 +189,9 @@ module VCAP::CloudController context 'no valid package or droplet' do let(:current_state) { 'STARTED' } - let(:process) { ProcessModel.make(state: current_state) } + let(:process) { create(:process_model, state: current_state) } let(:app) { process.app } - let(:new_stack) { Stack.make } + let(:new_stack) { create(:stack) } let(:request_attrs) do { 'instances' => 2, @@ -250,7 +248,7 @@ module VCAP::CloudController context 'updating buildpack' do context 'when custom buildpacks are disabled' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } before { TestConfig.override(disable_custom_buildpacks: true) } @@ -272,7 +270,7 @@ module VCAP::CloudController end it 'does allow a buildpack name' do - admin_buildpack = Buildpack.make + admin_buildpack = create(:buildpack) request_attrs = { 'buildpack' => admin_buildpack.name } expect do @@ -299,7 +297,7 @@ module VCAP::CloudController describe 'empty values (that trigger autodetect)' do it 'allows buildpack to be set to nil' do - process = ProcessModel.make + process = create(:process_model) app = process.app request_attrs = { @@ -312,7 +310,7 @@ module VCAP::CloudController end it 'allows buildpack to be set to empty string' do - process = ProcessModel.make + process = create(:process_model) app = process.app request_attrs = { @@ -327,8 +325,8 @@ module VCAP::CloudController end describe 'setting stack' do - let(:new_stack) { Stack.make } - let(:process) { ProcessModel.make } + let(:new_stack) { create(:stack) } + let(:process) { create(:process_model) } let(:app) { process.app } let(:request_attrs) { { 'stack_guid' => new_stack.guid } } @@ -361,7 +359,7 @@ module VCAP::CloudController let(:process) { ProcessModelFactory.make(state: 'STARTED') } before do - PackageModel.make(app: app, package_hash: 'some-hash', state: PackageModel::READY_STATE) + create(:package_model, app: app, package_hash: 'some-hash', state: PackageModel::READY_STATE) process.reload end @@ -378,7 +376,7 @@ module VCAP::CloudController end context 'when the app was never staged' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } it 'does not mark the app for staging' do expect(process).not_to be_staged @@ -395,7 +393,7 @@ module VCAP::CloudController describe 'changing lifecycle types' do context 'when changing from docker to buildpack' do - let(:process) { ProcessModel.make(app: AppModel.make(:docker)) } + let(:process) { create(:process_model, app: create(:app_model, :docker)) } let(:app) { process.app } it 'raises an error setting buildpack' do @@ -416,7 +414,7 @@ module VCAP::CloudController end context 'when changing from buildpack to docker' do - let(:process) { ProcessModel.make(app: AppModel.make) } + let(:process) { create(:process_model, app: create(:app_model)) } let(:app) { process.app } it 'raises an error' do @@ -430,7 +428,7 @@ module VCAP::CloudController end describe 'updating docker_image' do - let(:process) { ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') } + let(:process) { ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') } let!(:original_package) { process.latest_package } let(:app_stage) { instance_double(V2::AppStage, stage: nil, warnings: []) } @@ -505,7 +503,7 @@ module VCAP::CloudController end describe 'updating docker_credentials' do - let(:process) { ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') } + let(:process) { ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') } let!(:original_package) { process.latest_package } let(:app_stage) { instance_double(V2::AppStage, stage: nil, warnings: []) } @@ -531,7 +529,7 @@ module VCAP::CloudController end context 'when docker_image is not requested and the app does not have a docker_image' do - let(:process) { ProcessModelFactory.make(app: AppModel.make(:docker)) } + let(:process) { ProcessModelFactory.make(app: create(:app_model, :docker)) } it 'raises an error' do request_attrs = { 'docker_credentials' => { @@ -558,7 +556,7 @@ module VCAP::CloudController context 'when the app needs staging' do before do - PackageModel.make(app: app, state: PackageModel::READY_STATE, package_hash: 'some-hash') + create(:package_model, app: app, state: PackageModel::READY_STATE, package_hash: 'some-hash') process.reload end @@ -641,7 +639,7 @@ module VCAP::CloudController end context 'when starting an app without a package' do - let(:process) { ProcessModel.make(instances: 1) } + let(:process) { create(:process_model, instances: 1) } it 'raises an error' do expect do @@ -651,7 +649,7 @@ module VCAP::CloudController context 'and there is a staged droplet' do before do - process.app.update(droplet: DropletModel.make(app: process.app, state: DropletModel::STAGED_STATE)) + process.app.update(droplet: create(:droplet_model, app: process.app, state: DropletModel::STAGED_STATE)) end it 'does not raise an error' do @@ -665,7 +663,7 @@ module VCAP::CloudController describe 'starting and stopping' do let(:app) { process.app } let(:process) { ProcessModelFactory.make(instances: 1, state: state) } - let(:sibling_process) { ProcessModel.make(instances: 1, state: state, app: app, type: 'worker') } + let(:sibling_process) { create(:process_model, instances: 1, state: state, app: app, type: 'worker') } context 'starting' do let(:state) { 'STOPPED' } @@ -717,11 +715,11 @@ module VCAP::CloudController end describe 'stack state validation on stack change' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } context 'when stack is DISABLED' do - let(:disabled_stack) { Stack.make(name: 'disabled-stack', state: StackStates::STACK_DISABLED) } + let(:disabled_stack) { create(:stack, name: 'disabled-stack', state: StackStates::STACK_DISABLED) } it 'raises StackValidationFailed error' do expect do @@ -734,7 +732,7 @@ module VCAP::CloudController end context 'when stack is RESTRICTED' do - let(:restricted_stack) { Stack.make(name: 'restricted-stack', state: StackStates::STACK_RESTRICTED) } + let(:restricted_stack) { create(:stack, name: 'restricted-stack', state: StackStates::STACK_RESTRICTED) } context 'when app has no builds' do it 'raises StackValidationFailed error' do @@ -749,7 +747,7 @@ module VCAP::CloudController end context 'when app has previous builds' do - before { BuildModel.make(app: app, state: BuildModel::STAGED_STATE) } + before { create(:build_model, app: app, state: BuildModel::STAGED_STATE) } it 'allows the update' do expect(app.builds_dataset.count).to eq(1) @@ -761,7 +759,7 @@ module VCAP::CloudController end context 'when stack is DEPRECATED' do - let(:deprecated_stack) { Stack.make(name: 'deprecated-stack', state: StackStates::STACK_DEPRECATED) } + let(:deprecated_stack) { create(:stack, name: 'deprecated-stack', state: StackStates::STACK_DEPRECATED) } it 'updates the app with warnings' do app_update.update(app, process, { 'stack_guid' => deprecated_stack.guid }) @@ -771,7 +769,7 @@ module VCAP::CloudController end context 'when stack is ACTIVE' do - let(:active_stack) { Stack.make(name: 'active-stack', state: StackStates::STACK_ACTIVE) } + let(:active_stack) { create(:stack, name: 'active-stack', state: StackStates::STACK_ACTIVE) } it 'updates the app without warnings' do app_update.update(app, process, { 'stack_guid' => active_stack.guid }) @@ -787,7 +785,7 @@ module VCAP::CloudController end context 'when app is docker-based' do - let(:docker_process) { ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') } + let(:docker_process) { ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') } let(:docker_app) { docker_process.app } it 'skips stack validation when updating docker image' do diff --git a/spec/unit/actions/v2/organization_delete_spec.rb b/spec/unit/actions/v2/organization_delete_spec.rb index 1a1e127ed56..fd670b44885 100644 --- a/spec/unit/actions/v2/organization_delete_spec.rb +++ b/spec/unit/actions/v2/organization_delete_spec.rb @@ -11,32 +11,28 @@ module V2 subject(:org_delete) { V2::OrganizationDelete.new(space_delete) } describe '#delete' do - let!(:org_1) { Organization.make } - let!(:org_2) { Organization.make } - let!(:space) { Space.make(organization: org_1) } - let!(:space_2) { Space.make(organization: org_1) } - let!(:app) { AppModel.make(space_guid: space.guid) } - let!(:service_instance) { ManagedServiceInstance.make(space:) } - let!(:service_instance_2) { ManagedServiceInstance.make(space: space_2) } + let!(:org_1) { create(:organization) } + let!(:org_2) { create(:organization) } + let!(:space) { create(:space, organization: org_1) } + let!(:space_2) { create(:space, organization: org_1) } + let!(:app) { create(:app_model, space_guid: space.guid) } + let!(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_instance_2) { create(:managed_service_instance, space: space_2) } let!(:org1_label) do - OrganizationLabelModel.make( - key_prefix: 'indiana.edu', - key_name: 'state', - value: 'Indiana', - resource_guid: org_1.guid - ) + create(:organization_label_model, key_prefix: 'indiana.edu', + key_name: 'state', + value: 'Indiana', + resource_guid: org_1.guid) end let!(:org1_annotation) do - OrganizationAnnotationModel.make( - key_name: 'city', - value: 'Monticello', - resource_guid: org_1.guid - ) + create(:organization_annotation_model, key_name: 'city', + value: 'Monticello', + resource_guid: org_1.guid) end let!(:org_dataset) { Organization.where(guid: [org_1.guid, org_2.guid]) } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } before do diff --git a/spec/unit/actions/v2/route_create_spec.rb b/spec/unit/actions/v2/route_create_spec.rb index 9115fd8315b..04f13c24f69 100644 --- a/spec/unit/actions/v2/route_create_spec.rb +++ b/spec/unit/actions/v2/route_create_spec.rb @@ -7,12 +7,12 @@ module V2 let(:logger) { instance_double(Steno::Logger) } let(:route_create) { RouteCreate.new(access_validator:, logger:) } let(:host) { 'some-host' } - let(:space_quota_definition) { SpaceQuotaDefinition.make } + let(:space_quota_definition) { create(:space_quota_definition) } let(:space) do - Space.make(space_quota_definition: space_quota_definition, - organization: space_quota_definition.organization) + create(:space, space_quota_definition: space_quota_definition, + organization: space_quota_definition.organization) end - let(:domain) { SharedDomain.make } + let(:domain) { create(:shared_domain) } let(:path) { '/some-path' } let(:route_hash) do { diff --git a/spec/unit/actions/v2/route_mapping_create_spec.rb b/spec/unit/actions/v2/route_mapping_create_spec.rb index b3baaa43821..e24184236b0 100644 --- a/spec/unit/actions/v2/route_mapping_create_spec.rb +++ b/spec/unit/actions/v2/route_mapping_create_spec.rb @@ -7,12 +7,12 @@ module V2 subject(:route_mapping_create) { RouteMappingCreate.new(user_audit_info, route, process, request_attrs, logger) } let(:space) { app.space } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:user_guid) { 'user-guid' } let(:user_email) { '1@2.3' } let(:user_audit_info) { UserAuditInfo.new(user_email:, user_guid:) } - let(:process) { ProcessModel.make(:process, app: app, type: process_type, ports: ports, health_check_type: 'none') } - let!(:process2) { ProcessModel.make(:process, app: app, type: process_type, ports: ports, health_check_type: 'none') } + let(:process) { create(:process_model, :process, app: app, type: process_type, ports: ports, health_check_type: 'none') } + let!(:process2) { create(:process_model, :process, app: app, type: process_type, ports: ports, health_check_type: 'none') } let(:process_type) { 'web' } let(:ports) { [8888] } let(:requested_port) { 8888 } @@ -24,7 +24,7 @@ module V2 end describe '#add' do - let(:route) { Route.make(space:) } + let(:route) { create(:route, space:) } it 'maps the route' do expect do @@ -114,7 +114,7 @@ module V2 context 'when the process is web' do let(:process_type) { 'web' } - let(:process) { ProcessModel.make(diego: true, app: app, type: process_type, ports: [1234, 5678], health_check_type: 'none') } + let(:process) { create(:process_model, diego: true, app: app, type: process_type, ports: [1234, 5678], health_check_type: 'none') } context 'requesting available port' do let(:requested_port) { 5678 } @@ -224,7 +224,7 @@ module V2 end context 'for a different process type' do - let(:worker_process) { ProcessModel.make(:process, app: app, type: 'worker', ports: [8888]) } + let(:worker_process) { create(:process_model, :process, app: app, type: 'worker', ports: [8888]) } it 'allows a new route mapping' do RouteMappingCreate.new(user_audit_info, route, worker_process, request_attrs, logger).add @@ -246,7 +246,7 @@ module V2 end context 'when the app and route are in different spaces' do - let(:route) { Route.make(space: Space.make) } + let(:route) { create(:route, space: create(:space)) } it 'raises InvalidRouteMapping' do expect do @@ -257,7 +257,7 @@ module V2 end context 'when the route is bound to a route service' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:route) { route_binding.route } let(:process) { ProcessModelFactory.make(space: route.space, diego: true, ports: ports) } @@ -277,8 +277,8 @@ module V2 let(:routing_api_client) { double('routing_api_client', router_group:) } let(:router_group) { double('router_group', type: 'tcp', guid: router_group_guid) } let(:dependency_double) { double('dependency_locator', routing_api_client:) } - let(:tcp_domain) { SharedDomain.make(name: 'tcpdomain.com', router_group_guid: router_group_guid) } - let(:route) { Route.make(domain: tcp_domain, port: 5155, space: space) } + let(:tcp_domain) { create(:shared_domain, name: 'tcpdomain.com', router_group_guid: router_group_guid) } + let(:route) { create(:route, domain: tcp_domain, port: 5155, space: space) } before do allow(CloudController::DependencyLocator).to receive(:instance).and_return(dependency_double) diff --git a/spec/unit/actions/v2/services/service_binding_create_spec.rb b/spec/unit/actions/v2/services/service_binding_create_spec.rb index a3e8a7efb5f..9315282ab8c 100644 --- a/spec/unit/actions/v2/services/service_binding_create_spec.rb +++ b/spec/unit/actions/v2/services/service_binding_create_spec.rb @@ -10,10 +10,10 @@ module VCAP::CloudController let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } let(:volume_mount_services_enabled) { true } - let(:service) { Service.make(bindings_retrievable: true) } - let(:service_plan) { ServicePlan.make(service:) } - let(:app) { AppModel.make } - let(:service_instance) { ManagedServiceInstance.make(space: app.space, service_plan: service_plan) } + let(:service) { create(:service, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:app) { create(:app_model) } + let(:service_instance) { create(:managed_service_instance, space: app.space, service_plan: service_plan) } let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client, unbind: {}) } let(:accepts_incomplete) { false } let(:request) do @@ -206,7 +206,7 @@ module VCAP::CloudController context 'when the instance has another operation in progress' do it 'fails' do - ServiceInstanceOperation.make(service_instance_id: service_instance.id, state: 'in progress') + create(:service_instance_operation, service_instance_id: service_instance.id, state: 'in progress') expect do service_binding_create.create(app, service_instance, message, volume_mount_services_enabled, accepts_incomplete) @@ -244,7 +244,7 @@ module VCAP::CloudController context 'when volume mount services are disabled and the service requires volume_mount' do let(:volume_mount_services_enabled) { false } - let(:service_instance) { ManagedServiceInstance.make(:volume_mount, space_guid: app.space.guid) } + let(:service_instance) { create(:managed_service_instance, :volume_mount, space_guid: app.space.guid) } it 'raises a VolumeMountServiceDisabled error' do expect do @@ -254,8 +254,8 @@ module VCAP::CloudController end context 'when the app and service instance are in different spaces' do - let(:app) { AppModel.make(space: Space.make) } - let(:service_instance) { ManagedServiceInstance.make(space: Space.make) } + let(:app) { create(:app_model, space: create(:space)) } + let(:service_instance) { create(:managed_service_instance, space: create(:space)) } context 'when the service instance has not been shared into the app space' do it 'raises a SpaceMismatch error' do @@ -354,7 +354,7 @@ module VCAP::CloudController end context 'when bindings_retrievable is false' do - let(:service) { Service.make(bindings_retrievable: false) } + let(:service) { create(:service, bindings_retrievable: false) } it 'raises an error' do expect do diff --git a/spec/unit/actions/v2/services/service_binding_delete_spec.rb b/spec/unit/actions/v2/services/service_binding_delete_spec.rb index 519ef851d25..17addf31693 100644 --- a/spec/unit/actions/v2/services/service_binding_delete_spec.rb +++ b/spec/unit/actions/v2/services/service_binding_delete_spec.rb @@ -8,12 +8,12 @@ module VCAP::CloudController let(:user_guid) { 'user-guid' } let(:user_email) { 'user@example.com' } let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } - let(:service_binding) { ServiceBinding.make } + let(:service_binding) { create(:service_binding) } let(:service_binding_url_pattern) { %r{/v2/service_instances/#{service_instance.guid}/service_bindings/} } let(:service_instance) { service_binding.service_instance } describe '#foreground_delete_request' do - let(:service_binding) { ServiceBinding.make } + let(:service_binding) { create(:service_binding) } let(:service_instance) { service_binding.service_instance } let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } let(:service_binding_url_pattern) { %r{/v2/service_instances/#{service_instance.guid}/service_bindings/} } @@ -45,7 +45,7 @@ module VCAP::CloudController context 'when the service instance has another operation in progress' do before do - service_binding.service_instance.service_instance_operation = ServiceInstanceOperation.make(state: 'in progress') + service_binding.service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') end it 'raises an error' do @@ -57,7 +57,7 @@ module VCAP::CloudController context 'when the service binding has create operation in progress' do before do - service_binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress', type: 'create') + service_binding.service_binding_operation = create(:service_binding_operation, state: 'in progress', type: 'create') end it 'deletes the binding' do @@ -68,7 +68,7 @@ module VCAP::CloudController context 'when the service binding has anything other than create operation in progress' do before do - service_binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress', type: 'delete') + service_binding.service_binding_operation = create(:service_binding_operation, state: 'in progress', type: 'delete') end it 'raises an error' do @@ -96,7 +96,7 @@ module VCAP::CloudController end describe '#background_delete_request' do - let(:service_binding) { ServiceBinding.make } + let(:service_binding) { create(:service_binding) } before do allow_any_instance_of(VCAP::Services::ServiceBrokers::V2::Client).to receive(:unbind).and_return({ async: false }) @@ -113,8 +113,8 @@ module VCAP::CloudController end describe '#delete' do - let(:service_binding1) { ServiceBinding.make } - let(:service_binding2) { ServiceBinding.make } + let(:service_binding1) { create(:service_binding) } + let(:service_binding2) { create(:service_binding) } before do allow(VCAP::Services::ServiceClientProvider).to receive(:provide).and_return(client) @@ -160,7 +160,7 @@ module VCAP::CloudController end context 'when the binding already has an operation' do - let(:service_binding_operation) { ServiceBindingOperation.make } + let(:service_binding_operation) { create(:service_binding_operation) } it 'updates the binding operation in the model' do service_binding_delete.delete(service_binding) @@ -257,7 +257,7 @@ module VCAP::CloudController context 'when delete is called with multiple bindings' do it 'returns warnings for all bindings' do - errors, warnings = service_binding_delete.delete([service_binding, ServiceBinding.make]) + errors, warnings = service_binding_delete.delete([service_binding, create(:service_binding)]) expect(warnings).to contain_exactly(expected_warning, expected_warning) expect(errors).to be_empty end diff --git a/spec/unit/actions/v2/services/service_binding_read_spec.rb b/spec/unit/actions/v2/services/service_binding_read_spec.rb index aed7bcb8e0e..d5441f5f7ba 100644 --- a/spec/unit/actions/v2/services/service_binding_read_spec.rb +++ b/spec/unit/actions/v2/services/service_binding_read_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ServiceBindingRead do - let(:service) { Service.make(bindings_retrievable: true) } + let(:service) { create(:service, bindings_retrievable: true) } let(:fake_broker_client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } before do @@ -39,7 +39,7 @@ module VCAP::CloudController end context 'when the broker has bindings_retrievable disabled' do - let(:service) { Service.make(bindings_retrievable: false) } + let(:service) { create(:service, bindings_retrievable: false) } it 'does not try to provide broker client' do expect(VCAP::Services::ServiceClientProvider).not_to receive(:provide) @@ -61,17 +61,17 @@ module VCAP::CloudController describe '#fetch_parameters' do context 'managed service instance' do - let(:service_plan) { ServicePlan.make(service:) } - let(:managed_service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service_plan) { create(:service_plan, service:) } + let(:managed_service_instance) { create(:managed_service_instance, service_plan:) } context 'an app binding' do - let(:service_binding) { ServiceBinding.make(service_instance: managed_service_instance) } + let(:service_binding) { create(:service_binding, service_instance: managed_service_instance) } it_behaves_like 'a managed service instance binding' context 'when an operation is still in progress' do it 'raises "ServiceBindingLockedError"' do - service_binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress') + service_binding.service_binding_operation = create(:service_binding_operation, state: 'in progress') service action = ServiceBindingRead.new @@ -84,15 +84,15 @@ module VCAP::CloudController end context 'a key binding' do - let(:service_binding) { ServiceKey.make(service_instance: managed_service_instance) } + let(:service_binding) { create(:service_key, service_instance: managed_service_instance) } it_behaves_like 'a managed service instance binding' end end context 'user provided service instance' do - let(:user_provided_service_instance) { UserProvidedServiceInstance.make } - let(:service_binding) { ServiceBinding.make(service_instance: user_provided_service_instance) } + let(:user_provided_service_instance) { create(:user_provided_service_instance) } + let(:service_binding) { create(:service_binding, service_instance: user_provided_service_instance) } it 'does not try to provide broker client' do expect(VCAP::Services::ServiceClientProvider).not_to receive(:provide) diff --git a/spec/unit/actions/v3/service_broker_update_spec.rb b/spec/unit/actions/v3/service_broker_update_spec.rb index 0710a24f30d..7253ccb11e7 100644 --- a/spec/unit/actions/v3/service_broker_update_spec.rb +++ b/spec/unit/actions/v3/service_broker_update_spec.rb @@ -11,13 +11,12 @@ module CloudController let(:state) { ServiceBrokerStateEnum::AVAILABLE } let!(:existing_service_broker) do - ServiceBroker.make( - name: 'old-name', - broker_url: 'http://example.org/old-broker-url', - auth_username: 'old-admin', - auth_password: 'not-welcome', - state: state - ) + create(:service_broker, + name: 'old-name', + broker_url: 'http://example.org/old-broker-url', + auth_username: 'old-admin', + auth_password: 'not-welcome', + state: state) end let(:user_audit_info) { instance_double(UserAuditInfo, { user_guid: Sham.guid }) } diff --git a/spec/unit/actions/v3/service_instance_create_managed_spec.rb b/spec/unit/actions/v3/service_instance_create_managed_spec.rb index 5c4540a5d58..1b10f68c959 100644 --- a/spec/unit/actions/v3/service_instance_create_managed_spec.rb +++ b/spec/unit/actions/v3/service_instance_create_managed_spec.rb @@ -17,8 +17,8 @@ module V3 dbl end - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:space_guid) { space.guid } let(:maintenance_info) do { @@ -26,7 +26,7 @@ module V3 'description' => 'amazing plan' } end - let(:service_plan) { ServicePlan.make(maintenance_info:) } + let(:service_plan) { create(:service_plan, maintenance_info:) } let(:plan_guid) { service_plan.guid } let(:name) { 'si-test-name' } let(:arbitrary_parameters) { { foo: 'bar' } } @@ -81,9 +81,9 @@ module V3 end describe 'broker is unavaliable' do - let(:broker) { ServiceBroker.make(state: ServiceBrokerStateEnum::SYNCHRONIZING) } - let(:offering) { Service.make(service_broker: broker) } - let(:service_plan) { ServicePlan.make(service: offering, maintenance_info: maintenance_info) } + let(:broker) { create(:service_broker, state: ServiceBrokerStateEnum::SYNCHRONIZING) } + let(:offering) { create(:service, service_broker: broker) } + let(:service_plan) { create(:service_plan, service: offering, maintenance_info: maintenance_info) } it 'raises' do expect { action.precursor(message:, service_plan:) }.to raise_error( @@ -94,7 +94,7 @@ module V3 end context 'when service instance with the same name already exists' do - let(:instance) { ManagedServiceInstance.make(name:, space:) } + let(:instance) { create(:managed_service_instance, name:, space:) } context "when the last operation is in state 'create in progress'" do before do @@ -239,9 +239,9 @@ module V3 context 'quotas' do context 'when service instance limit has been reached for the space' do before do - quota = SpaceQuotaDefinition.make(total_services: 1, organization: org) + quota = create(:space_quota_definition, total_services: 1, organization: org) quota.add_space(space) - ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end it 'raises' do @@ -255,9 +255,9 @@ module V3 context 'when service instance limit has been reached for the org' do before do - quotas = QuotaDefinition.make(total_services: 1) + quotas = create(:quota_definition, total_services: 1) quotas.add_organization(org) - ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end it 'raises' do @@ -270,10 +270,10 @@ module V3 end context 'when the space does not allow paid services' do - let(:service_plan) { ServicePlan.make(public: true, free: false, active: true) } + let(:service_plan) { create(:service_plan, public: true, free: false, active: true) } before do - quota = SpaceQuotaDefinition.make(non_basic_services_allowed: false, organization: org) + quota = create(:space_quota_definition, non_basic_services_allowed: false, organization: org) quota.add_space(space) end @@ -287,10 +287,10 @@ module V3 end context 'when the org does not allow paid services' do - let(:service_plan) { ServicePlan.make(free: false, public: true, active: true) } + let(:service_plan) { create(:service_plan, free: false, public: true, active: true) } before do - quota = QuotaDefinition.make(non_basic_services_allowed: false) + quota = create(:quota_definition, non_basic_services_allowed: false) quota.add_organization(org) end @@ -452,7 +452,7 @@ module V3 describe '#poll' do let(:provision_dashboard_url) { 'http://your-instance.com' } let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make.tap do |i| + create(:managed_service_instance).tap do |i| i.save_with_new_operation( { service_plan: service_plan, @@ -587,8 +587,8 @@ module V3 context 'retrieving service instance' do context 'when service instance is not retrievable' do - let(:service_offering) { Service.make(instances_retrievable: false) } - let(:service_plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, instances_retrievable: false) } + let(:service_plan) { create(:service_plan, service: service_offering) } it 'does not call fetch service instance' do action.poll(service_instance) @@ -598,8 +598,8 @@ module V3 end context 'when service instance is retrievable' do - let(:service) { Service.make(instances_retrievable: true) } - let(:service_plan) { ServicePlan.make(service:) } + let(:service) { create(:service, instances_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } it 'fetches service instance' do action.poll(service_instance) diff --git a/spec/unit/actions/v3/service_instance_delete_spec.rb b/spec/unit/actions/v3/service_instance_delete_spec.rb index 4dfa1419e35..55ad84a30eb 100644 --- a/spec/unit/actions/v3/service_instance_delete_spec.rb +++ b/spec/unit/actions/v3/service_instance_delete_spec.rb @@ -19,7 +19,7 @@ module V3 describe '#blocking_operation_in_progress?' do describe 'managed service instance' do let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make.tap do |si| + create(:managed_service_instance).tap do |si| si.save_with_new_operation({}, { type: last_operation_type, state: last_operation_state }) end end @@ -63,7 +63,7 @@ module V3 describe 'user provided service instances' do let!(:service_instance) do - VCAP::CloudController::UserProvidedServiceInstance.make.tap do |si| + create(:user_provided_service_instance).tap do |si| si.save_with_new_operation({}, { type: 'create', state: 'succeeded' }) end end @@ -81,23 +81,22 @@ module V3 context 'user-provided service instances' do let!(:service_instance) do - si = VCAP::CloudController::UserProvidedServiceInstance.make( - guid: 'bommel', - name: 'foo', - credentials: { - foo: 'bar', - baz: 'qux' - }, - syslog_drain_url: 'https://foo.com', - route_service_url: 'https://bar.com', - tags: %w[accounting mongodb] - ) - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') - - si.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make(type: 'update', state: 'succeeded') + si = create(:user_provided_service_instance, + guid: 'bommel', + name: 'foo', + credentials: { + foo: 'bar', + baz: 'qux' + }, + syslog_drain_url: 'https://foo.com', + route_service_url: 'https://bar.com', + tags: %w[accounting mongodb]) + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + + si.service_instance_operation = create(:service_instance_operation, type: 'update', state: 'succeeded') si end let(:deprovision_response) do @@ -162,12 +161,12 @@ module V3 end end - let!(:route_binding_1) { RouteBinding.make(service_instance:) } - let!(:route_binding_2) { RouteBinding.make(service_instance:) } - let!(:route_binding_3) { RouteBinding.make(service_instance:) } - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } - let!(:service_binding_3) { ServiceBinding.make(service_instance:) } + let!(:route_binding_1) { create(:route_binding, service_instance:) } + let!(:route_binding_2) { create(:route_binding, service_instance:) } + let!(:route_binding_3) { create(:route_binding, service_instance:) } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } + let!(:service_binding_3) { create(:service_binding, service_instance:) } before do allow(ServiceRouteBindingDelete).to receive(:new).and_return(delete_route_binding_action) @@ -225,7 +224,7 @@ module V3 end context 'managed service instances' do - let!(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let!(:service_instance) { create(:managed_service_instance) } let(:deprovision_response) do { @@ -408,15 +407,15 @@ module V3 end end - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } - let!(:service_binding_3) { ServiceBinding.make(service_instance:) } - let!(:service_key_1) { ServiceKey.make(service_instance:) } - let!(:service_key_2) { ServiceKey.make(service_instance:) } - let!(:service_key_3) { ServiceKey.make(service_instance:) } - let!(:shared_space_1) { Space.make.tap { |s| service_instance.add_shared_space(s) } } - let!(:shared_space_2) { Space.make.tap { |s| service_instance.add_shared_space(s) } } - let!(:shared_space_3) { Space.make.tap { |s| service_instance.add_shared_space(s) } } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } + let!(:service_binding_3) { create(:service_binding, service_instance:) } + let!(:service_key_1) { create(:service_key, service_instance:) } + let!(:service_key_2) { create(:service_key, service_instance:) } + let!(:service_key_3) { create(:service_key, service_instance:) } + let!(:shared_space_1) { create(:space).tap { |s| service_instance.add_shared_space(s) } } + let!(:shared_space_2) { create(:space).tap { |s| service_instance.add_shared_space(s) } } + let!(:shared_space_3) { create(:space).tap { |s| service_instance.add_shared_space(s) } } before do allow(ServiceCredentialBindingDelete).to receive(:new) { |type, _| type == :credential ? delete_service_binding_action : delete_service_key_action } @@ -490,10 +489,10 @@ module V3 context 'async broker response' do context 'route binding' do - let!(:service_offering) { Service.make(requires: %w[route_forwarding]) } - let!(:service_plan) { ServicePlan.make(service: service_offering) } - let!(:service_instance) { ManagedServiceInstance.make(service_plan:) } - let!(:route_binding) { RouteBinding.make(service_instance:) } + let!(:service_offering) { create(:service, requires: %w[route_forwarding]) } + let!(:service_plan) { create(:service_plan, service: service_offering) } + let!(:service_instance) { create(:managed_service_instance, service_plan:) } + let!(:route_binding) { create(:route_binding, service_instance:) } let(:delete_route_binding_action) do double(ServiceRouteBindingDelete).tap do |d| allow(d).to receive(:delete).and_return({ finished: false }) @@ -517,7 +516,7 @@ module V3 end context 'service bindings' do - let!(:service_binding) { ServiceBinding.make(service_instance:) } + let!(:service_binding) { create(:service_binding, service_instance:) } let(:delete_service_binding_action) do double(ServiceCredentialBindingDelete).tap do |d| allow(d).to receive(:delete).and_return({ finished: false }) @@ -541,7 +540,7 @@ module V3 end context 'service keys' do - let!(:service_key) { ServiceKey.make(service_instance:) } + let!(:service_key) { create(:service_key, service_instance:) } let(:delete_service_binding_action) do double(ServiceCredentialBindingDelete).tap do |d| allow(d).to receive(:delete).and_return({ finished: false }) @@ -570,7 +569,7 @@ module V3 describe '#poll' do let!(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make.tap do |i| + create(:managed_service_instance).tap do |i| i.save_with_new_operation( {}, { @@ -749,7 +748,7 @@ module V3 describe '#update_last_operation_with_failure' do let!(:service_instance) do - ManagedServiceInstance.make.tap do |i| + create(:managed_service_instance).tap do |i| i.save_with_new_operation({}, { type: 'delete', state: 'in progress', diff --git a/spec/unit/actions/v3/service_instance_update_managed_spec.rb b/spec/unit/actions/v3/service_instance_update_managed_spec.rb index 498e47df82a..10edc1799ec 100644 --- a/spec/unit/actions/v3/service_instance_update_managed_spec.rb +++ b/spec/unit/actions/v3/service_instance_update_managed_spec.rb @@ -38,32 +38,31 @@ module V3 dbl end - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:space_guid) { space.guid } let(:original_maintenance_info) { { version: '2.1.0', description: 'original version' } } - let(:original_service_offering) { Service.make(plan_updateable: true) } - let(:original_service_plan) { ServicePlan.make(service: original_service_offering, maintenance_info: original_maintenance_info) } + let(:original_service_offering) { create(:service, plan_updateable: true) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering, maintenance_info: original_maintenance_info) } let(:original_plan_guid) { original_service_plan.guid } let(:original_name) { 'si-test-name' } let(:new_name) { 'new-si-test-name' } let(:original_dashboard_url) { 'http://your-og-instance.com' } let!(:original_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - guid: 'bommel', - service_plan: original_service_plan, - name: original_name, - tags: %w[accounting mongodb], - space: space, - maintenance_info: original_maintenance_info, - dashboard_url: original_dashboard_url - ) - - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') - - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - VCAP::CloudController::ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + si = create(:managed_service_instance, + guid: 'bommel', + service_plan: original_service_plan, + name: original_name, + tags: %w[accounting mongodb], + space: space, + maintenance_info: original_maintenance_info, + dashboard_url: original_dashboard_url) + + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') si end @@ -89,7 +88,7 @@ module V3 } end - let(:new_plan) { ServicePlan.make(service: original_service_offering) } + let(:new_plan) { create(:service_plan, service: original_service_offering) } it 'does not change the original service instance object' do action.preflight! @@ -99,7 +98,7 @@ module V3 describe 'invalid name updates' do context 'when the new name is already taken' do - let(:instance_in_same_space) { ServiceInstance.make(space: original_instance.space) } + let(:instance_in_same_space) { create(:service_instance, space: original_instance.space) } let(:body) { { name: instance_in_same_space.name } } it 'raises' do @@ -112,7 +111,7 @@ module V3 end context 'when changing the name of a shared service instance' do - let(:shared_space) { Space.make } + let(:shared_space) { create(:space) } let(:body) { { name: 'funky-new-name' } } it 'raises' do @@ -141,8 +140,8 @@ module V3 end context 'when changing the plan and plan_updateable=false' do - let(:original_service_plan) { ServicePlan.make(service: original_service_offering, plan_updateable: false) } - let(:new_service_plan) { ServicePlan.make(service: original_service_offering) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering, plan_updateable: false) } + let(:new_service_plan) { create(:service_plan, service: original_service_offering) } it 'raises' do expect do @@ -155,15 +154,14 @@ module V3 context 'when the space does not allow paid services' do before do - quota = SpaceQuotaDefinition.make( - non_basic_services_allowed: false, - organization: org - ) + quota = create(:space_quota_definition, + non_basic_services_allowed: false, + organization: org) quota.add_space(space) end - let(:original_service_plan) { ServicePlan.make(service: original_service_offering, free: true) } - let(:new_service_plan) { ServicePlan.make(service: original_service_offering, free: false) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering, free: true) } + let(:new_service_plan) { create(:service_plan, service: original_service_offering, free: false) } it 'raises' do expect do @@ -176,12 +174,12 @@ module V3 context 'when the org does not allow paid services' do before do - quota = QuotaDefinition.make(non_basic_services_allowed: false) + quota = create(:quota_definition, non_basic_services_allowed: false) quota.add_organization(org) end - let(:original_service_plan) { ServicePlan.make(service: original_service_offering, free: true) } - let(:new_service_plan) { ServicePlan.make(service: original_service_offering, free: false) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering, free: true) } + let(:new_service_plan) { create(:service_plan, service: original_service_offering, free: false) } it 'raises' do expect do @@ -193,13 +191,12 @@ module V3 end context 'when changing to a non-bindable plan' do - let(:new_service_plan) { ServicePlan.make(service: original_service_offering, bindable: false) } + let(:new_service_plan) { create(:service_plan, service: original_service_offering, bindable: false) } before do - ServiceBinding.make( - app: AppModel.make(space:), - service_instance: original_instance - ) + create(:service_binding, + app: create(:app_model, space:), + service_instance: original_instance) end it 'raises' do @@ -311,7 +308,7 @@ module V3 end context 'when current plan does not support maintenance_info' do - let(:original_service_plan) { ServicePlan.make(service: original_service_offering) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering) } it 'raises' do expect do @@ -348,7 +345,7 @@ module V3 } end - let(:new_plan) { ServicePlan.make(service: original_service_offering, maintenance_info: { version: '4.2.1' }) } + let(:new_plan) { create(:service_plan, service: original_service_offering, maintenance_info: { version: '4.2.1' }) } it 'raises' do expect do @@ -361,7 +358,7 @@ module V3 end describe 'when the plan is inactive' do - let(:original_service_plan) { ServicePlan.make(service: original_service_offering, maintenance_info: original_maintenance_info, active: false) } + let(:original_service_plan) { create(:service_plan, service: original_service_offering, maintenance_info: original_maintenance_info, active: false) } context 'when updating parameters' do let(:body) { { parameters: { param1: 'value' } } } @@ -404,7 +401,7 @@ module V3 let(:body) { { name: 'new name' } } context 'when the offering allows context updates' do - let(:original_service_offering) { Service.make(allow_context_updates: true) } + let(:original_service_offering) { create(:service, allow_context_updates: true) } it 'raises an error' do expect do @@ -424,10 +421,9 @@ module V3 let(:body) { { maintenance_info: { version: original_maintenance_info[:version] } } } let(:original_service_plan) do - ServicePlan.make( - service: original_service_offering, - maintenance_info: { version: '2.2.0', description: 'new version of plan' } - ) + create(:service_plan, + service: original_service_offering, + maintenance_info: { version: '2.2.0', description: 'new version of plan' }) end it "returns 'false' for update_broker_needed?" do @@ -556,7 +552,7 @@ module V3 context 'when updating name' do context 'when the offering does not allow context updates' do - let(:original_service_offering) { Service.make(allow_context_updates: false) } + let(:original_service_offering) { create(:service, allow_context_updates: false) } it 'succeeds' do expect { action.update_sync }.not_to raise_error @@ -723,7 +719,7 @@ module V3 describe '#enqueue_update' do context 'when the update requires communication with the broker' do - let(:new_plan) { ServicePlan.make } + let(:new_plan) { create(:service_plan) } let(:body) do { @@ -748,25 +744,24 @@ module V3 end context 'name change requested' do - let!(:original_service_plan) { VCAP::CloudController::ServicePlan.make(service: offering) } + let!(:original_service_plan) { create(:service_plan, service: offering) } let!(:original_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - name: 'foo', - service_plan: original_service_plan - ) + create(:managed_service_instance, + name: 'foo', + service_plan: original_service_plan) end let(:body) { { name: 'new-different-name' } } context 'context update is allowed in the broker' do - let!(:offering) { VCAP::CloudController::Service.make(allow_context_updates: true) } + let!(:offering) { create(:service, allow_context_updates: true) } it_behaves_like 'async service instance update' end context 'context update is not allowed in the broker' do - let!(:offering) { VCAP::CloudController::Service.make(allow_context_updates: false) } + let!(:offering) { create(:service, allow_context_updates: false) } it "returns 'false' for update_broker_needed?" do expect(action).not_to be_update_broker_needed @@ -776,18 +771,16 @@ module V3 context 'maintenance_info requested' do let(:original_service_plan) do - ServicePlan.make( - service: original_service_offering, - maintenance_info: { version: '2.2.0', description: 'new version of plan' } - ) + create(:service_plan, + service: original_service_offering, + maintenance_info: { version: '2.2.0', description: 'new version of plan' }) end let!(:original_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - name: 'foo', - service_plan: original_service_plan, - maintenance_info: original_maintenance_info - ) + create(:managed_service_instance, + name: 'foo', + service_plan: original_service_plan, + maintenance_info: original_maintenance_info) end let(:body) { { maintenance_info: { version: '2.2.0' } } } @@ -849,7 +842,7 @@ module V3 update: [update_response, nil] }) end - let(:new_plan) { ServicePlan.make } + let(:new_plan) { create(:service_plan) } let(:new_name) { 'new-name' } let(:new_tags) { %w[bar quz] } let(:arbitrary_parameters) { { foo: 'bar' } } @@ -1078,11 +1071,10 @@ module V3 context 'when service plan is changing' do let(:new_service_plan) do - ServicePlan.make( - service: original_service_offering, - maintenance_info: { version: '2.2.0' }, - public: true - ) + create(:service_plan, + service: original_service_offering, + maintenance_info: { version: '2.2.0' }, + public: true) end let(:body) do { @@ -1336,14 +1328,13 @@ module V3 describe '#poll' do let!(:original_instance) do - si = VCAP::CloudController::ManagedServiceInstance.make( - service_plan: original_service_plan, - name: original_name, - tags: %w[accounting mongodb], - space: space, - maintenance_info: original_maintenance_info, - dashboard_url: original_dashboard_url - ) + si = create(:managed_service_instance, + service_plan: original_service_plan, + name: original_name, + tags: %w[accounting mongodb], + space: space, + maintenance_info: original_maintenance_info, + dashboard_url: original_dashboard_url) si.save_with_new_operation( {}, { @@ -1352,10 +1343,10 @@ module V3 broker_provided_operation: operation_id } ) - ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - ServiceInstanceLabelModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') - ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') - ServiceInstanceAnnotationModel.make(service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_label_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'tail', value: 'fluffy') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'to_delete', value: 'value') + create(:service_instance_annotation_model, service_instance: si, key_prefix: 'pre.fix', key_name: 'fox', value: 'bushy') si end @@ -1375,7 +1366,7 @@ module V3 }) end - let(:new_plan) { ServicePlan.make } + let(:new_plan) { create(:service_plan) } let(:new_name) { 'new-name' } let(:new_tags) { %w[bar quz] } let(:arbitrary_parameters) { { foo: 'bar' } } @@ -1504,8 +1495,8 @@ module V3 context 'retrieving service instance' do context 'when service instance is not retrievable' do - let(:service_offering) { Service.make(instances_retrievable: false) } - let(:new_plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, instances_retrievable: false) } + let(:new_plan) { create(:service_plan, service: service_offering) } it 'does not call fetch service instance' do action.poll @@ -1515,8 +1506,8 @@ module V3 end context 'when service instance is retrievable' do - let(:service) { Service.make(instances_retrievable: true) } - let(:new_plan) { ServicePlan.make(service:) } + let(:service) { create(:service, instances_retrievable: true) } + let(:new_plan) { create(:service_plan, service:) } it 'fetches service instance' do action.poll diff --git a/spec/unit/actions/v3/service_plan_visibility_delete_spec.rb b/spec/unit/actions/v3/service_plan_visibility_delete_spec.rb index 102be6b2176..9bb79f7bd07 100644 --- a/spec/unit/actions/v3/service_plan_visibility_delete_spec.rb +++ b/spec/unit/actions/v3/service_plan_visibility_delete_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe ServicePlanVisibilityDelete do describe '.delete' do - let!(:visibility_1) { ServicePlanVisibility.make } - let!(:visibility_2) { ServicePlanVisibility.make } + let!(:visibility_1) { create(:service_plan_visibility) } + let!(:visibility_2) { create(:service_plan_visibility) } it 'deletes the service plan visibility' do ServicePlanVisibilityDelete.delete(visibility_1) diff --git a/spec/unit/actions/v3/service_plan_visibility_update_spec.rb b/spec/unit/actions/v3/service_plan_visibility_update_spec.rb index 4bf02fa5df8..04dbe7391e3 100644 --- a/spec/unit/actions/v3/service_plan_visibility_update_spec.rb +++ b/spec/unit/actions/v3/service_plan_visibility_update_spec.rb @@ -10,7 +10,7 @@ module V3 describe 'update' do context 'when the plan visibility is currently "admin"' do - let(:service_plan) { ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } context 'and its being updated to "public"' do let(:message) { ServicePlanVisibilityUpdateMessage.new({ type: 'public' }) } @@ -22,8 +22,8 @@ module V3 end context 'and its being updated do "organization"' do - let(:org_guid) { Organization.make.guid } - let(:other_org_guid) { Organization.make.guid } + let(:org_guid) { create(:organization).guid } + let(:other_org_guid) { create(:organization).guid } let(:params) do { type: 'organization', organizations: [{ guid: org_guid }, { guid: other_org_guid }] } end @@ -42,7 +42,7 @@ module V3 end context 'when the plan visibility is currently "public"' do - let(:service_plan) { ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } context 'and its being updated to "admin"' do let(:message) { ServicePlanVisibilityUpdateMessage.new({ type: 'admin' }) } @@ -54,8 +54,8 @@ module V3 end context 'and its being updated do "organization"' do - let(:org_guid) { Organization.make.guid } - let(:other_org_guid) { Organization.make.guid } + let(:org_guid) { create(:organization).guid } + let(:other_org_guid) { create(:organization).guid } let(:params) do { type: 'organization', organizations: [{ guid: org_guid }, { guid: other_org_guid }] } end @@ -74,18 +74,18 @@ module V3 end context 'when the plan visibility is currently "organization"' do - let(:org) { Organization.make } - let(:other_org) { Organization.make } + let(:org) { create(:organization) } + let(:other_org) { create(:organization) } let(:service_plan) do - plan = ServicePlan.make(public: false) - ServicePlanVisibility.make(organization: org, service_plan: plan) - ServicePlanVisibility.make(organization: other_org, service_plan: plan) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, organization: org, service_plan: plan) + create(:service_plan_visibility, organization: other_org, service_plan: plan) plan end context 'and its being updated to "organization"' do - let(:new_org_guid) { Organization.make.guid } + let(:new_org_guid) { create(:organization).guid } let(:params) do { type: 'organization', organizations: [{ guid: new_org_guid }] } end @@ -152,12 +152,10 @@ module V3 context 'when the plan visibility is currently "space"' do let(:service_plan) do - ServicePlan.make( - public: false, - service: Service.make( - service_broker: ServiceBroker.make(space: Space.make) - ) - ) + create(:service_plan, + public: false, + service: create(:service, + service_broker: create(:service_broker, space: create(:space)))) end let(:message) { ServicePlanVisibilityUpdateMessage.new({ type: 'admin' }) } @@ -171,7 +169,7 @@ module V3 end context 'when the model fails to update' do - let(:service_plan) { ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } let(:message) { ServicePlanVisibilityUpdateMessage.new({ type: 'public' }) } before do @@ -189,7 +187,7 @@ module V3 end context 'when the organization does not exist' do - let(:service_plan) { ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } let(:message) { ServicePlanVisibilityUpdateMessage.new({ type: 'organization', organizations: [{ guid: 'some-fake-org' }] }) } it 'errors nicely' do diff --git a/spec/unit/collection_transformers/credhub_credential_populator_spec.rb b/spec/unit/collection_transformers/credhub_credential_populator_spec.rb index 85d3ada1b68..a5687416084 100644 --- a/spec/unit/collection_transformers/credhub_credential_populator_spec.rb +++ b/spec/unit/collection_transformers/credhub_credential_populator_spec.rb @@ -3,14 +3,14 @@ module VCAP::CloudController RSpec.describe CredhubCredentialPopulator do describe '#transform' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:instance) { ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } let(:service_keys) do [ - ServiceKey.make(:credhub_reference, name: 'credhub-key-1', service_instance: instance), - ServiceKey.make(name: 'non-credhub-key-1', service_instance: instance, credentials: non_credhub_creds), - ServiceKey.make(:credhub_reference, name: 'credhub-key-2', service_instance: instance) + create(:service_key, :credhub_reference, name: 'credhub-key-1', service_instance: instance), + create(:service_key, name: 'non-credhub-key-1', service_instance: instance, credentials: non_credhub_creds), + create(:service_key, :credhub_reference, name: 'credhub-key-2', service_instance: instance) ] end let(:credhub_cred_1) { { 'username' => 'user' } } diff --git a/spec/unit/collection_transformers/usernames_and_roles_populator_spec.rb b/spec/unit/collection_transformers/usernames_and_roles_populator_spec.rb index 76af8a58f1c..b3607a8cc66 100644 --- a/spec/unit/collection_transformers/usernames_and_roles_populator_spec.rb +++ b/spec/unit/collection_transformers/usernames_and_roles_populator_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe UsernamesAndRolesPopulator do let(:uaa_client) { double(UaaClient) } let(:username_populator) { UsernamesAndRolesPopulator.new(uaa_client) } - let(:user1) { User.make(guid: '1') } - let(:user2) { User.make(guid: '2') } + let(:user1) { create(:user, guid: '1') } + let(:user2) { create(:user, guid: '2') } let(:users) { [user1, user2] } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } before do allow(uaa_client).to receive(:usernames_for_ids).with(%w[1 2]).and_return({ diff --git a/spec/unit/controllers/base/base_controller_spec.rb b/spec/unit/controllers/base/base_controller_spec.rb index 18610b4af1c..5ac844ebaf7 100644 --- a/spec/unit/controllers/base/base_controller_spec.rb +++ b/spec/unit/controllers/base/base_controller_spec.rb @@ -80,7 +80,7 @@ def self.translate_validation_exception(_error, _attrs) end end - let(:user) { User.make } + let(:user) { create(:user) } before do allow_any_instance_of(TestController).to receive(:logger).and_return(logger) diff --git a/spec/unit/controllers/base/model_controller_spec.rb b/spec/unit/controllers/base/model_controller_spec.rb index 68e8fe1b611..b8b366da241 100644 --- a/spec/unit/controllers/base/model_controller_spec.rb +++ b/spec/unit/controllers/base/model_controller_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe RestController::ModelController do - let(:user) { User.make(active: true) } + let(:user) { create(:user, active: true) } let(:dep) do { object_renderer: nil, @@ -110,7 +110,7 @@ module VCAP::CloudController expect(TestModel).to receive(:create_from_hash) { calls << :create_from_hash - TestModel.make + create(:test_model) } expect_any_instance_of(TestModelsController).to receive(:after_create).with(instance_of(TestModel)) do @@ -179,7 +179,7 @@ module VCAP::CloudController let(:redact_request_attributes) { { 'redacted' => {} } } it 'attempts to redact the attributes' do - expect(TestModelRedact).to receive(:create_from_hash) { TestModelRedact.make } + expect(TestModelRedact).to receive(:create_from_hash) { create(:test_model_redact) } expect_any_instance_of(TestModelRedactController).to receive(:redact_attributes).with(:create, redact_request_attributes) set_current_user_as_admin @@ -192,7 +192,7 @@ module VCAP::CloudController describe '#read' do context 'when the guid matches a record' do - let!(:model) { TestModel.make } + let!(:model) { create(:test_model) } it 'returns not authorized if user does not have access' do set_current_user(user) @@ -217,7 +217,7 @@ module VCAP::CloudController end describe '#update' do - let!(:model) { TestModel.make } + let!(:model) { create(:test_model) } let(:fields) { { 'unique_value' => 'something' } } before { set_current_user_as_admin } @@ -288,7 +288,7 @@ module VCAP::CloudController end context 'with attributes for redacting' do - let!(:model) { TestModelRedact.make } + let!(:model) { create(:test_model_redact) } let(:request_attributes) { { redacted: { secret: 'super secret data' } } } let(:redact_request_attributes) { { 'redacted' => { 'secret' => 'super secret data' } } } @@ -302,7 +302,7 @@ module VCAP::CloudController end describe '#delete' do - let!(:model) { TestModel.make } + let!(:model) { create(:test_model) } let(:params) { {} } before { set_current_user_as_admin } @@ -398,9 +398,9 @@ def run_delayed_job describe '#enumerate' do let(:timestamp) { Time.now.utc.change(usec: 0) } - let!(:model1) { TestModel.make(created_at: timestamp, sortable_value: 'zelda') } - let!(:model2) { TestModel.make(created_at: timestamp + 1.second, sortable_value: 'artichoke') } - let!(:model3) { TestModel.make(created_at: timestamp + 2.seconds, sortable_value: 'marigold') } + let!(:model1) { create(:test_model, created_at: timestamp, sortable_value: 'zelda') } + let!(:model2) { create(:test_model, created_at: timestamp + 1.second, sortable_value: 'artichoke') } + let!(:model3) { create(:test_model, created_at: timestamp + 2.seconds, sortable_value: 'marigold') } before { set_current_user_as_admin } @@ -446,8 +446,8 @@ def run_delayed_job describe 'using query parameters' do it 'returns matching results when querying for equality' do - found_model = TestModel.make(unique_value: 'value1') - TestModel.make(unique_value: 'value2') + found_model = create(:test_model, unique_value: 'value1') + create(:test_model, unique_value: 'value2') get '/v2/test_models?q=unique_value:value1' @@ -577,7 +577,7 @@ def run_delayed_job end it 'returns 400 error when validation fails on create' do - TestModel.make(unique_value: 'unique') + create(:test_model, unique_value: 'unique') post '/v2/test_models', Oj.dump({ required_attr: true, unique_value: 'unique' }) expect(last_response.status).to eq(400) expect(decoded_response['code']).to eq 999_999_998 @@ -585,8 +585,8 @@ def run_delayed_job end it 'returns 400 error when validation fails on update' do - TestModel.make(unique_value: 'unique') - test_model = TestModel.make(unique_value: 'not-unique') + create(:test_model, unique_value: 'unique') + test_model = create(:test_model, unique_value: 'not-unique') put "/v2/test_models/#{test_model.guid}", Oj.dump({ unique_value: 'unique' }) expect(last_response.status).to eq(400) expect(decoded_response['code']).to eq 999_999_998 @@ -599,9 +599,9 @@ def run_delayed_job before { set_current_user_as_admin } describe 'permissions' do - let(:model) { TestModel.make } - let(:associated_model1) { TestModelManyToOne.make } - let(:associated_model2) { TestModelManyToOne.make(test_model: model) } + let(:model) { create(:test_model) } + let(:associated_model1) { create(:test_model_many_to_one) } + let(:associated_model2) { create(:test_model_many_to_one, test_model: model) } context 'when adding an associated object' do it 'succeeds when user has access to both objects' do @@ -649,9 +649,9 @@ def run_delayed_job end describe 'to_many' do - let(:model) { TestModel.make } - let(:associated_model1) { TestModelManyToMany.make } - let(:associated_model2) { TestModelManyToMany.make } + let(:model) { create(:test_model) } + let(:associated_model1) { create(:test_model_many_to_many) } + let(:associated_model2) { create(:test_model_many_to_many) } describe 'update' do it 'allows associating nested models' do @@ -768,8 +768,8 @@ def run_delayed_job end describe 'to_one' do - let(:model) { TestModelManyToOne.make } - let(:associated_model) { TestModel.make } + let(:model) { create(:test_model_many_to_one) } + let(:associated_model) { create(:test_model) } before do model.test_model = associated_model diff --git a/spec/unit/controllers/internal/download_droplets_controller_spec.rb b/spec/unit/controllers/internal/download_droplets_controller_spec.rb index 2150498c0d3..e66b938d2e8 100644 --- a/spec/unit/controllers/internal/download_droplets_controller_spec.rb +++ b/spec/unit/controllers/internal/download_droplets_controller_spec.rb @@ -29,9 +29,9 @@ module VCAP::CloudController CloudController::DependencyLocator.instance.droplet_blobstore end - let(:v3_app) { AppModel.make(droplet:) } - let(:process) { ProcessModel.make(app: v3_app) } - let(:droplet) { DropletModel.make(state: 'STAGED') } + let(:v3_app) { create(:app_model, droplet:) } + let(:process) { create(:process, app: v3_app) } + let(:droplet) { create(:droplet_model, state: 'STAGED') } before do Fog.unmock! @@ -147,9 +147,9 @@ def upload_droplet CloudController::DependencyLocator.instance.droplet_blobstore end - let(:v3_app) { AppModel.make(droplet:) } - let(:process) { ProcessModel.make(app: v3_app) } - let(:droplet) { DropletModel.make(state: 'STAGED') } + let(:v3_app) { create(:app_model, droplet:) } + let(:process) { create(:process, app: v3_app) } + let(:droplet) { create(:droplet_model, state: 'STAGED') } before do Fog.unmock! @@ -167,7 +167,7 @@ def upload_droplet(target_droplet=droplet) end context 'when using with a revision' do - let(:new_droplet) { DropletModel.make(state: 'STAGED') } + let(:new_droplet) { create(:droplet_model, state: 'STAGED') } it 'succeeds when the the revisions droplet doesnt match the processes "desired" droplet' do upload_droplet @@ -175,7 +175,7 @@ def upload_droplet(target_droplet=droplet) new_droplet.reload v3_app.update(revisions_enabled: true) - revision = RevisionModel.make(app: v3_app, droplet: new_droplet) + revision = create(:revision_model, app: v3_app, droplet: new_droplet) process.update(revision:) get "/internal/v4/droplets/#{process.guid}/#{new_droplet.checksum}/download" @@ -254,7 +254,7 @@ def upload_droplet(target_droplet=droplet) end context 'when using with a revision' do - let(:new_droplet) { DropletModel.make(state: 'STAGED') } + let(:new_droplet) { create(:droplet_model, state: 'STAGED') } it 'succeeds when the the revisions droplet doesnt match the processes "desired" droplet' do upload_droplet @@ -265,7 +265,7 @@ def upload_droplet(target_droplet=droplet) new_droplet.reload v3_app.update(revisions_enabled: true) - revision = RevisionModel.make(app: v3_app, droplet: new_droplet) + revision = create(:revision_model, app: v3_app, droplet: new_droplet) process.update(revision:) get "/internal/v4/droplets/#{process.guid}/#{new_droplet.checksum}/download" diff --git a/spec/unit/controllers/internal/log_access_controller_spec.rb b/spec/unit/controllers/internal/log_access_controller_spec.rb index 6f53760dcf2..1e466984462 100644 --- a/spec/unit/controllers/internal/log_access_controller_spec.rb +++ b/spec/unit/controllers/internal/log_access_controller_spec.rb @@ -5,10 +5,10 @@ module VCAP::CloudController RSpec.describe LogAccessController do - let(:app_model) { VCAP::CloudController::AppModel.make(enable_ssh: true) } + let(:app_model) { create(:app_model, enable_ssh: true) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:logger) { instance_double(Steno::Logger) } let(:log_access_controller) do diff --git a/spec/unit/controllers/internal/packages_controller_spec.rb b/spec/unit/controllers/internal/packages_controller_spec.rb index 267445c9709..8902fa07b51 100644 --- a/spec/unit/controllers/internal/packages_controller_spec.rb +++ b/spec/unit/controllers/internal/packages_controller_spec.rb @@ -7,7 +7,7 @@ module Internal RSpec.describe PackagesController do describe '#update' do let!(:package) do - VCAP::CloudController::PackageModel.make(state: VCAP::CloudController::PackageModel::PENDING_STATE) + create(:package_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) end let(:request_body) do { diff --git a/spec/unit/controllers/internal/staging_completion_controller_spec.rb b/spec/unit/controllers/internal/staging_completion_controller_spec.rb index eb338221466..92e20725d79 100644 --- a/spec/unit/controllers/internal/staging_completion_controller_spec.rb +++ b/spec/unit/controllers/internal/staging_completion_controller_spec.rb @@ -10,11 +10,11 @@ module VCAP::CloudController let(:buildpack_name) { 'the-pleasant-buildpack' } let(:buildpack_other_name) { 'valley' } let(:buildpack_version) { '3.1' } - let!(:buildpack) { Buildpack.make(name: buildpack_name, sha256_checksum: 'mammoth') } + let!(:buildpack) { create(:buildpack, name: buildpack_name, sha256_checksum: 'mammoth') } let(:buildpack2_name) { 'my-brilliant-buildpack' } let(:buildpack2_other_name) { 'launderette' } let(:buildpack2_version) { '95' } - let!(:buildpack2) { Buildpack.make(name: buildpack2_name, sha256_checksum: 'languid') } + let!(:buildpack2) { create(:buildpack, name: buildpack2_name, sha256_checksum: 'languid') } let(:buildpack_key) { buildpack.key } let(:detected_buildpack) { 'detected_buildpack' } @@ -54,15 +54,15 @@ module VCAP::CloudController context 'staging a package through /droplet_completed (legacy for rolling deploy)' do let(:url) { "/internal/v3/staging/#{staging_guid}/droplet_completed" } - let(:staged_app) { AppModel.make } - let(:package) { PackageModel.make(state: 'READY', app_guid: staged_app.guid) } - let(:droplet) { DropletModel.make(package_guid: package.guid, app_guid: staged_app.guid, state: DropletModel::STAGING_STATE) } + let(:staged_app) { create(:app_model) } + let(:package) { create(:package_model, state: 'READY', app_guid: staged_app.guid) } + let(:droplet) { create(:droplet_model, package_guid: package.guid, app_guid: staged_app.guid, state: DropletModel::STAGING_STATE) } let(:staging_guid) { droplet.guid } context 'when it is a docker app' do - let(:staged_app) { AppModel.make(:docker) } - let(:package) { PackageModel.make(:docker, state: 'READY', app_guid: staged_app.guid) } - let(:droplet) { DropletModel.make(:docker, package_guid: package.guid, app_guid: staged_app.guid, state: DropletModel::STAGING_STATE) } + let(:staged_app) { create(:app_model, :docker) } + let(:package) { create(:package_model, :docker, state: 'READY', app_guid: staged_app.guid) } + let(:droplet) { create(:droplet_model, :docker, package_guid: package.guid, app_guid: staged_app.guid, state: DropletModel::STAGING_STATE) } it 'calls the stager with a build created from the droplet and the response' do expect_any_instance_of(Diego::Stager).to receive(:staging_complete).with(instance_of(BuildModel), staging_response, false) @@ -205,10 +205,10 @@ module VCAP::CloudController describe '/build_completed' do let(:url) { "/internal/v3/staging/#{staging_guid}/build_completed" } - let(:staged_app) { AppModel.make } - let(:package) { PackageModel.make(state: 'READY', app_guid: staged_app.guid) } - let!(:droplet) { DropletModel.make } - let(:build) { BuildModel.make(package_guid: package.guid, app: staged_app) } + let(:staged_app) { create(:app_model) } + let(:package) { create(:package_model, state: 'READY', app_guid: staged_app.guid) } + let!(:droplet) { create(:droplet_model) } + let(:build) { create(:build_model, package_guid: package.guid, app: staged_app) } let(:staging_guid) { build.guid } let(:buildpacks) do [ diff --git a/spec/unit/controllers/internal/syslog_drain_urls_controller_spec.rb b/spec/unit/controllers/internal/syslog_drain_urls_controller_spec.rb index 6b2f366bdf6..75e71e58981 100644 --- a/spec/unit/controllers/internal/syslog_drain_urls_controller_spec.rb +++ b/spec/unit/controllers/internal/syslog_drain_urls_controller_spec.rb @@ -4,127 +4,114 @@ module VCAP::CloudController RSpec.describe SyslogDrainUrlsInternalController do - let(:org) { Organization.make(name: 'org-1') } - let(:space) { Space.make(name: 'space-1', organization: org) } - let(:app_obj) { AppModel.make(name: 'app-1', space: space) } - let(:instance1) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance2) { UserProvidedServiceInstance.make(space: app_obj.space) } - let!(:binding_with_drain1) { ServiceBinding.make(syslog_drain_url: 'fish,finger', app: app_obj, service_instance: instance1) } - let!(:binding_with_drain2) { ServiceBinding.make(syslog_drain_url: 'foobar', app: app_obj, service_instance: instance2) } + let(:org) { create(:organization, name: 'org-1') } + let(:space) { create(:space, name: 'space-1', organization: org) } + let(:app_obj) { create(:app_model, name: 'app-1', space: space) } + let(:instance1) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance2) { create(:user_provided_service_instance, space: app_obj.space) } + let!(:binding_with_drain1) { create(:service_binding, syslog_drain_url: 'fish,finger', app: app_obj, service_instance: instance1) } + let!(:binding_with_drain2) { create(:service_binding, syslog_drain_url: 'foobar', app: app_obj, service_instance: instance2) } describe 'GET /internal/v5/syslog_drain_urls' do context 'basic functionality' do - let(:app_obj2) { AppModel.make(name: 'app-2', space: space) } - let(:app_obj3) { AppModel.make(name: 'app-3', space: space) } - let(:app_obj4) { AppModel.make(name: 'app-4', space: space) } - let(:app_obj5) { AppModel.make(name: 'app-5', space: space) } - let(:instance3) { UserProvidedServiceInstance.make(space: app_obj2.space) } - let(:instance4) { UserProvidedServiceInstance.make(space: app_obj3.space) } - let(:instance5) { UserProvidedServiceInstance.make(space: app_obj3.space) } - let(:instance6) { UserProvidedServiceInstance.make(space: app_obj4.space) } - let(:instance7) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance8) { UserProvidedServiceInstance.make(space: app_obj2.space) } - let(:instance9) { UserProvidedServiceInstance.make(space: app_obj3.space) } - let(:instance10) { UserProvidedServiceInstance.make(space: app_obj4.space) } - let(:instance11) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance12) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance13) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance14) { UserProvidedServiceInstance.make(space: app_obj.space) } - let(:instance15) { UserProvidedServiceInstance.make(space: app_obj.space) } + let(:app_obj2) { create(:app_model, name: 'app-2', space: space) } + let(:app_obj3) { create(:app_model, name: 'app-3', space: space) } + let(:app_obj4) { create(:app_model, name: 'app-4', space: space) } + let(:app_obj5) { create(:app_model, name: 'app-5', space: space) } + let(:instance3) { create(:user_provided_service_instance, space: app_obj2.space) } + let(:instance4) { create(:user_provided_service_instance, space: app_obj3.space) } + let(:instance5) { create(:user_provided_service_instance, space: app_obj3.space) } + let(:instance6) { create(:user_provided_service_instance, space: app_obj4.space) } + let(:instance7) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance8) { create(:user_provided_service_instance, space: app_obj2.space) } + let(:instance9) { create(:user_provided_service_instance, space: app_obj3.space) } + let(:instance10) { create(:user_provided_service_instance, space: app_obj4.space) } + let(:instance11) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance12) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance13) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance14) { create(:user_provided_service_instance, space: app_obj.space) } + let(:instance15) { create(:user_provided_service_instance, space: app_obj.space) } before do - ServiceBinding.make(syslog_drain_url: 'foobar', app: app_obj2, service_instance: instance3) - - ServiceBinding.make( - syslog_drain_url: 'barfoo', - app: app_obj3, - service_instance: instance4, - credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' } - ) - - ServiceBinding.make( - syslog_drain_url: 'barfoo2', - app: app_obj, - service_instance: instance7, - credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' } - ) - - ServiceBinding.make( - syslog_drain_url: 'barfoo2', - app: app_obj2, - service_instance: instance8, - credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' } - ) - - ServiceBinding.make( - syslog_drain_url: 'barfoo2', - app: app_obj3, - service_instance: instance5, - credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' } - ) - - ServiceBinding.make( - syslog_drain_url: 'barfoo2', - app: app_obj4, - service_instance: instance6, - credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' } - ) - - ServiceBinding.make( - syslog_drain_url: 'barfoo2', - app: app_obj5, - service_instance: instance6, - credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' } - ) - - ServiceBinding.make( - syslog_drain_url: 'no_credentials_1', - app: app_obj3, - service_instance: instance9, - credentials: nil - ) - - ServiceBinding.make( - syslog_drain_url: 'no_credentials_2', - app: app_obj4, - service_instance: instance10, - credentials: { 'cert' => '', 'key' => '', 'ca' => '' } - ) - - ServiceBinding.make( - syslog_drain_url: 'no_credentials_3', - app: app_obj, - service_instance: instance11, - credentials: { 'foo' => '', 'cert' => '', 'ca' => '' } - ) - - ServiceBinding.make( - syslog_drain_url: 'collision_test', - app: app_obj, - service_instance: instance12, - credentials: { 'cert' => '', 'key' => '', 'ca' => '' } - ) - - ServiceBinding.make( - syslog_drain_url: 'collision_test', - app: app_obj, - service_instance: instance13, - credentials: { 'cert' => 'has-cert', 'key' => '', 'ca' => '' } - ) - - ServiceBinding.make( - syslog_drain_url: 'collision_test', - app: app_obj, - service_instance: instance14, - credentials: { 'cert' => '', 'key' => 'has-key', 'ca' => '' } - ) - - ServiceBinding.make( - syslog_drain_url: 'collision_test', - app: app_obj, - service_instance: instance15, - credentials: { 'key' => '', 'cert' => '', 'ca' => 'has-ca' } - ) + create(:service_binding, syslog_drain_url: 'foobar', app: app_obj2, service_instance: instance3) + + create(:service_binding, + syslog_drain_url: 'barfoo', + app: app_obj3, + service_instance: instance4, + credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' }) + + create(:service_binding, + syslog_drain_url: 'barfoo2', + app: app_obj, + service_instance: instance7, + credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' }) + + create(:service_binding, + syslog_drain_url: 'barfoo2', + app: app_obj2, + service_instance: instance8, + credentials: { 'cert' => 'cert1', 'key' => 'key1', 'ca' => 'ca1' }) + + create(:service_binding, + syslog_drain_url: 'barfoo2', + app: app_obj3, + service_instance: instance5, + credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' }) + + create(:service_binding, + syslog_drain_url: 'barfoo2', + app: app_obj4, + service_instance: instance6, + credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' }) + + create(:service_binding, + syslog_drain_url: 'barfoo2', + app: app_obj5, + service_instance: instance6, + credentials: { 'cert' => 'cert2', 'key' => 'key2', 'ca' => 'ca2' }) + + create(:service_binding, + syslog_drain_url: 'no_credentials_1', + app: app_obj3, + service_instance: instance9, + credentials: nil) + + create(:service_binding, + syslog_drain_url: 'no_credentials_2', + app: app_obj4, + service_instance: instance10, + credentials: { 'cert' => '', 'key' => '', 'ca' => '' }) + + create(:service_binding, + syslog_drain_url: 'no_credentials_3', + app: app_obj, + service_instance: instance11, + credentials: { 'foo' => '', 'cert' => '', 'ca' => '' }) + + create(:service_binding, + syslog_drain_url: 'collision_test', + app: app_obj, + service_instance: instance12, + credentials: { 'cert' => '', 'key' => '', 'ca' => '' }) + + create(:service_binding, + syslog_drain_url: 'collision_test', + app: app_obj, + service_instance: instance13, + credentials: { 'cert' => 'has-cert', 'key' => '', 'ca' => '' }) + + create(:service_binding, + syslog_drain_url: 'collision_test', + app: app_obj, + service_instance: instance14, + credentials: { 'cert' => '', 'key' => 'has-key', 'ca' => '' }) + + create(:service_binding, + syslog_drain_url: 'collision_test', + app: app_obj, + service_instance: instance15, + credentials: { 'key' => '', 'cert' => '', 'ca' => 'has-ca' }) end it 'returns a list of syslog drain urls and their credentials' do @@ -294,7 +281,7 @@ module VCAP::CloudController context 'when an app has no service_bindings' do before do - AppModel.make(guid: '00000') + create(:app_model, guid: '00000') end it 'does not affect the paging results' do @@ -309,10 +296,10 @@ module VCAP::CloudController end context 'when an app has no syslog_drain_urls' do - let(:app_with_first_ordered_guid) { AppModel.make(guid: '000', space: instance1.space) } + let(:app_with_first_ordered_guid) { create(:app_model, guid: '000', space: instance1.space) } before do - ServiceBinding.make(syslog_drain_url: nil, app: app_with_first_ordered_guid, service_instance: instance1) + create(:service_binding, syslog_drain_url: nil, app: app_with_first_ordered_guid, service_instance: instance1) end it 'does not affect the paging results' do @@ -328,9 +315,9 @@ module VCAP::CloudController end context 'rfc-1034-compliance: whitespace converted to hyphens' do - let(:org) { Organization.make(name: 'org 2') } - let(:space) { Space.make(name: 'space 2', organization: org) } - let(:app_obj) { AppModel.make(name: 'app 2', space: space) } + let(:org) { create(:organization, name: 'org 2') } + let(:space) { create(:space, name: 'space 2', organization: org) } + let(:app_obj) { create(:app_model, name: 'app 2', space: space) } it 'truncates trailing hyphens' do get '/internal/v5/syslog_drain_urls', '{}' @@ -349,9 +336,9 @@ module VCAP::CloudController end context 'rfc-1034-compliance: named end with hyphens' do - let(:org) { Organization.make(name: 'org-3-') } - let(:space) { Space.make(name: 'space-3--', organization: org) } - let(:app_obj) { AppModel.make(name: 'app-3---', space: space) } + let(:org) { create(:organization, name: 'org-3-') } + let(:space) { create(:space, name: 'space-3--', organization: org) } + let(:app_obj) { create(:app_model, name: 'app-3---', space: space) } it 'truncates trailing hyphens' do get '/internal/v5/syslog_drain_urls', '{}' @@ -370,9 +357,9 @@ module VCAP::CloudController end context 'rfc-1034-compliance: remove disallowed characters' do - let(:org) { Organization.make(name: '!org@-4#' + [233].pack('U')) } - let(:space) { Space.make(name: '$space%-^4--&', organization: org) } - let(:app_obj) { AppModel.make(name: '";*app(-)4_-=-+-[]{}\\|;:,.<>/?`~', space: space) } + let(:org) { create(:organization, name: '!org@-4#' + [233].pack('U')) } + let(:space) { create(:space, name: '$space%-^4--&', organization: org) } + let(:app_obj) { create(:app_model, name: '";*app(-)4_-=-+-[]{}\\|;:,.<>/?`~', space: space) } it 'truncates trailing hyphens' do get '/internal/v5/syslog_drain_urls', '{}' @@ -392,13 +379,13 @@ module VCAP::CloudController context 'rfc-1034-compliance: truncate overlong name components to first 63' do let(:orgName) { 'org-5-' + ('x' * (63 - 6)) } let(:orgNamePlus) { orgName + 'y' } - let(:org) { Organization.make(name: orgNamePlus) } + let(:org) { create(:organization, name: orgNamePlus) } let(:spaceName) { 'space-5-' + ('x' * (63 - 8)) } let(:spaceNamePlus) { spaceName + 'y' } - let(:space) { Space.make(name: spaceNamePlus, organization: org) } + let(:space) { create(:space, name: spaceNamePlus, organization: org) } let(:appName) { 'app-5-' + ('x' * (63 - 6)) } let(:appNamePlus) { appName + 'y' } - let(:app_obj) { AppModel.make(name: appNamePlus, space: space) } + let(:app_obj) { create(:app_model, name: appNamePlus, space: space) } it 'truncates trailing hyphens' do get '/internal/v5/syslog_drain_urls', '{}' @@ -418,11 +405,11 @@ module VCAP::CloudController context 'rfc-1034-compliance: keep 63-char names' do let(:orgName) { 'org-5-' + ('x' * (63 - 6)) } - let(:org) { Organization.make(name: orgName) } + let(:org) { create(:organization, name: orgName) } let(:spaceName) { 'space-5-' + ('x' * (63 - 8)) } - let(:space) { Space.make(name: spaceName, organization: org) } + let(:space) { create(:space, name: spaceName, organization: org) } let(:appName) { 'app-5-' + ('x' * (63 - 6)) } - let(:app_obj) { AppModel.make(name: appName, space: space) } + let(:app_obj) { create(:app_model, name: appName, space: space) } it 'retains length-compliant names' do get '/internal/v5/syslog_drain_urls', '{}' @@ -441,7 +428,7 @@ module VCAP::CloudController end context 'when an app has no service binding' do - let!(:app_no_binding) { AppModel.make } + let!(:app_no_binding) { create(:app_model) } it 'does not include that app' do get '/internal/v5/syslog_drain_urls', '{}' @@ -458,7 +445,7 @@ module VCAP::CloudController end context "when an app's bindings have no syslog_drain_url" do - let!(:app_no_drain) { ServiceBinding.make.app } + let!(:app_no_drain) { create(:service_binding).app } it 'does not include that app' do get '/internal/v5/syslog_drain_urls', '{}' @@ -474,7 +461,7 @@ module VCAP::CloudController end context "when an app's binding has blank syslog_drain_urls" do - let!(:app_empty_drain) { ServiceBinding.make(syslog_drain_url: '').app } + let!(:app_empty_drain) { create(:service_binding, syslog_drain_url: '').app } it 'includes the app without the empty syslog_drain_urls' do get '/internal/v5/syslog_drain_urls', '{}' @@ -493,11 +480,10 @@ module VCAP::CloudController context 'when there are many service bindings on a single app' do before do 50.times do |i| - ServiceBinding.make( - app: app_obj, - syslog_drain_url: "syslog://example.com/#{i}", - service_instance: UserProvidedServiceInstance.make(space: app_obj.space) - ) + create(:service_binding, + app: app_obj, + syslog_drain_url: "syslog://example.com/#{i}", + service_instance: create(:user_provided_service_instance, space: app_obj.space)) end end @@ -513,7 +499,7 @@ module VCAP::CloudController before do ServiceBinding.dataset.delete 10.times do - ServiceBinding.make(syslog_drain_url: 'foodbar.example.com', app: AppModel.make(space: instance1.space), service_instance: instance1) + create(:service_binding, syslog_drain_url: 'foodbar.example.com', app: create(:app_model, space: instance1.space), service_instance: instance1) end end diff --git a/spec/unit/controllers/internal/task_completion_controller_spec.rb b/spec/unit/controllers/internal/task_completion_controller_spec.rb index 15b9413b926..e664ebc53db 100644 --- a/spec/unit/controllers/internal/task_completion_controller_spec.rb +++ b/spec/unit/controllers/internal/task_completion_controller_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController RSpec.describe TasksCompletionController do describe 'POST /internal/v4/tasks/:task_guid/completed' do let(:url) { "/internal/v4/tasks/#{task.guid}/completed" } - let(:task) { TaskModel.make } + let(:task) { create(:task_model) } let(:task_response) do { task_guid: task.guid, @@ -61,7 +61,7 @@ module VCAP::CloudController context 'when task is already in a completed state at the time the completion callback is evaluated' do context 'when task is already succeeded' do - let(:task) { TaskModel.make(state: 'SUCCEEDED') } + let(:task) { create(:task_model, state: 'SUCCEEDED') } it 'responds with a 400 status code' do post url, Oj.dump(task_response) @@ -72,7 +72,7 @@ module VCAP::CloudController end context 'when task is already failed' do - let(:task) { TaskModel.make(state: 'FAILED') } + let(:task) { create(:task_model, state: 'FAILED') } it 'responds with a 400 status code' do post url, Oj.dump(task_response) @@ -94,7 +94,7 @@ module VCAP::CloudController end context 'with an invalid task guid' do - let(:other_task) { TaskModel.make } + let(:other_task) { create(:task_model) } let(:url) { "/internal/v4/tasks/#{other_task.guid}/completed" } it 'fails with a 400' do diff --git a/spec/unit/controllers/runtime/app_bits_upload_controller_spec.rb b/spec/unit/controllers/runtime/app_bits_upload_controller_spec.rb index 00bd764a89c..531786c8269 100644 --- a/spec/unit/controllers/runtime/app_bits_upload_controller_spec.rb +++ b/spec/unit/controllers/runtime/app_bits_upload_controller_spec.rb @@ -29,7 +29,7 @@ module VCAP::CloudController let(:config_override) { {} } let(:headers) { headers_for(user) } - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } def make_request put "/v2/apps/#{process.app.guid}/bits", req_body, form_headers(headers) @@ -40,7 +40,7 @@ def make_request let(:req_body) { { resources: '[]', application: valid_zip } } it 'allows upload even if app_bits_upload flag is disabled' do - FeatureFlag.make(name: 'app_bits_upload', enabled: false) + create(:feature_flag, name: 'app_bits_upload', enabled: false) make_request expect(last_response.status).to eq(201) end @@ -53,7 +53,7 @@ def make_request let(:req_body) { { resources: '[]', application: valid_zip } } before do - FeatureFlag.make(name: 'app_bits_upload', enabled: false, error_message: nil) + create(:feature_flag, name: 'app_bits_upload', enabled: false, error_message: nil) make_request process.refresh end @@ -73,7 +73,7 @@ def make_request context 'when the app_bits_upload feature flag is enabled' do before do - FeatureFlag.make(name: 'app_bits_upload', enabled: true) + create(:feature_flag, name: 'app_bits_upload', enabled: true) end context 'with an empty request' do @@ -361,7 +361,7 @@ def make_request let(:req_body) { { resources: Oj.dump([{ 'fn' => 'lol', 'sha1' => 'abc', 'size' => 2048, 'mode' => '300' }]), application: valid_zip } } before do - FeatureFlag.make(name: 'app_bits_upload', enabled: true) + create(:feature_flag, name: 'app_bits_upload', enabled: true) end it 'fails to upload' do @@ -397,7 +397,7 @@ def make_request end context 'when the app is a docker app' do - let(:process) { ProcessModel.make(app: AppModel.make(:docker)) } + let(:process) { create(:process_model, app: create(:app_model, :docker)) } let(:req_body) { { resources: '[]', application: valid_zip } } let(:headers) { admin_headers } @@ -412,7 +412,7 @@ def make_request end describe 'POST /v2/apps/:guid/copy_bits' do - let(:dest_process) { ProcessModel.make } + let(:dest_process) { create(:process_model) } let(:src_process) { ProcessModelFactory.make } let(:json_payload) { { 'source_app_guid' => src_process.app.guid }.to_json } diff --git a/spec/unit/controllers/runtime/app_summaries_controller_spec.rb b/spec/unit/controllers/runtime/app_summaries_controller_spec.rb index f010e2e3b16..1b5d91db9cd 100644 --- a/spec/unit/controllers/runtime/app_summaries_controller_spec.rb +++ b/spec/unit/controllers/runtime/app_summaries_controller_spec.rb @@ -8,13 +8,13 @@ module VCAP::CloudController @num_services = 2 @free_mem_size = 128 - @shared_domain = SharedDomain.make + @shared_domain = create(:shared_domain) @shared_domain.save - @space = Space.make + @space = create(:space) @environment_json = { 'HELLO' => 'WORLD' } - @route1 = Route.make(space: @space) - @route2 = Route.make(space: @space) + @route1 = create(:route, space: @space) + @route2 = create(:route, space: @space) @services = [] @process = ProcessModelFactory.make( @@ -27,18 +27,17 @@ module VCAP::CloudController ) @num_services.times do - instance = ManagedServiceInstance.make(space: @space) - instance.service_instance_operation = ServiceInstanceOperation.make( - type: 'create', - state: 'in progress', - description: 'description goes here' - ) + instance = create(:managed_service_instance, space: @space) + instance.service_instance_operation = create(:service_instance_operation, + type: 'create', + state: 'in progress', + description: 'description goes here') @services << instance - ServiceBinding.make(app: @process.app, service_instance: instance) + create(:service_binding, app: @process.app, service_instance: instance) end - RouteMappingModel.make(app: @process.app, route: @route1, process_type: @process.type) - RouteMappingModel.make(app: @process.app, route: @route2, process_type: @process.type) + create(:route_mapping_model, app: @process.app, route: @route1, process_type: @process.type) + create(:route_mapping_model, app: @process.app, route: @route2, process_type: @process.type) set_current_user_as_admin end diff --git a/spec/unit/controllers/runtime/app_usage_events_controller_spec.rb b/spec/unit/controllers/runtime/app_usage_events_controller_spec.rb index 07f0cbfc964..70dbddeff21 100644 --- a/spec/unit/controllers/runtime/app_usage_events_controller_spec.rb +++ b/spec/unit/controllers/runtime/app_usage_events_controller_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController RSpec.describe AppUsageEventsController do before do - @event1 = AppUsageEvent.make + @event1 = create(:app_usage_event) set_current_user_as_admin end @@ -19,8 +19,8 @@ module VCAP::CloudController context 'when filtering by after_guid' do before do - @event2 = AppUsageEvent.make - @event3 = AppUsageEvent.make + @event2 = create(:app_usage_event) + @event3 = create(:app_usage_event) end it 'can filter by after_guid' do @@ -83,7 +83,7 @@ module VCAP::CloudController end it 'returns 403 as a non-admin' do - set_current_user(User.make) + set_current_user(create(:user)) expect do post '/v2/app_usage_events/destructively_purge_all_and_reseed_started_apps' diff --git a/spec/unit/controllers/runtime/apps_controller_spec.rb b/spec/unit/controllers/runtime/apps_controller_spec.rb index 83f33b9dac4..96be7475581 100644 --- a/spec/unit/controllers/runtime/apps_controller_spec.rb +++ b/spec/unit/controllers/runtime/apps_controller_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::AppsController do - let(:admin_user) { User.make } - let(:non_admin_user) { User.make } + let(:admin_user) { create(:user) } + let(:non_admin_user) { create(:user) } let(:app_event_repository) { Repositories::AppEventRepository.new } before do @@ -34,10 +34,10 @@ module VCAP::CloudController end describe 'querying by stack guid' do - let(:stack1) { Stack.make } - let(:stack2) { Stack.make } - let(:process1) { ProcessModel.make } - let(:process2) { ProcessModel.make } + let(:stack1) { create(:stack) } + let(:stack2) { create(:stack) } + let(:process1) { create(:process_model) } + let(:process2) { create(:process_model) } before do process1.app.lifecycle_data.update(stack: stack1.name) @@ -129,14 +129,14 @@ module VCAP::CloudController before { set_current_user_as_admin } it 'does not return events with inline-relations-depth=0' do - process = ProcessModel.make + process = create(:process_model) get "/v2/apps/#{process.app.guid}?inline-relations-depth=0" expect(entity).to have_key('events_url') expect(entity).not_to have_key('events') end it 'does not return events with inline-relations-depth=1 since app_events dataset is relatively expensive to query' do - process = ProcessModel.make + process = create(:process_model) get "/v2/apps/#{process.app.guid}?inline-relations-depth=1" expect(entity).to have_key('events_url') expect(entity).not_to have_key('events') @@ -145,7 +145,7 @@ module VCAP::CloudController end describe 'create app' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:space_guid) { space.guid.to_s } let(:initial_hash) do { @@ -361,7 +361,7 @@ module VCAP::CloudController context 'creating a buildpack app' do it 'creates the app correctly' do - stack = Stack.make(name: 'stack-name') + stack = create(:stack, name: 'stack-name') request = { name: 'maria', space_guid: space.guid, @@ -406,7 +406,7 @@ module VCAP::CloudController end it 'does allow a buildpack name' do - admin_buildpack = Buildpack.make + admin_buildpack = create(:buildpack) post '/v2/apps', Oj.dump(request.merge(buildpack: admin_buildpack.name)) expect(last_response.status).to eq(201) @@ -500,7 +500,7 @@ module VCAP::CloudController end describe 'docker image credentials' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:space_guid) { space.guid.to_s } let(:initial_hash) do { @@ -634,7 +634,7 @@ def update_app process.destroy end - let!(:new_process) { ProcessModel.make(type: ProcessTypes::WEB, app: app_model) } + let!(:new_process) { create(:process_model, type: ProcessTypes::WEB, app: app_model) } it 'returns the app with the appropriate app guid' do expect(app_guid).not_to eq(new_process.guid) @@ -704,7 +704,7 @@ def update_app describe 'app_scaling feature flag' do context 'when the flag is enabled' do - before { FeatureFlag.make(name: 'app_scaling', enabled: true) } + before { create(:feature_flag, name: 'app_scaling', enabled: true) } it 'allows updating memory' do put "/v2/apps/#{process.app.guid}", '{ "memory": 2 }' @@ -713,7 +713,7 @@ def update_app end context 'when the flag is disabled' do - before { FeatureFlag.make(name: 'app_scaling', enabled: false, error_message: nil) } + before { create(:feature_flag, name: 'app_scaling', enabled: false, error_message: nil) } it 'fails with the proper error code and message' do put "/v2/apps/#{process.app.guid}", '{ "memory": 2 }' @@ -727,8 +727,8 @@ def update_app context 'switch from dea to diego' do let(:process) { ProcessModelFactory.make(instances: 1, diego: false, type: 'web') } let(:developer) { make_developer_for_space(process.space) } - let(:route) { Route.make(space: process.space) } - let(:route_mapping) { RouteMappingModel.make(app: process.app, route: route) } + let(:route) { create(:route, space: process.space) } + let(:route_mapping) { create(:route_mapping_model, app: process.app, route: route) } it 'sets ports to 8080' do expect(process.ports).to be_nil @@ -780,9 +780,9 @@ def update_app end context 'when updating an app with existing route mapping' do - let(:route) { Route.make(space: process.space) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: route, app_port: 9090) } - let!(:route_mapping2) { RouteMappingModel.make(app: process.app, route: route, app_port: 5222) } + let(:route) { create(:route, space: process.space) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, app_port: 9090) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, route: route, app_port: 5222) } context 'when new app ports contains all existing route port mappings' do it 'updates the ports' do @@ -847,9 +847,9 @@ def update_app end it 'updates the app' do - v2_app = ProcessModel.make + v2_app = create(:process_model) v3_app = v2_app.app - stack = Stack.make(name: 'stack-name') + stack = create(:stack, name: 'stack-name') request = { name: 'maria', @@ -882,10 +882,10 @@ def update_app before do TestConfig.override(disable_custom_buildpacks: true) set_current_user(admin_user, admin: true) - process.app.lifecycle_data.update(buildpacks: [Buildpack.make.name]) + process.app.lifecycle_data.update(buildpacks: [create(:buildpack).name]) end - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } it 'does NOT allow a public git url' do put "/v2/apps/#{process.app.guid}", Oj.dump({ buildpack: 'http://example.com/buildpack' }) @@ -902,7 +902,7 @@ def update_app end it 'does allow a buildpack name' do - admin_buildpack = Buildpack.make + admin_buildpack = create(:buildpack) put "/v2/apps/#{process.app.guid}", Oj.dump({ buildpack: admin_buildpack.name }) expect(last_response.status).to eq(201) @@ -924,7 +924,7 @@ def update_app end describe 'setting stack' do - let(:new_stack) { Stack.make } + let(:new_stack) { create(:stack) } it 'changes the stack' do set_current_user(admin_user, admin: true) @@ -963,7 +963,7 @@ def update_app let(:process) { ProcessModelFactory.make(state: 'STARTED') } before do - PackageModel.make(app: process.app, package_hash: 'some-hash', state: PackageModel::READY_STATE) + create(:package_model, app: process.app, package_hash: 'some-hash', state: PackageModel::READY_STATE) process.reload end @@ -981,7 +981,7 @@ def update_app end context 'when the app was never staged' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } it 'does not mark the app for staging' do expect(process).not_to be_staged @@ -999,7 +999,7 @@ def update_app describe 'changing lifecycle types' do context 'when changing from docker to buildpack' do - let(:process) { ProcessModel.make(app: AppModel.make(:docker)) } + let(:process) { create(:process_model, app: create(:app_model, :docker)) } it 'raises an error setting buildpack' do put "/v2/apps/#{process.app.guid}", Oj.dump({ buildpack: 'https://buildpack.example.com' }) @@ -1015,7 +1015,7 @@ def update_app end context 'when changing from buildpack to docker' do - let(:process) { ProcessModel.make(app: AppModel.make) } + let(:process) { create(:process_model, app: create(:app_model)) } it 'raises an error' do put "/v2/apps/#{process.app.guid}", Oj.dump({ docker_image: 'repo/great-image' }) @@ -1031,7 +1031,7 @@ def update_app end it 'creates a new docker package' do - process = ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') + process = ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') original_package = process.latest_package expect(process.docker_image).not_to eq('repo/new-image') @@ -1055,7 +1055,7 @@ def update_app end it 'creates a new docker package with those credentials' do - process = ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') + process = ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') original_package = process.latest_package expect(process.docker_image).not_to eq('repo/new-image') @@ -1082,7 +1082,7 @@ def update_app it 'returns an UnprocessableEntity error' do set_current_user(admin_user, admin: true) - process = ProcessModelFactory.make(app: AppModel.make(:docker), docker_image: 'repo/original-image') + process = ProcessModelFactory.make(app: create(:app_model, :docker), docker_image: 'repo/original-image') put "/v2/apps/#{process.app.guid}", Oj.dump({ docker_credentials: { username: 'username', password: 'foo' } }) @@ -1158,7 +1158,7 @@ def update_app end context 'when starting an app without a package' do - let(:process) { ProcessModel.make(instances: 1) } + let(:process) { create(:process_model, instances: 1) } it 'raises an error' do put "/v2/apps/#{process.app.guid}", Oj.dump({ state: 'STARTED' }) @@ -1170,7 +1170,7 @@ def update_app describe 'starting and stopping' do let(:parent_app) { process.app } let(:process) { ProcessModelFactory.make(instances: 1, state: state) } - let(:sibling) { ProcessModel.make(instances: 1, state: state, app: parent_app, type: 'worker') } + let(:sibling) { create(:process_model, instances: 1, state: state, app: parent_app, type: 'worker') } context 'starting' do let(:state) { 'STOPPED' } @@ -1256,8 +1256,8 @@ def delete_app end describe 'recursive deletion' do - let!(:svc_instance) { ManagedServiceInstance.make(space: process.space) } - let!(:service_binding) { ServiceBinding.make(app: process.app, service_instance: svc_instance) } + let!(:svc_instance) { create(:managed_service_instance, space: process.space) } + let!(:service_binding) { create(:service_binding, app: process.app, service_instance: svc_instance) } let(:guid_pattern) { '[[:alnum:]-]+' } let(:broker_response_code) { 200 } @@ -1366,8 +1366,8 @@ def delete_app describe 'route mapping' do let!(:process) { ProcessModelFactory.make(instances: 1, diego: true) } let!(:developer) { make_developer_for_space(process.space) } - let!(:route) { Route.make(space: process.space) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let!(:route) { create(:route, space: process.space) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } before do set_current_user(developer) @@ -1419,7 +1419,7 @@ def delete_app context 'when the user is a member of the space this app exists in' do context 'when the user is not a space developer' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns a JSON payload indicating they do not have permission to read this endpoint' do @@ -1480,8 +1480,8 @@ def delete_app end context 'when the user is space dev and has service instance bound to application' do - let!(:service_instance) { ManagedServiceInstance.make(space: process.space) } - let!(:service_binding) { ServiceBinding.make(app: process.app, service_instance: service_instance) } + let!(:service_instance) { create(:managed_service_instance, space: process.space) } + let!(:service_binding) { create(:service_binding, app: process.app, service_instance: service_instance) } it 'returns system environment with VCAP_SERVICES' do get "/v2/apps/#{process.app.guid}/env" @@ -1491,7 +1491,7 @@ def delete_app end context 'when the service binding is being asynchronously created' do - let(:operation) { ServiceBindingOperation.make(state: 'in progress') } + let(:operation) { create(:service_binding_operation, state: 'in progress') } before do service_binding.service_binding_operation = operation @@ -1567,15 +1567,15 @@ def delete_app context 'when the user reads environment variables from the app endpoint using inline-relations-depth=2' do let!(:test_environment_json) { { 'environ_key' => 'value' } } - let(:parent_app) { AppModel.make(environment_variables: test_environment_json) } + let(:parent_app) { create(:app_model, environment_variables: test_environment_json) } let!(:process) do ProcessModelFactory.make( detected_buildpack: 'buildpack-name', app: parent_app ) end - let!(:service_instance) { ManagedServiceInstance.make(space: process.space) } - let!(:service_binding) { ServiceBinding.make(app: process.app, service_instance: service_instance) } + let!(:service_instance) { create(:managed_service_instance, space: process.space) } + let!(:service_binding) { create(:service_binding, app: process.app, service_instance: service_instance) } context 'when the user is a space developer' do it 'returns non-redacted environment values' do @@ -1606,7 +1606,7 @@ def delete_app let(:process) { ProcessModelFactory.make(detected_buildpack: 'buildpack-name') } before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns access denied' do @@ -1633,7 +1633,7 @@ def delete_app context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 for non-admins' do @@ -1673,7 +1673,7 @@ def delete_app context 'when the env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 all user' do @@ -1686,7 +1686,7 @@ def delete_app context 'when the space_developer_env_var_visibility feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: true, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: true, error_message: nil) end it 'raises 403 for non-admins' do @@ -1701,7 +1701,7 @@ def delete_app context 'when the env_var_visibility feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'env_var_visibility', enabled: true, error_message: nil) + create(:feature_flag, name: 'env_var_visibility', enabled: true, error_message: nil) end it 'continues to show 403 for roles that never had access to envs' do @@ -1745,7 +1745,7 @@ def delete_app context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 for space developers' do @@ -1764,7 +1764,7 @@ def delete_app before do set_current_user(developer) - Buildpack.make + create(:buildpack) end context 'when app will be staged', isolation: :truncation do @@ -1840,7 +1840,7 @@ def delete_app TestConfig.override(directories: { tmpdir: File.dirname(valid_zip.path) }) end - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:tmpdir) { Dir.mktmpdir } after { FileUtils.rm_rf(tmpdir) } @@ -1856,7 +1856,7 @@ def delete_app let(:req_body) { { droplet: valid_zip } } it 'is allowed' do - set_current_user(User.make, admin: true) + set_current_user(create(:user), admin: true) put "/v2/apps/#{process.app.guid}/droplet/upload", req_body expect(last_response.status).to eq(201) @@ -1905,7 +1905,7 @@ def delete_app describe 'on route change', isolation: :truncation do let(:space) { process.space } let(:domain) do - PrivateDomain.make(name: 'jesse.cloud', owning_organization: space.organization) + create(:private_domain, name: 'jesse.cloud', owning_organization: space.organization) end let(:process) { ProcessModelFactory.make(diego: false, state: 'STARTED') } @@ -2027,8 +2027,8 @@ def delete_app include_context 'permissions' before do - @obj_a = ProcessModelFactory.make(app: AppModel.make(space: @space_a)) - @obj_b = ProcessModelFactory.make(app: AppModel.make(space: @space_b)) + @obj_a = ProcessModelFactory.make(app: create(:app_model, space: @space_a)) + @obj_b = ProcessModelFactory.make(app: create(:app_model, space: @space_b)) end describe 'Org Level Permissions' do @@ -2115,7 +2115,7 @@ def delete_app end it 'returns duplicate app name message correctly' do - existing_process = ProcessModel.make(app: AppModel.make(space:)) + existing_process = create(:process_model, app: create(:app_model, space:)) put "/v2/apps/#{process.app.guid}", Oj.dump(name: existing_process.name) expect(last_response.status).to eq(400) @@ -2123,7 +2123,7 @@ def delete_app end it 'returns organization quota memory exceeded message correctly' do - space.organization.quota_definition = QuotaDefinition.make(memory_limit: 0) + space.organization.quota_definition = create(:quota_definition, memory_limit: 0) space.organization.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2133,7 +2133,7 @@ def delete_app end it 'returns space quota memory exceeded message correctly' do - space.space_quota_definition = SpaceQuotaDefinition.make(memory_limit: 0) + space.space_quota_definition = create(:space_quota_definition, memory_limit: 0) space.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2143,9 +2143,9 @@ def delete_app end it 'validates space quota memory limit before organization quotas' do - space.organization.quota_definition = QuotaDefinition.make(memory_limit: 0) + space.organization.quota_definition = create(:quota_definition, memory_limit: 0) space.organization.save(validate: false) - space.space_quota_definition = SpaceQuotaDefinition.make(memory_limit: 0) + space.space_quota_definition = create(:space_quota_definition, memory_limit: 0) space.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2162,7 +2162,7 @@ def delete_app end it 'returns instance memory limit exceeded error correctly' do - space.organization.quota_definition = QuotaDefinition.make(instance_memory_limit: 100) + space.organization.quota_definition = create(:quota_definition, instance_memory_limit: 100) space.organization.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2172,7 +2172,7 @@ def delete_app end it 'returns space instance memory limit exceeded error correctly' do - space.space_quota_definition = SpaceQuotaDefinition.make(instance_memory_limit: 100) + space.space_quota_definition = create(:space_quota_definition, instance_memory_limit: 100) space.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2182,7 +2182,7 @@ def delete_app end it 'returns app instance limit exceeded error correctly' do - space.organization.quota_definition = QuotaDefinition.make(app_instance_limit: 4) + space.organization.quota_definition = create(:quota_definition, app_instance_limit: 4) space.organization.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(instances: 5) @@ -2192,9 +2192,9 @@ def delete_app end it 'validates space quota instance memory limit before organization quotas' do - space.organization.quota_definition = QuotaDefinition.make(instance_memory_limit: 100) + space.organization.quota_definition = create(:quota_definition, instance_memory_limit: 100) space.organization.save(validate: false) - space.space_quota_definition = SpaceQuotaDefinition.make(instance_memory_limit: 100) + space.space_quota_definition = create(:space_quota_definition, instance_memory_limit: 100) space.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(memory: 128) @@ -2220,7 +2220,7 @@ def delete_app end it 'validates space quota app instance limit' do - space.space_quota_definition = SpaceQuotaDefinition.make(app_instance_limit: 2) + space.space_quota_definition = create(:space_quota_definition, app_instance_limit: 2) space.save(validate: false) put "/v2/apps/#{process.app.guid}", Oj.dump(instances: 3) @@ -2231,8 +2231,8 @@ def delete_app end describe 'enumerate' do - let!(:web_process) { ProcessModel.make(type: 'web') } - let!(:other_app) { ProcessModel.make(type: 'other') } + let!(:web_process) { create(:process_model, type: 'web') } + let!(:other_app) { create(:process_model, type: 'other') } before do set_current_user_as_admin @@ -2246,9 +2246,9 @@ def delete_app end describe 'PUT /v2/apps/:app_guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } - let(:route) { Route.make(space:) } + let(:route) { create(:route, space:) } let(:developer) { make_developer_for_space(space) } before do @@ -2286,7 +2286,7 @@ def delete_app context 'when the route is already mapped to the app' do before do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) end it 'succeeds' do @@ -2299,7 +2299,7 @@ def delete_app context 'when the user is not a developer in the apps space' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do @@ -2309,7 +2309,7 @@ def delete_app end context 'when the route is in a different space' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'raises an error' do expect(process.reload.routes).to be_empty @@ -2338,8 +2338,8 @@ def delete_app end describe 'routes from tcp router groups' do - let(:domain) { SharedDomain.make(name: 'tcp.com', router_group_guid: 'router-group-guid') } - let(:route) { Route.make(space: process.space, domain: domain, port: 9090, host: '') } + let(:domain) { create(:shared_domain, name: 'tcp.com', router_group_guid: 'router-group-guid') } + let(:route) { create(:route, space: process.space, domain: domain, port: 9090, host: '') } let(:routing_api_client) { double('routing_api_client', router_group:) } let(:router_group) { double('router_group', type: 'tcp', guid: 'router-group-guid') } @@ -2377,10 +2377,10 @@ def delete_app end describe 'DELETE /v2/apps/:app_guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } - let(:route) { Route.make(space:) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let(:route) { create(:route, space:) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } let(:developer) { make_developer_for_space(space) } before do @@ -2427,7 +2427,7 @@ def delete_app context 'when the user is not a developer in the apps space' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do @@ -2438,8 +2438,8 @@ def delete_app end describe 'GET /v2/apps/:app_guid/service_bindings' do - let(:space) { Space.make } - let(:managed_service_instance) { ManagedServiceInstance.make(space:) } + let(:space) { create(:space) } + let(:managed_service_instance) { create(:managed_service_instance, space:) } let(:developer) { make_developer_for_space(space) } let(:process1) { ProcessModelFactory.make(space: space, name: 'process1') } let(:process2) { ProcessModelFactory.make(space: space, name: 'process2') } @@ -2447,9 +2447,9 @@ def delete_app before do set_current_user(developer) - ServiceBinding.make(service_instance: managed_service_instance, app: process1.app, name: 'guava') - ServiceBinding.make(service_instance: managed_service_instance, app: process2.app, name: 'peach') - ServiceBinding.make(service_instance: managed_service_instance, app: process3.app, name: 'cilantro') + create(:service_binding, service_instance: managed_service_instance, app: process1.app, name: 'guava') + create(:service_binding, service_instance: managed_service_instance, app: process2.app, name: 'peach') + create(:service_binding, service_instance: managed_service_instance, app: process3.app, name: 'cilantro') end it "queries apps' service_bindings by name" do @@ -2484,20 +2484,20 @@ def delete_app # These tests show we can have at most one hit per name in the # apps/APPGUID/service_bindings endpoint. context 'when there are multiple services' do - let(:si1) { ManagedServiceInstance.make(space:) } - let(:si2) { ManagedServiceInstance.make(space:) } + let(:si1) { create(:managed_service_instance, space:) } + let(:si2) { create(:managed_service_instance, space:) } let(:developer) { make_developer_for_space(space) } let(:process1) { ProcessModelFactory.make(space: space, name: 'process1') } let(:process2) { ProcessModelFactory.make(space: space, name: 'process2') } before do set_current_user(developer) - ServiceBinding.make(service_instance: si1, app: process1.app, name: 'out') - ServiceBinding.make(service_instance: si2, app: process2.app, name: 'free') + create(:service_binding, service_instance: si1, app: process1.app, name: 'out') + create(:service_binding, service_instance: si2, app: process2.app, name: 'free') end it 'binding si2 to process1 with a name in use by process2 is ok' do - ServiceBinding.make(service_instance: si2, app: process1.app, name: 'free') + create(:service_binding, service_instance: si2, app: process1.app, name: 'free') get "/v2/apps/#{process1.app.guid}/service_bindings?results-per-page=2&page=1&q=name:free" expect(last_response.status).to eq(200), last_response.body end @@ -2505,10 +2505,10 @@ def delete_app end describe 'DELETE /v2/apps/:app_guid/service_bindings/:service_binding_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } - let(:instance) { ManagedServiceInstance.make(space:) } - let!(:service_binding) { ServiceBinding.make(app: process.app, service_instance: instance) } + let(:instance) { create(:managed_service_instance, space:) } + let!(:service_binding) { create(:service_binding, app: process.app, service_instance: instance) } let(:developer) { make_developer_for_space(space) } before do @@ -2548,7 +2548,7 @@ def delete_app context 'when the user is not a developer in the apps space' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do @@ -2560,8 +2560,8 @@ def delete_app describe 'GET /v2/apps/:guid/permissions' do let(:process) { ProcessModelFactory.make(space:) } - let(:space) { Space.make } - let(:user) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } before do space.organization.add_user(user) @@ -2696,7 +2696,7 @@ def delete_app context 'when the user is not part of the org or space' do before do - new_user = User.make + new_user = create(:user) set_current_user(new_user) end diff --git a/spec/unit/controllers/runtime/apps_ssh_controller_spec.rb b/spec/unit/controllers/runtime/apps_ssh_controller_spec.rb index b7b4810a20a..dfb1792cb7d 100644 --- a/spec/unit/controllers/runtime/apps_ssh_controller_spec.rb +++ b/spec/unit/controllers/runtime/apps_ssh_controller_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController RSpec.describe AppsSSHController do let(:diego) { true } let(:enable_ssh) { true } - let(:user) { User.make } + let(:user) { create(:user) } let(:process) { ProcessModelFactory.make(diego:, enable_ssh:) } let(:instance_index) { '2' } let(:space) { process.space } @@ -127,7 +127,7 @@ module VCAP::CloudController end context 'as an admin user' do - let(:admin) { User.make } + let(:admin) { create(:user) } before do space.organization.add_user(admin) @@ -153,7 +153,7 @@ module VCAP::CloudController end context 'as a user who cannot update' do - let(:auditor) { User.make } + let(:auditor) { create(:user) } before do set_current_user(auditor) @@ -168,7 +168,7 @@ module VCAP::CloudController end context 'when the user does not have access to the application' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before { set_current_user(other_user) } diff --git a/spec/unit/controllers/runtime/buildpack_bits_controller_spec.rb b/spec/unit/controllers/runtime/buildpack_bits_controller_spec.rb index a18fb1e7248..386f64fbb7a 100644 --- a/spec/unit/controllers/runtime/buildpack_bits_controller_spec.rb +++ b/spec/unit/controllers/runtime/buildpack_bits_controller_spec.rb @@ -158,7 +158,7 @@ module VCAP::CloudController end it 'requires an existing stack to be the same as one in the manifest if it exists' do - Stack.make(name: 'not-from-manifest') + create(:stack, name: 'not-from-manifest') test_buildpack.update(stack: 'not-from-manifest') put "/v2/buildpacks/#{test_buildpack.guid}/bits", { buildpack: valid_zip_manifest, buildpack_name: valid_zip_manifest.path } diff --git a/spec/unit/controllers/runtime/buildpacks_cache_controller_spec.rb b/spec/unit/controllers/runtime/buildpacks_cache_controller_spec.rb index b27373e813c..2ed98742b7c 100644 --- a/spec/unit/controllers/runtime/buildpacks_cache_controller_spec.rb +++ b/spec/unit/controllers/runtime/buildpacks_cache_controller_spec.rb @@ -19,7 +19,7 @@ module VCAP::CloudController end context 'when the user is not an admin' do - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } it 'returns a 403 NotAuthorized' do delete '/v2/blobstores/buildpack_cache' diff --git a/spec/unit/controllers/runtime/buildpacks_controller_spec.rb b/spec/unit/controllers/runtime/buildpacks_controller_spec.rb index 0eecd522bdd..95daca9bf95 100644 --- a/spec/unit/controllers/runtime/buildpacks_controller_spec.rb +++ b/spec/unit/controllers/runtime/buildpacks_controller_spec.rb @@ -9,7 +9,7 @@ def ordered_buildpacks end let(:user) { make_user } - let(:stack) { Stack.make } + let(:stack) { create(:stack) } let(:req_body) { Oj.dump({ name: 'dynamic_test_buildpack', stack: stack.name, position: 1 }) } before { set_current_user_as_admin } @@ -44,7 +44,7 @@ def ordered_buildpacks # we are doing a negative test to fix a bug. The rest of the endpoint is tested with meta programming describe '#index' do before do - 2.times { Buildpack.make } + create_list(:buildpack, 2) end it 'does not include order-by in the next_url' do @@ -97,7 +97,7 @@ def ordered_buildpacks end it 'returns duplicate name message correctly' do - Buildpack.make(name: 'dynamic_test_buildpack', stack: stack.name) + create(:buildpack, name: 'dynamic_test_buildpack', stack: stack.name) post '/v2/buildpacks', req_body expect(last_response.status).to eq(422) expect(decoded_response['code']).to eq(290_000) diff --git a/spec/unit/controllers/runtime/crashes_controller_spec.rb b/spec/unit/controllers/runtime/crashes_controller_spec.rb index 627d7df3640..652647d95dc 100644 --- a/spec/unit/controllers/runtime/crashes_controller_spec.rb +++ b/spec/unit/controllers/runtime/crashes_controller_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::CrashesController do describe 'GET /v2/apps/:id/crashes' do - let(:app_model) { AppModel.make } - let(:process) { ProcessModel.make(app: app_model, guid: app_model.guid) } + let(:app_model) { create(:app_model) } + let(:process) { create(:process_model, app: app_model, guid: app_model.guid) } let(:user) { make_user_for_space(process.space) } let(:developer) { make_developer_for_space(process.space) } diff --git a/spec/unit/controllers/runtime/domains_controller_spec.rb b/spec/unit/controllers/runtime/domains_controller_spec.rb index 4fd80e36e1d..3a5097c7aba 100644 --- a/spec/unit/controllers/runtime/domains_controller_spec.rb +++ b/spec/unit/controllers/runtime/domains_controller_spec.rb @@ -47,11 +47,11 @@ module VCAP::CloudController before do Domain.dataset.destroy # Seeded domains get in the way - @shared_domain = SharedDomain.make + @shared_domain = create(:shared_domain) - @obj_a = PrivateDomain.make(owning_organization: @org_a) + @obj_a = create(:private_domain, owning_organization: @org_a) - @obj_b = PrivateDomain.make(owning_organization: @org_b) + @obj_b = create(:private_domain, owning_organization: @org_b) end describe 'Org Level Permissions' do @@ -146,14 +146,14 @@ module VCAP::CloudController end describe 'GET /v2/domains/:id' do - let(:user) { User.make } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let(:organization) { create(:organization) } before { set_current_user(user) } context 'a space auditor' do - let(:space) { Space.make organization: } - let(:domain) { PrivateDomain.make(owning_organization: organization) } + let(:space) { create(:space, organization:) } + let(:domain) { create(:private_domain, owning_organization: organization) } before do organization.add_user user @@ -176,7 +176,7 @@ module VCAP::CloudController end context 'when the domain has an owning organization' do - let(:domain) { PrivateDomain.make(owning_organization: organization) } + let(:domain) { create(:private_domain, owning_organization: organization) } it 'has its GUID and URL in the response body' do get "/v2/domains/#{domain.guid}" @@ -189,7 +189,7 @@ module VCAP::CloudController end context 'when the domain is shared' do - let(:domain) { SharedDomain.make } + let(:domain) { create(:shared_domain) } it 'has its GUID as null, and no url key in the response body' do get "/v2/domains/#{domain.guid}" @@ -207,10 +207,10 @@ module VCAP::CloudController end describe 'GET /v2/domains' do - let(:user) { User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:organization) { space.organization } - let!(:private_domain) { PrivateDomain.make(owning_organization: organization) } + let!(:private_domain) { create(:private_domain, owning_organization: organization) } context 'for space manager' do before do @@ -261,9 +261,9 @@ module VCAP::CloudController end it 'shows the domains in the order they were seeded/created' do - domain1 = Domain.make(name: 'domain1.capi.land') - domain_internal = Domain.make(name: 'apps.internal', internal: true) - domain3 = Domain.make(name: 'domain3.capi.land') + domain1 = create(:domain, name: 'domain1.capi.land') + domain_internal = create(:domain, name: 'apps.internal', internal: true) + domain3 = create(:domain, name: 'domain3.capi.land') get '/v2/domains' expect(last_response.status).to eq(200), last_response.body @@ -276,8 +276,8 @@ module VCAP::CloudController describe 'POST /v2/domains' do context 'as an org manager' do - let(:user) { User.make } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let(:organization) { create(:organization) } let(:request_body) do Oj.dump({ name: 'blah.com', owning_organization_guid: organization.guid }) @@ -292,7 +292,7 @@ module VCAP::CloudController context 'when domain_creation feature_flag is disabled' do before do - FeatureFlag.make(name: 'private_domain_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'private_domain_creation', enabled: false, error_message: nil) end it 'returns FeatureDisabled' do @@ -307,12 +307,12 @@ module VCAP::CloudController end describe 'DELETE /v2/domains/:id' do - let(:shared_domain) { SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } before { set_current_user_as_admin } context 'when there are routes using the domain' do - let!(:route) { Route.make(domain: shared_domain) } + let!(:route) { create(:route, domain: shared_domain) } it 'does not delete the route' do expect do @@ -330,8 +330,8 @@ module VCAP::CloudController end describe 'GET /v2/domains/:id/spaces' do - let!(:private_domain) { PrivateDomain.make } - let!(:space) { Space.make(organization: private_domain.owning_organization) } + let!(:private_domain) { create(:private_domain) } + let!(:space) { create(:space, organization: private_domain.owning_organization) } before { set_current_user_as_admin } diff --git a/spec/unit/controllers/runtime/environment_variable_groups_controller_spec.rb b/spec/unit/controllers/runtime/environment_variable_groups_controller_spec.rb index d53fc3e16f8..4ac92588d7b 100644 --- a/spec/unit/controllers/runtime/environment_variable_groups_controller_spec.rb +++ b/spec/unit/controllers/runtime/environment_variable_groups_controller_spec.rb @@ -18,7 +18,7 @@ module VCAP::CloudController context 'and the name is running' do context 'whether or not the user is an admin' do it 'returns the json as a hash' do - set_current_user(User.make) + set_current_user(create(:user)) group = EnvironmentVariableGroup.running group.environment_json = { @@ -40,7 +40,7 @@ module VCAP::CloudController context 'and the name is staging' do context 'whether or not the user is an admin' do it 'returns the json as a hash' do - set_current_user(User.make) + set_current_user(create(:user)) group = EnvironmentVariableGroup.staging group.environment_json = { @@ -73,7 +73,7 @@ module VCAP::CloudController context 'when the name is staging' do context 'and the user is not an admin' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) put '/v2/config/environment_variable_groups/staging', '{"foo": "bar"}' expect(last_response.status).to eq(403) @@ -121,7 +121,7 @@ module VCAP::CloudController context 'when the name is running' do context 'and the user is not an admin' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) put '/v2/config/environment_variable_groups/running', '{"foo": "bar"}' expect(last_response.status).to eq(403) diff --git a/spec/unit/controllers/runtime/events_controller_spec.rb b/spec/unit/controllers/runtime/events_controller_spec.rb index 242bba657ad..8bb15f53b4a 100644 --- a/spec/unit/controllers/runtime/events_controller_spec.rb +++ b/spec/unit/controllers/runtime/events_controller_spec.rb @@ -18,30 +18,30 @@ module VCAP::CloudController describe 'GET /v2/events' do before do - @user_a = User.make - @user_b = User.make + @user_a = create(:user) + @user_b = create(:user) - @org_a = Organization.make - @org_b = Organization.make + @org_a = create(:organization) + @org_b = create(:organization) - @space_a = Space.make organization: @org_a - @space_b = Space.make organization: @org_b + @space_a = create(:space, organization: @org_a) + @space_b = create(:space, organization: @org_b) @org_a.add_user(@user_a) @org_b.add_user(@user_b) - @event_a = Event.make(space_guid: @space_a.guid, organization_guid: @org_a.guid) - @event_b = Event.make(space_guid: @space_b.guid, organization_guid: @org_b.guid) + @event_a = create(:event, space_guid: @space_a.guid, organization_guid: @org_a.guid) + @event_b = create(:event, space_guid: @space_b.guid, organization_guid: @org_b.guid) - @service_event = Event.make(space_guid: '', organization_guid: '', type: 'audit.service_broker.create') + @service_event = create(:event, space_guid: '', organization_guid: '', type: 'audit.service_broker.create') end describe 'default order' do it 'sorts by timestamp' do type = SecureRandom.uuid - Event.make(timestamp: Time.new(1990, 1, 1).utc, type: type, actor: 'earlier') - Event.make(timestamp: Time.new(2000, 1, 1).utc, type: type, actor: 'later') - Event.make(timestamp: Time.new(1995, 1, 1).utc, type: type, actor: 'middle') + create(:event, timestamp: Time.new(1990, 1, 1).utc, type: type, actor: 'earlier') + create(:event, timestamp: Time.new(2000, 1, 1).utc, type: type, actor: 'later') + create(:event, timestamp: Time.new(1995, 1, 1).utc, type: type, actor: 'middle') set_current_user_as_admin get '/v2/events' diff --git a/spec/unit/controllers/runtime/feature_flags_controller_spec.rb b/spec/unit/controllers/runtime/feature_flags_controller_spec.rb index e1a19b52a33..7bc0f52d456 100644 --- a/spec/unit/controllers/runtime/feature_flags_controller_spec.rb +++ b/spec/unit/controllers/runtime/feature_flags_controller_spec.rb @@ -22,7 +22,7 @@ module VCAP::CloudController end context 'and the flag was previously set' do - before { FeatureFlag.make(name: 'user_org_creation', enabled: false, error_message: 'foobar') } + before { create(:feature_flag, name: 'user_org_creation', enabled: false, error_message: 'foobar') } it 'sets the feature flag to the specified value' do put '/v2/config/feature_flags/user_org_creation', Oj.dump({ enabled: true, error_message: 'baz' }) @@ -59,7 +59,7 @@ module VCAP::CloudController context 'when the user is not an admin' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) put '/v2/config/feature_flags/user_org_creation', Oj.dump({ enabled: true }) expect(last_response.status).to eq(403) @@ -112,7 +112,7 @@ module VCAP::CloudController end context 'when there are overrides' do - before { FeatureFlag.make(name: 'flag1', enabled: true, error_message: 'custom_error_message') } + before { create(:feature_flag, name: 'flag1', enabled: true, error_message: 'custom_error_message') } it 'returns the defaults, overridden where needed' do get '/v2/config/feature_flags' @@ -171,7 +171,7 @@ module VCAP::CloudController end context 'when there are overrides' do - before { FeatureFlag.make(name: 'flag1', enabled: true, error_message: nil) } + before { create(:feature_flag, name: 'flag1', enabled: true, error_message: nil) } it 'returns the overridden value' do get '/v2/config/feature_flags/flag1' diff --git a/spec/unit/controllers/runtime/info_controller_spec.rb b/spec/unit/controllers/runtime/info_controller_spec.rb index 791c3f8a2a1..0cd080bcde5 100644 --- a/spec/unit/controllers/runtime/info_controller_spec.rb +++ b/spec/unit/controllers/runtime/info_controller_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::InfoController do describe 'GET /v2/info' do it "returns a 'user' entry when authenticated" do - set_current_user(User.make) + set_current_user(create(:user)) get '/v2/info' hash = Oj.load(last_response.body) diff --git a/spec/unit/controllers/runtime/jobs_controller_spec.rb b/spec/unit/controllers/runtime/jobs_controller_spec.rb index eaf1dadf4e2..eaa0d63cd60 100644 --- a/spec/unit/controllers/runtime/jobs_controller_spec.rb +++ b/spec/unit/controllers/runtime/jobs_controller_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::JobsController do let(:job) { Delayed::Job.enqueue double(perform: nil) } let(:job_request_id) { job.guid } - let(:user) { User.make } + let(:user) { create(:user) } describe 'GET /v2/jobs/:guid' do context 'permissions' do diff --git a/spec/unit/controllers/runtime/legacy_api_base_spec.rb b/spec/unit/controllers/runtime/legacy_api_base_spec.rb index 17012c8d94a..92e8dbf945a 100644 --- a/spec/unit/controllers/runtime/legacy_api_base_spec.rb +++ b/spec/unit/controllers/runtime/legacy_api_base_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::LegacyApiBase do - let(:user) { User.make(admin: true, active: true) } + let(:user) { create(:user, admin: true, active: true) } let(:logger) { Steno.logger('vcap_spec') } let(:fake_req) { '' } let(:dependencies) do @@ -21,8 +21,8 @@ module VCAP::CloudController end context 'with app spaces' do - let(:org) { Organization.make } - let(:as) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:as) { create(:space, organization: org) } let(:api) do SecurityContext.set(user) LegacyApiBase.new(TestConfig.config_instance, logger, {}, {}, fake_req, nil, dependencies) @@ -64,9 +64,9 @@ module VCAP::CloudController end context 'with app spaces' do - let(:org) { Organization.make } - let(:as1) { Space.make(organization: org) } - let(:as2) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:as1) { create(:space, organization: org) } + let(:as2) { create(:space, organization: org) } let(:api) do SecurityContext.set(user) LegacyApiBase.new(TestConfig.config_instance, logger, {}, {}, fake_req, nil, dependencies) diff --git a/spec/unit/controllers/runtime/legacy_info_spec.rb b/spec/unit/controllers/runtime/legacy_info_spec.rb index 56399fb7b57..bb2c389a8ea 100644 --- a/spec/unit/controllers/runtime/legacy_info_spec.rb +++ b/spec/unit/controllers/runtime/legacy_info_spec.rb @@ -120,7 +120,7 @@ module VCAP::CloudController end 3.times do - ManagedServiceInstance.make(space: current_user.default_space) + create(:managed_service_instance, space: current_user.default_space) end end diff --git a/spec/unit/controllers/runtime/organization_summaries_controller_spec.rb b/spec/unit/controllers/runtime/organization_summaries_controller_spec.rb index 69cdc822948..2cd345efa40 100644 --- a/spec/unit/controllers/runtime/organization_summaries_controller_spec.rb +++ b/spec/unit/controllers/runtime/organization_summaries_controller_spec.rb @@ -12,16 +12,16 @@ module VCAP::CloudController free_mem_size = 1024 num_apps = num_prod_apps + num_free_apps - let(:org) { Organization.make } + let(:org) { create(:organization) } before do @spaces = [] num_spaces.times do - @spaces << Space.make(organization: org) + @spaces << create(:space, organization: org) end num_services.times do - ManagedServiceInstance.make(space: @spaces.first) + create(:managed_service_instance, space: @spaces.first) end num_free_apps.times do @@ -103,7 +103,7 @@ module VCAP::CloudController org.add_user member org.add_user non_member num_visible_spaces.times do - Space.make(organization: org).tap do |s| + create(:space, organization: org).tap do |s| s.add_developer member end end @@ -112,11 +112,11 @@ module VCAP::CloudController let(:num_visible_spaces) { 4 } let(:member) do - VCAP::CloudController::User.make(admin: false) + create(:user, admin: false) end let(:non_member) do - VCAP::CloudController::User.make(admin: false) + create(:user, admin: false) end context 'when the user is a member of the space' do diff --git a/spec/unit/controllers/runtime/organizations_controller_spec.rb b/spec/unit/controllers/runtime/organizations_controller_spec.rb index 90314faf870..25e9eaf626f 100644 --- a/spec/unit/controllers/runtime/organizations_controller_spec.rb +++ b/spec/unit/controllers/runtime/organizations_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::OrganizationsController do - let(:org) { Organization.make } + let(:org) { create(:organization) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } let(:user_email) { Sham.email } let(:uaa_client) { instance_double(UaaClient) } @@ -86,7 +86,7 @@ module VCAP::CloudController enumerate: 1 it 'cannot update quota definition' do - quota = QuotaDefinition.make + quota = create(:quota_definition) expect(@org_a.quota_definition.guid).not_to eq(quota.guid) put "/v2/organizations/#{@org_a.guid}", Oj.dump(quota_definition_guid: quota.guid) @@ -158,11 +158,11 @@ module VCAP::CloudController end describe 'setting the default isolation segment' do - let(:isolation_segment) { IsolationSegmentModel.make } - let(:isolation_segment2) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } + let(:isolation_segment2) { create(:isolation_segment_model) } context 'when the user is neither admin nor org manager' do - let(:space) { Space.make(organization: org) } + let(:space) { create(:space, organization: org) } let!(:user) { set_current_user(make_developer_for_space(space)) } before do @@ -240,7 +240,7 @@ module VCAP::CloudController end context 'when the user is an admin' do - let(:user) { set_current_user(User.make) } + let(:user) { set_current_user(create(:user)) } before do set_current_user_as_admin @@ -261,11 +261,11 @@ module VCAP::CloudController end describe 'removing the default isolation segment' do - let(:isolation_segment) { IsolationSegmentModel.make } - let(:isolation_segment2) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } + let(:isolation_segment2) { create(:isolation_segment_model) } context 'when the user is neither admin nor org manager' do - let(:space) { Space.make(organization: org) } + let(:space) { create(:space, organization: org) } let!(:user) { set_current_user(make_developer_for_space(space)) } before do @@ -341,7 +341,7 @@ module VCAP::CloudController end context 'when the user is an admin' do - let(:user) { set_current_user(User.make) } + let(:user) { set_current_user(create(:user)) } before do set_current_user_as_admin @@ -364,12 +364,12 @@ module VCAP::CloudController describe 'POST /v2/organizations' do context 'when user_org_creation feature_flag is disabled' do before do - FeatureFlag.make(name: 'user_org_creation', enabled: false) + create(:feature_flag, name: 'user_org_creation', enabled: false) end context 'as a non admin' do it 'returns NotAuthorized' do - set_current_user(User.make) + set_current_user(create(:user)) post '/v2/organizations', Oj.dump({ name: 'my-org-name' }) @@ -392,7 +392,7 @@ module VCAP::CloudController end it 'does not set the default isolation segment on creation' do - isolation_segment = IsolationSegmentModel.make + isolation_segment = create(:isolation_segment_model) post '/v2/organizations', Oj.dump({ name: 'my-org-name', @@ -421,11 +421,11 @@ module VCAP::CloudController context 'when user_org_creation feature_flag is enabled' do before do - FeatureFlag.make(name: 'user_org_creation', enabled: true) + create(:feature_flag, name: 'user_org_creation', enabled: true) end context 'as a non admin' do - let(:user) { User.make } + let(:user) { create(:user) } before do set_current_user(user, email: user_email) @@ -456,7 +456,7 @@ module VCAP::CloudController end context 'setting roles at org creation time' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } let(:name) { 'myorg' } before do @@ -526,7 +526,7 @@ module VCAP::CloudController end describe 'PUT /v2/organizations/:guid' do - let(:org) { Organization.make } + let(:org) { create(:organization) } before do set_current_user_as_admin(email: user_email) @@ -549,7 +549,7 @@ module VCAP::CloudController describe 'PUT /v2/organizations/:guid' do context 'setting roles at org update time' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } let(:name) { 'myorg' } let(:uri) { "/v2/organizations/#{org.guid}" } @@ -574,7 +574,7 @@ module VCAP::CloudController end context 'when there is already another org manager' do - let(:mgr) { User.make } + let(:mgr) { create(:user) } before do org.add_manager(mgr) @@ -603,7 +603,7 @@ module VCAP::CloudController end context 'deassigning an org manager' do - let(:another_user) { User.make } + let(:another_user) { create(:user) } before do org.add_manager(other_user) @@ -774,9 +774,9 @@ module VCAP::CloudController describe 'GET /v2/organizations/:guid/user_roles' do context 'when the user is admin' do - let(:mgr) { User.make(guid: 'mgr-lemon') } - let(:user) { User.make(guid: 'user-lime') } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } + let(:mgr) { create(:user, guid: 'mgr-lemon') } + let(:user) { create(:user, guid: 'user-lime') } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } before do allow(uaa_client).to receive(:usernames_for_ids).and_return({}) @@ -814,8 +814,8 @@ module VCAP::CloudController end context 'for a suspended organization as manager' do - let(:mgr) { User.make(guid: 'mgr-lemon') } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: [mgr.guid]) } + let(:mgr) { create(:user, guid: 'mgr-lemon') } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: [mgr.guid]) } before do allow(uaa_client).to receive(:usernames_for_ids).and_return({}) @@ -844,7 +844,7 @@ module VCAP::CloudController context 'when the user does not have permissions to read' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) get "/v2/organizations/#{org.guid}/user_roles" expect(last_response.status).to eq(403) @@ -853,8 +853,8 @@ module VCAP::CloudController end describe 'GET', '/v2/organizations/:guid/services' do - let(:other_org) { Organization.make } - let(:space_one) { Space.make(organization: org) } + let(:other_org) { create(:organization) } + let(:space_one) { create(:space, organization: org) } let(:user) { make_developer_for_space(space_one) } before do @@ -869,9 +869,9 @@ def decoded_guids context 'with an offering that has private plans' do before do - @service = Service.make(active: true) - @service_plan = ServicePlan.make(service: @service, public: false) - ServicePlanVisibility.make(service_plan: @service.service_plans.first, organization: org) + @service = create(:service, active: true) + @service_plan = create(:service_plan, service: @service, public: false) + create(:service_plan_visibility, service_plan: @service.service_plans.first, organization: org) end it "removes the offering when the org does not have access to any of the service's plans" do @@ -898,7 +898,7 @@ def decoded_guids end it 'excludes plans that are not visible to the org' do - public_service_plan = ServicePlan.make(service: @service, public: true) + public_service_plan = create(:service_plan, service: @service, public: true) get "/v2/organizations/#{other_org.guid}/services?inline-relations-depth=1" @@ -912,8 +912,8 @@ def decoded_guids describe 'get /v2/organizations/:guid/services?q=active:' do before do - @active = Array.new(3) { Service.make(active: true).tap { |svc| ServicePlan.make(service: svc) } } - @inactive = Array.new(2) { Service.make(active: false).tap { |svc| ServicePlan.make(service: svc) } } + @active = Array.new(3) { create(:service, active: true).tap { |svc| create(:service_plan, service: svc) } } + @inactive = Array.new(2) { create(:service, active: false).tap { |svc| create(:service_plan, service: svc) } } end it 'can remove inactive services' do @@ -931,13 +931,13 @@ def decoded_guids describe 'get /v2/organizations/:guid/services?q=service_broker_guid:' do context 'with an offering that has public plans' do - let(:broker) { ServiceBroker.make } - let(:service) { Service.make(service_broker: broker, active: true) } - let(:service_plan) { ServicePlan.make(service: service, public: false) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker, active: true) } + let(:service_plan) { create(:service_plan, service: service, public: false) } before do service.service_plans << service_plan - ServicePlanVisibility.make(service_plan: service.service_plans.first, organization: org) + create(:service_plan_visibility, service_plan: service.service_plans.first, organization: org) end it "returns the org's service" do @@ -951,7 +951,7 @@ def decoded_guids describe 'GET /v2/organizations/:guid/memory_usage' do before do - space = Space.make(organization: org) + space = create(:space, organization: org) ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: 'STARTED', type: 'worker') end @@ -966,7 +966,7 @@ def decoded_guids context 'when the user does not have permissions to read' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) get "/v2/organizations/#{org.guid}/memory_usage" expect(last_response.status).to eq(403) @@ -995,7 +995,7 @@ def decoded_guids context 'when the user does not have permissions to read' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) get "/v2/organizations/#{org.guid}/instance_usage" expect(last_response.status).to eq(403) @@ -1015,11 +1015,11 @@ def decoded_guids end describe 'GET /v2/organizations/:guid/domains' do - let(:organization) { Organization.make } + let(:organization) { create(:organization) } let(:manager) { make_manager_for_org(organization) } before do - PrivateDomain.make(owning_organization: organization) + create(:private_domain, owning_organization: organization) set_current_user(manager) end @@ -1033,8 +1033,8 @@ def decoded_guids end context 'space roles' do - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } context 'space developers without org role' do let(:space_developer) { make_developer_for_space(space) } @@ -1042,7 +1042,7 @@ def decoded_guids before { set_current_user(space_developer) } it 'returns private domains' do - private_domain = PrivateDomain.make(owning_organization: organization) + private_domain = create(:private_domain, owning_organization: organization) get "/v2/organizations/#{organization.guid}/domains" @@ -1066,13 +1066,13 @@ def decoded_guids end describe 'Removing a user from the organization' do - let(:mgr) { User.make } - let(:user) { User.make } + let(:mgr) { create(:user) } + let(:user) { create(:user) } let(:org_users) { [user.guid] } - let(:org) { Organization.make(manager_guids: org_managers, user_guids: org_users) } + let(:org) { create(:organization, manager_guids: org_managers, user_guids: org_users) } let(:org_managers) { [mgr.guid] } - let(:org_space_empty) { Space.make(organization: org) } - let(:org_space_full) { Space.make(organization: org, manager_guids: [user.guid], developer_guids: [user.guid], auditor_guids: [user.guid]) } + let(:org_space_empty) { create(:space, organization: org) } + let(:org_space_full) { create(:space, organization: org, manager_guids: [user.guid], developer_guids: [user.guid], auditor_guids: [user.guid]) } before { set_current_user_as_admin } @@ -1174,8 +1174,8 @@ def decoded_guids end context 'multiple organizations' do - let(:org_2) { Organization.make(user_guids: [user.guid]) } - let(:org2_space) { Space.make(organization: org_2, developer_guids: [user.guid]) } + let(:org_2) { create(:organization, user_guids: [user.guid]) } + let(:org2_space) { create(:space, organization: org_2, developer_guids: [user.guid]) } it 'removes all user roles from one organization, but no the other' do org.add_space(org_space_full) @@ -1212,8 +1212,8 @@ def decoded_guids end describe 'removing the last user' do - let(:org) { Organization.make } - let(:user) { User.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } before do org.add_user(user) @@ -1264,12 +1264,12 @@ def decoded_guids context 'PUT /v2/organizations/org_guid/private_domains/domain_guid' do context 'when PrivateDomain is shared' do - let(:org1) { Organization.make } - let(:org2) { Organization.make } - let(:private_domain) { PrivateDomain.make(owning_organization: org1) } - let(:user) { User.make } - let(:manager) { User.make } - let(:target_manager) { User.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:private_domain) { create(:private_domain, owning_organization: org1) } + let(:user) { create(:user) } + let(:manager) { create(:user) } + let(:target_manager) { create(:user) } before do org1.add_manager(manager) @@ -1306,9 +1306,9 @@ def decoded_guids end describe 'GET /v2/organizations/:guid/users' do - let(:mgr) { User.make } - let(:user) { User.make } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } + let(:mgr) { create(:user) } + let(:user) { create(:user) } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } before do allow(uaa_client).to receive(:usernames_for_ids).and_return({}) @@ -1334,7 +1334,7 @@ def decoded_guids QuotaDefinition.default.organizations.each(&:destroy) QuotaDefinition.default.destroy - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns an OrganizationInvalid message' do @@ -1346,7 +1346,7 @@ def decoded_guids end describe 'deleting an organization' do - let(:org) { Organization.make } + let(:org) { create(:organization) } before do set_current_user_as_admin(email: user_email) @@ -1372,14 +1372,14 @@ def decoded_guids context 'with recursive=false' do it 'raises an error when the org has anything but labels it' do - Space.make(organization: org) + create(:space, organization: org) delete "/v2/organizations/#{org.guid}" expect(last_response).to have_status_code 400 expect(decoded_response['error_code']).to eq 'CF-AssociationNotEmpty' end it 'deletes the associated labels' do - label = OrganizationLabelModel.make(key_name: 'some_key', value: 'some_value', resource_guid: org.guid) + label = create(:organization_label_model, key_name: 'some_key', value: 'some_value', resource_guid: org.guid) delete "/v2/organizations/#{org.guid}" expect(last_response).to have_status_code(204) @@ -1390,8 +1390,8 @@ def decoded_guids context 'with recursive=true' do it 'deletes the org and all of its spaces' do - space_1 = Space.make(organization: org) - space_2 = Space.make(organization: org) + space_1 = create(:space, organization: org) + space_2 = create(:space, organization: org) delete "/v2/organizations/#{org.guid}?recursive=true" expect(last_response).to have_status_code 204 @@ -1401,9 +1401,9 @@ def decoded_guids end context 'when one of the spaces has a v3 app in it' do - let!(:space) { Space.make(organization: org) } - let!(:app_model) { AppModel.make(space_guid: space.guid) } - let(:user) { User.make } + let!(:space) { create(:space, organization: org) } + let!(:app_model) { create(:app_model, space_guid: space.guid) } + let(:user) { create(:user) } before { set_current_user(user, admin: true) } @@ -1425,9 +1425,9 @@ def decoded_guids context 'when there are users are managers and such' do before do - org.add_user(User.make) - org.add_manager(User.make) - org.add_billing_manager(User.make) + org.add_user(create(:user)) + org.add_manager(create(:user)) + org.add_billing_manager(create(:user)) end OrganizationUserJoin = Sequel::Model(:organizations_users) @@ -1454,8 +1454,8 @@ def decoded_guids set_current_user_as_admin end - let!(:space) { Space.make(organization: org) } - let!(:service_instance) { ManagedServiceInstance.make(space:) } + let!(:space) { create(:space, organization: org) } + let!(:service_instance) { create(:managed_service_instance, space:) } it 'deletes the service instance' do delete "/v2/organizations/#{org.guid}?recursive=true" @@ -1464,9 +1464,9 @@ def decoded_guids end context 'and one of the instances fails to delete' do - let!(:service_instance_2) { ManagedServiceInstance.make(space:) } - let!(:service_instance_3) { ManagedServiceInstance.make(space:) } - let!(:service_binding) { ServiceBinding.make(service_instance:) } + let!(:service_instance_2) { create(:managed_service_instance, space:) } + let!(:service_instance_3) { create(:managed_service_instance, space:) } + let!(:service_binding) { create(:service_binding, service_instance:) } before do stub_deprovision(service_instance_2, status: 500, accepts_incomplete: true) @@ -1491,19 +1491,19 @@ def decoded_guids end context 'and async=true' do - let(:space) { Space.make(organization: org) } - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:space) { create(:space, organization: org) } + let(:service_instance) { create(:managed_service_instance, space:) } before do stub_deprovision(service_instance, accepts_incomplete: true) - set_current_user(User.make, admin: true) + set_current_user(create(:user), admin: true) end it 'successfully deletes the space in a background job' do space_guid = space.guid - app_guid = AppModel.make(space_guid:).guid + app_guid = create(:app_model, space_guid:).guid service_instance_guid = service_instance.guid - route_guid = Route.make(space_guid:).guid + route_guid = create(:route, space:).guid delete "/v2/organizations/#{org.guid}?recursive=true&async=true" @@ -1582,7 +1582,7 @@ def decoded_guids context 'when the user is not an admin' do it 'raises an error' do - set_current_user(User.make) + set_current_user(create(:user)) delete "/v2/organizations/#{org.guid}" expect(last_response).to have_status_code 403 @@ -1594,8 +1594,8 @@ def decoded_guids before { set_current_user_as_admin } context 'when PrivateDomain is owned by the organization' do - let(:organization) { Organization.make } - let(:private_domain) { PrivateDomain.make(owning_organization: organization) } + let(:organization) { create(:organization) } + let(:private_domain) { create(:private_domain, owning_organization: organization) } it 'fails' do delete "/v2/organizations/#{organization.guid}/private_domains/#{private_domain.guid}" @@ -1604,14 +1604,14 @@ def decoded_guids end context 'when PrivateDomain is shared' do - let(:space) { Space.make } - let(:private_domain) { PrivateDomain.make } + let(:space) { create(:space) } + let(:private_domain) { create(:private_domain) } it 'removes associated routes' do - private_domain = PrivateDomain.make + private_domain = create(:private_domain) space.organization.add_private_domain(private_domain) - Route.make(space: space, domain: private_domain) + create(:route, space: space, domain: private_domain) delete "/v2/organizations/#{space.organization.guid}/private_domains/#{private_domain.guid}" expect(last_response.status).to eq(204) @@ -1622,7 +1622,7 @@ def decoded_guids end describe 'DELETE /v2/organizations/:guid/managers/:user_guid' do - let(:org_manager) { User.make } + let(:org_manager) { create(:user) } before do org.add_manager org_manager @@ -1653,7 +1653,7 @@ def decoded_guids describe 'when there are other managers' do describe 'removing oneself' do before do - org.add_manager User.make + org.add_manager create(:user) end it 'is allowed' do @@ -1666,7 +1666,7 @@ def decoded_guids end describe 'DELETE /v2/organizations/:guid/billing_managers/:user_guid' do - let(:billing_manager) { User.make } + let(:billing_manager) { create(:user) } before do org.add_billing_manager billing_manager @@ -1696,7 +1696,7 @@ def decoded_guids describe 'when there are other billing managers' do describe 'removing oneself' do before do - org.add_billing_manager User.make + org.add_billing_manager create(:user) end it 'is allowed' do @@ -1709,7 +1709,7 @@ def decoded_guids end describe 'DELETE /v2/organizations/:guid/auditors/:user_guid' do - let(:auditor) { User.make } + let(:auditor) { create(:user) } before do org.add_auditor auditor @@ -1736,7 +1736,7 @@ def decoded_guids end context 'as the org manager' do - let(:org_manager) { User.make } + let(:org_manager) { create(:user) } before do org.add_manager org_manager @@ -1750,7 +1750,7 @@ def decoded_guids end context 'as a user' do - let(:user) { User.make } + let(:user) { create(:user) } before do org.add_user user @@ -1769,7 +1769,7 @@ def decoded_guids %i[user manager billing_manager auditor].each do |role| plural_role = role.to_s.pluralize describe "PUT /v2/organizations/:guid/#{plural_role}" do - let(:user) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } let(:event_type) { "audit.user.organization_#{role}_add" } before do @@ -1779,14 +1779,14 @@ def decoded_guids end context 'origin' do - let(:user) { User.make(username: 'larry_the_user') } - let(:user2) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } + let(:user2) { create(:user, username: 'larry_the_user') } let(:origin1) { 'larry_origin' } let(:origin2) { 'another_larry_origin' } context 'when an origin is specified' do context 'when the specified origin is not in the user\'s origins' do - let(:user) { User.make(username: 'fake@example.com') } + let(:user) { create(:user, username: 'fake@example.com') } let(:fake_origin) { 'fake_origin' } before do @@ -1931,8 +1931,8 @@ def decoded_guids %i[user manager billing_manager auditor].each do |role| plural_role = role.to_s.pluralize describe "POST /v2/organizations/:guid/#{role}" do - let(:user) { User.make(username: 'larry_the_user') } - let(:user2) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } + let(:user2) { create(:user, username: 'larry_the_user') } let(:origin1) { 'larry_origin' } let(:origin2) { 'another_larry_origin' } let(:event_type) { "audit.user.organization_#{role}_add" } @@ -2017,7 +2017,7 @@ def decoded_guids %i[user manager billing_manager auditor].each do |role| plural_role = role.to_s.pluralize describe "DELETE /v2/organizations/:guid/#{plural_role}" do - let(:user) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } let(:event_type) { "audit.user.organization_#{role}_remove" } before do @@ -2118,7 +2118,7 @@ def decoded_guids end context 'when recursive delete is requested' do - let(:space) { Space.make(organization: org) } + let(:space) { create(:space, organization: org) } before do org.add_user(user) @@ -2162,8 +2162,8 @@ def decoded_guids %i[user manager billing_manager auditor].each do |role| plural_role = role.to_s.pluralize describe "PUT /v2/organizations/:guid/#{plural_role}/:user_id" do - let(:user) { User.make(username: 'larry_the_user') } - let(:other_user) { User.make(username: 'joe_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } + let(:other_user) { create(:user, username: 'joe_the_user') } let(:event_type) { "audit.user.organization_#{role}_add" } before do @@ -2214,8 +2214,8 @@ def decoded_guids %i[user manager billing_manager auditor].each do |role| plural_role = role.to_s.pluralize describe "DELETE /v2/organizations/:guid/#{plural_role}/:user_id" do - let(:user) { User.make(username: 'larry_the_user') } - let(:other_user) { User.make(username: 'joe_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } + let(:other_user) { create(:user, username: 'joe_the_user') } let(:event_type) { "audit.user.organization_#{role}_remove" } before do diff --git a/spec/unit/controllers/runtime/private_domains_controller_spec.rb b/spec/unit/controllers/runtime/private_domains_controller_spec.rb index 2adf14bc533..dd72e462624 100644 --- a/spec/unit/controllers/runtime/private_domains_controller_spec.rb +++ b/spec/unit/controllers/runtime/private_domains_controller_spec.rb @@ -26,8 +26,8 @@ module VCAP::CloudController describe 'Creating' do context 'as an org manager' do - let(:user) { User.make } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let(:organization) { create(:organization) } let(:request_body) do Oj.dump({ name: 'blah.com', owning_organization_guid: organization.guid }) @@ -41,7 +41,7 @@ module VCAP::CloudController context 'when domain_creation feature_flag is disabled' do before do - FeatureFlag.make(name: 'private_domain_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'private_domain_creation', enabled: false, error_message: nil) end it 'returns FeatureDisabled' do @@ -56,10 +56,10 @@ module VCAP::CloudController end context 'list' do - let(:user) { User.make } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:organization) { space.organization } - let!(:private_domain) { PrivateDomain.make(owning_organization: organization) } + let!(:private_domain) { create(:private_domain, owning_organization: organization) } context 'for space manager' do before do @@ -102,10 +102,10 @@ module VCAP::CloudController end describe 'shared organizations associations' do - let(:private_domain) { PrivateDomain.make } + let(:private_domain) { create(:private_domain) } before do - Organization.make.add_private_domain(private_domain) + create(:organization).add_private_domain(private_domain) end it 'returns links for shared organizations' do @@ -120,7 +120,7 @@ module VCAP::CloudController end describe 'Validation messages' do - let(:organization) { Organization.make } + let(:organization) { create(:organization) } it 'returns the OrgQuotaTotalPrivateDomainExceed message' do quota_definition = organization.quota_definition diff --git a/spec/unit/controllers/runtime/quota_definitions_controller_spec.rb b/spec/unit/controllers/runtime/quota_definitions_controller_spec.rb index f61e8d7a874..e1028e3943d 100644 --- a/spec/unit/controllers/runtime/quota_definitions_controller_spec.rb +++ b/spec/unit/controllers/runtime/quota_definitions_controller_spec.rb @@ -56,7 +56,7 @@ module VCAP::CloudController app_task_limit: 10 } end - let(:existing_quota) { VCAP::CloudController::QuotaDefinition.make } + let(:existing_quota) { create(:quota_definition) } context 'when the user is a cf admin' do let(:quota_name) { 'quota 1' } @@ -87,7 +87,7 @@ module VCAP::CloudController context 'when the user is not a cf admin' do let(:quota_name) { 'quota 2' } - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } it 'does not allow creation of a quota def' do post '/v2/quota_definitions', Oj.dump(quota_attributes) @@ -112,9 +112,9 @@ module VCAP::CloudController end describe 'Validation messages' do - let(:quota_definition) { QuotaDefinition.make } + let(:quota_definition) { create(:quota_definition) } - let(:quota_definition) { QuotaDefinition.make } + let(:quota_definition) { create(:quota_definition) } it 'allows a memory_limit of -1 (unlimited)' do set_current_user_as_admin diff --git a/spec/unit/controllers/runtime/resource_matches_controller_spec.rb b/spec/unit/controllers/runtime/resource_matches_controller_spec.rb index 19fc7e58020..1a30b2c18e1 100644 --- a/spec/unit/controllers/runtime/resource_matches_controller_spec.rb +++ b/spec/unit/controllers/runtime/resource_matches_controller_spec.rb @@ -11,7 +11,7 @@ module VCAP::CloudController end def resource_match_request(verb, path, matches, non_matches) - user = User.make(admin: false, active: true) + user = create(:user, admin: false, active: true) req = Oj.dump(matches + non_matches) set_current_user(user) @@ -25,7 +25,7 @@ def resource_match_request(verb, path, matches, non_matches) describe 'when the app_bits_upload feature flag is enabled' do before do - FeatureFlag.make(name: 'app_bits_upload', enabled: true) + create(:feature_flag, name: 'app_bits_upload', enabled: true) end describe 'PUT /v2/resource_match' do @@ -68,7 +68,7 @@ def resource_match_request(verb, path, matches, non_matches) describe 'when the app_bits_upload feature flag is disabled' do before do - FeatureFlag.make(name: 'app_bits_upload', enabled: false) + create(:feature_flag, name: 'app_bits_upload', enabled: false) end it 'allows the upload if the user is an admin' do @@ -79,7 +79,7 @@ def resource_match_request(verb, path, matches, non_matches) end it 'returns FeatureDisabled unless the user is an admin' do - set_current_user(User.make) + set_current_user(create(:user)) put '/v2/resource_match', '[]' @@ -91,7 +91,7 @@ def resource_match_request(verb, path, matches, non_matches) describe 'when the resource_matching flag is disabled' do before do - FeatureFlag.make(name: 'resource_matching', enabled: false) + create(:feature_flag, name: 'resource_matching', enabled: false) end it 'returns an empty list' do diff --git a/spec/unit/controllers/runtime/restages_controller_spec.rb b/spec/unit/controllers/runtime/restages_controller_spec.rb index 12ca41e2f93..5452ef52bb1 100644 --- a/spec/unit/controllers/runtime/restages_controller_spec.rb +++ b/spec/unit/controllers/runtime/restages_controller_spec.rb @@ -62,7 +62,7 @@ module VCAP::CloudController context 'when the app is pending to be staged' do before do - PackageModel.make(app: process.app) + create(:package_model, app: process.app) process.reload end diff --git a/spec/unit/controllers/runtime/route_mappings_controller_spec.rb b/spec/unit/controllers/runtime/route_mappings_controller_spec.rb index 2e596101485..1da546aadd4 100644 --- a/spec/unit/controllers/runtime/route_mappings_controller_spec.rb +++ b/spec/unit/controllers/runtime/route_mappings_controller_spec.rb @@ -20,10 +20,10 @@ module VCAP::CloudController before do @process_a = ProcessModelFactory.make(space: @space_a) @process_b = ProcessModelFactory.make(space: @space_b) - @route_a = Route.make(space: @space_a) - @route_b = Route.make(space: @space_b) - @obj_a = RouteMappingModel.make(app_guid: @process_a.app.guid, route_guid: @route_a.guid, process_type: @process_a.type) - @obj_b = RouteMappingModel.make(app_guid: @process_b.app.guid, route_guid: @route_b.guid, process_type: @process_b.type) + @route_a = create(:route, space: @space_a) + @route_b = create(:route, space: @space_b) + @obj_a = create(:route_mapping_model, app_guid: @process_a.app.guid, route_guid: @route_a.guid, process_type: @process_a.type) + @obj_b = create(:route_mapping_model, app_guid: @process_b.app.guid, route_guid: @route_b.guid, process_type: @process_b.type) end describe 'Org Level Permissions' do @@ -102,11 +102,11 @@ module VCAP::CloudController end describe 'GET /v2/route_mappings' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:route) { Route.make(space:) } + let(:route) { create(:route, space:) } let(:process) { ProcessModelFactory.make(space:) } - let(:route_mapping) { RouteMappingModel.make(app: process, route: route) } + let(:route_mapping) { create(:route_mapping_model, app: process, route: route) } before do set_current_user(developer) @@ -129,7 +129,7 @@ module VCAP::CloudController end context "when the route mapping's process type is not 'web'" do - let(:route_mapping) { RouteMappingModel.make(app: process, route: route, process_type: 'foo') } + let(:route_mapping) { create(:route_mapping_model, app: process, route: route, process_type: 'foo') } it 'returns a 404 NotFound' do get "/v2/route_mappings/#{route_mapping.guid}" @@ -141,8 +141,8 @@ module VCAP::CloudController end describe 'POST /v2/route_mappings' do - let(:space) { Space.make } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:route) { create(:route, space:) } let(:process) { ProcessModelFactory.make(space: space, ports: [8080, 9090]) } let(:developer) { make_developer_for_space(space) } let(:body) do @@ -181,7 +181,7 @@ module VCAP::CloudController end context 'and there is another app already bound to the specified route' do - let(:route_2) { Route.make(space:) } + let(:route_2) { create(:route, space:) } let(:body_2) do { app_guid: process.guid, @@ -303,7 +303,7 @@ module VCAP::CloudController end context 'and developer of different space is specified' do - let(:space1) { Space.make } + let(:space1) { create(:space) } let(:developer) { make_developer_for_space(space1) } let(:body) do { @@ -354,9 +354,9 @@ module VCAP::CloudController end context 'when the Routing API is not enabled' do - let(:space_quota) { SpaceQuotaDefinition.make(organization: space.organization) } - let(:tcp_domain) { SharedDomain.make(name: 'tcp.com', router_group_guid: 'guid_1') } - let(:tcp_route) { Route.make(port: 9090, host: '', space: space, domain: tcp_domain) } + let(:space_quota) { create(:space_quota_definition, organization: space.organization) } + let(:tcp_domain) { create(:shared_domain, name: 'tcp.com', router_group_guid: 'guid_1') } + let(:tcp_route) { create(:route, port: 9090, host: '', space: space, domain: tcp_domain) } let(:process) { ProcessModelFactory.make(space: space, ports: [9090], diego: true) } let(:space_developer) { make_developer_for_space(space) } let(:routing_api_client) { double('routing_api_client', router_group:) } @@ -389,7 +389,7 @@ module VCAP::CloudController end context 'when a pre-existing route has no router_group' do - let(:route) { Route.make(port: 9090, host: '', space: space) } + let(:route) { create(:route, port: 9090, host: '', space: space) } let(:body) do { app_guid: process.guid, @@ -410,7 +410,7 @@ module VCAP::CloudController end context 'when the app and route are in different spaces' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:body) do { app_guid: process.guid, @@ -434,18 +434,18 @@ module VCAP::CloudController describe 'PUT /v2/route_mappings/:guid' do it 'does not have a route' do set_current_user_as_admin - mapping = RouteMappingModel.make + mapping = create(:route_mapping_model) put "/v2/route_mappings/#{mapping.guid}", '{"app_port": 34}' expect(last_response).to have_status_code(404) end end describe 'DELETE /v2/route_mappings/:guid' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:process) { ProcessModelFactory.make(space:) } let(:space) { route.space } let(:developer) { make_developer_for_space(space) } - let(:route_mapping) { RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } before do set_current_user(developer) @@ -467,7 +467,7 @@ module VCAP::CloudController context 'when the user is not a SpaceDeveloper' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'raises a 403' do diff --git a/spec/unit/controllers/runtime/routes_controller_spec.rb b/spec/unit/controllers/runtime/routes_controller_spec.rb index d47d8e654d8..0dc31318bd7 100644 --- a/spec/unit/controllers/runtime/routes_controller_spec.rb +++ b/spec/unit/controllers/runtime/routes_controller_spec.rb @@ -9,7 +9,7 @@ module VCAP::CloudController let(:tcp_group_2) { 'tcp-group-2' } let(:tcp_group_3) { 'tcp-group-3' } let(:http_group) { 'http-group' } - let(:user) { User.make } + let(:user) { create(:user) } let(:router_groups) do [ RoutingApi::RouterGroup.new({ 'guid' => tcp_group_1, 'name' => 'TCP1', 'type' => 'tcp', 'reservable_ports' => '1024-65535' }), @@ -65,10 +65,10 @@ module VCAP::CloudController context 'with a custom domain' do include_context 'permissions' before do - @domain_a = PrivateDomain.make(owning_organization: @org_a) - @obj_a = Route.make(domain: @domain_a, space: @space_a) - @domain_b = PrivateDomain.make(owning_organization: @org_b) - @obj_b = Route.make(domain: @domain_b, space: @space_b) + @domain_a = create(:private_domain, owning_organization: @org_a) + @obj_a = create(:route, domain: @domain_a, space: @space_a) + @domain_b = create(:private_domain, owning_organization: @org_b) + @obj_b = create(:route, domain: @domain_b, space: @space_b) end describe 'Org Level Permissions' do @@ -157,10 +157,10 @@ module VCAP::CloudController FeatureFlag.create(name: 'diego_docker', enabled: true) end - let(:organization) { Organization.make } - let(:http_domain) { PrivateDomain.make(owning_organization: organization) } - let(:space) { Space.make(organization:) } - let(:route) { Route.make(domain: http_domain, space: space) } + let(:organization) { create(:organization) } + let(:http_domain) { create(:private_domain, owning_organization: organization) } + let(:space) { create(:space, organization:) } + let(:route) { create(:route, domain: http_domain, space: space) } let!(:docker_process) do ProcessModelFactory.make(space: space, docker_image: 'some-image', state: 'STARTED') end @@ -182,7 +182,7 @@ module VCAP::CloudController end describe 'DELETE /v2/routes/:guid' do - let(:route) { Route.make } + let(:route) { create(:route) } before do allow(app_event_repository).to receive(:record_unmap_route) @@ -250,12 +250,12 @@ module VCAP::CloudController end describe 'POST /v2/routes' do - let(:space_quota_definition) { SpaceQuotaDefinition.make } + let(:space_quota_definition) { create(:space_quota_definition) } let(:space) do - Space.make(space_quota_definition: space_quota_definition, - organization: space_quota_definition.organization) + create(:space, space_quota_definition: space_quota_definition, + organization: space_quota_definition.organization) end - let(:shared_domain) { SharedDomain.make } + let(:shared_domain) { create(:shared_domain) } let(:domain_guid) { shared_domain.guid } let(:host) { 'example' } let(:port) { nil } @@ -289,7 +289,7 @@ module VCAP::CloudController end context 'when the requested route specifies a system hostname and a system domain' do - let(:space) { Space.make(organization: system_domain.owning_organization) } + let(:space) { create(:space, organization: system_domain.owning_organization) } let(:system_domain) { Domain.find(name: TestConfig.config[:system_domain]) } let(:host) { 'api' } let(:req) do @@ -347,7 +347,7 @@ module VCAP::CloudController context 'when host is already taken and no paths are requested' do it 'returns 400 RouteHostTaken' do taken_host = 'someroute' - Route.make(host: taken_host, domain: shared_domain) + create(:route, host: taken_host, domain: shared_domain) post '/v2/routes', Oj.dump(host: taken_host, domain_guid: domain_guid, space_guid: space.guid) @@ -403,8 +403,8 @@ module VCAP::CloudController end context 'shared domains' do - let(:shared_domain) { SharedDomain.make } - let(:another_space) { Space.make } + let(:shared_domain) { create(:shared_domain) } + let(:another_space) { create(:space) } let(:req) do { domain_guid: shared_domain.guid, @@ -417,7 +417,7 @@ module VCAP::CloudController context 'when the route already exists with the same host in a another space' do before do - Route.make(domain: shared_domain, host: host, space: space) + create(:route, domain: shared_domain, host: host, space: space) another_space.organization.add_user(user) another_space.add_developer(user) end @@ -454,7 +454,7 @@ module VCAP::CloudController end context 'private domains' do - let(:private_domain) { PrivateDomain.make(owning_organization_guid: space.organization.guid) } + let(:private_domain) { create(:private_domain, owning_organization_guid: space.organization.guid) } let(:routing_api_client) { double('routing_api_client', enabled?: true) } let(:router_group) do RoutingApi::RouterGroup.new({ @@ -484,7 +484,7 @@ module VCAP::CloudController end context 'internal domains' do - let(:internal_domain) { Domain.make(internal: true, wildcard: true) } + let(:internal_domain) { create(:domain, internal: true, wildcard: true) } context 'and path is present' do it 'returns RouteInvalid' do @@ -510,8 +510,8 @@ module VCAP::CloudController end context 'tcp domains' do - let(:tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } - let(:another_tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } + let(:another_tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } context 'when the requested port is already in use by another domain with the same router group' do it 'returns the RoutePortTaken message when ports conflict' do @@ -575,7 +575,7 @@ module VCAP::CloudController end context 'when the routing api has experienced data loss' do - let(:orphaned_shared_domain) { SharedDomain.make(router_group_guid: 'abc') } + let(:orphaned_shared_domain) { create(:shared_domain, router_group_guid: 'abc') } let(:req) do { domain_guid: orphaned_shared_domain.guid, @@ -599,7 +599,7 @@ module VCAP::CloudController context 'generate_port' do let(:generated_port) { 10_005 } - let(:domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:domain) { create(:shared_domain, router_group_guid: tcp_group_1) } let(:domain_guid) { domain.guid } let(:port) { nil } @@ -622,7 +622,7 @@ module VCAP::CloudController context 'and a port is specified' do let(:port) { 10_500 } let(:generated_port) { 14_098 } - let(:domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:domain) { create(:shared_domain, router_group_guid: tcp_group_1) } let(:domain_guid) { domain.guid } let(:port_override_warning) { 'Specified+port+ignored.+Random+port+generated.' } @@ -645,7 +645,7 @@ module VCAP::CloudController call_count += 1 raise Sequel::UniqueConstraintViolation.new('port already taken') if call_count == 1 - Route.make(port: args[:route_hash]['port']) + create(:route, port: args[:route_hash]['port']) end end @@ -684,7 +684,7 @@ module VCAP::CloudController context 'when the router group runs out of ports' do let(:generated_port) { -1 } - let(:domain) { SharedDomain.make(router_group_guid: tcp_group_3) } + let(:domain) { create(:shared_domain, router_group_guid: tcp_group_3) } let(:domain_guid) { domain.guid } before do @@ -701,7 +701,7 @@ module VCAP::CloudController end context 'when queried with a shared http domain' do - let(:shared_http_domain) { SharedDomain.make(router_group_guid: http_group) } + let(:shared_http_domain) { create(:shared_domain, router_group_guid: http_group) } it 'returns 400 RouteInvalid' do post '/v2/routes?generate_port=true', Oj.dump(domain_guid: shared_http_domain.guid, space_guid: space.guid) @@ -714,7 +714,7 @@ module VCAP::CloudController end context 'when queried with a private http domain' do - let(:private_domain) { PrivateDomain.make(owning_organization_guid: space.organization.guid) } + let(:private_domain) { create(:private_domain, owning_organization_guid: space.organization.guid) } let(:routing_api_client) { double('routing_api_client', enabled?: true) } let(:router_group) do RoutingApi::RouterGroup.new({ @@ -757,7 +757,7 @@ module VCAP::CloudController context 'quotas' do context 'when the total routes quota for the space has maxed out' do it 'returns 400 SpaceQuotaTotalRoutesExceeded' do - quota_definition = SpaceQuotaDefinition.make(total_routes: 0, organization: space.organization) + quota_definition = create(:space_quota_definition, total_routes: 0, organization: space.organization) space.space_quota_definition = quota_definition space.save @@ -784,7 +784,7 @@ module VCAP::CloudController end context 'when the total reserved route ports quota for the org has maxed out' do - let(:tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } it 'returns 400 OrgQuotaTotalReservedRoutePortsExceeded' do quota_definition = space.organization.quota_definition @@ -800,10 +800,10 @@ module VCAP::CloudController end context 'when the total reserved route ports quota for the space has maxed out' do - let(:tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } it 'returns 400 SpaceQuotaTotalReservedRoutePortsExceeded' do - quota_definition = SpaceQuotaDefinition.make(total_reserved_route_ports: 0, organization: space.organization) + quota_definition = create(:space_quota_definition, total_reserved_route_ports: 0, organization: space.organization) space.space_quota_definition = quota_definition space.save @@ -819,7 +819,7 @@ module VCAP::CloudController context 'when route_creation feature flag is disabled' do before do allow_any_instance_of(RouteValidator).to receive(:validate) - FeatureFlag.make(name: 'route_creation', enabled: false, error_message: nil) + create(:feature_flag, name: 'route_creation', enabled: false, error_message: nil) end it 'returns FeatureDisabled for users' do @@ -833,15 +833,14 @@ module VCAP::CloudController end describe 'PUT /v2/routes/:guid' do - let(:space_quota_definition) { SpaceQuotaDefinition.make } + let(:space_quota_definition) { create(:space_quota_definition) } let(:space) do - Space.make( - space_quota_definition: space_quota_definition, - organization: space_quota_definition.organization - ) + create(:space, + space_quota_definition: space_quota_definition, + organization: space_quota_definition.organization) end - let(:user) { User.make } - let(:domain) { SharedDomain.make } + let(:user) { create(:user) } + let(:domain) { create(:shared_domain) } let(:domain_guid) { domain.guid } before do @@ -853,8 +852,8 @@ module VCAP::CloudController describe 'tcp routes' do let(:port) { 18_000 } let(:new_port) { 514 } - let(:tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } - let(:route) { Route.make(space: space, domain: tcp_domain, port: port, host: '') } + let(:tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } + let(:route) { create(:route, space: space, domain: tcp_domain, port: port, host: '') } let(:req) do { port: new_port } end @@ -876,7 +875,7 @@ module VCAP::CloudController end context 'with a domain with a router_group_guid and type tcp' do - let(:domain) { SharedDomain.make(router_group_guid: tcp_group_1) } + let(:domain) { create(:shared_domain, router_group_guid: tcp_group_1) } it 'updates the route' do put "/v2/routes/#{route.guid}", Oj.dump(req) @@ -898,8 +897,8 @@ module VCAP::CloudController end context 'when the routing api client raises a UaaUnavailable error' do - let(:domain) { SharedDomain.make(router_group_guid: 'router-group') } - let!(:route) { Route.make(space: space, domain: tcp_domain, port: port, host: '') } + let(:domain) { create(:shared_domain, router_group_guid: 'router-group') } + let!(:route) { create(:route, space: space, domain: tcp_domain, port: port, host: '') } before do allow_any_instance_of(RouteValidator).to receive(:validate). @@ -915,8 +914,8 @@ module VCAP::CloudController end context 'when the routing api client raises a RoutingApiUnavailable error' do - let(:domain) { SharedDomain.make(router_group_guid: 'router-group') } - let!(:route) { Route.make(space: space, domain: tcp_domain, port: port, host: '') } + let(:domain) { create(:shared_domain, router_group_guid: 'router-group') } + let!(:route) { create(:route, space: space, domain: tcp_domain, port: port, host: '') } before do allow_any_instance_of(RouteValidator).to receive(:validate). @@ -935,11 +934,11 @@ module VCAP::CloudController end describe 'GET /v2/routes/:guid' do - let(:user) { User.make } - let(:organization) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: organization) } - let(:space) { Space.make(organization:) } - let(:route) { Route.make(domain:, space:) } + let(:user) { create(:user) } + let(:organization) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: organization) } + let(:space) { create(:space, organization:) } + let(:route) { create(:route, domain:, space:) } context 'as a space auditor' do before do @@ -970,16 +969,16 @@ module VCAP::CloudController end describe 'GET /v2/routes' do - let(:organization) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: organization) } - let(:space) { Space.make(organization:) } - let!(:first_route) { Route.make(domain:, space:) } - let!(:second_route) { Route.make(domain:, space:) } + let(:organization) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: organization) } + let(:space) { create(:space, organization:) } + let!(:first_route) { create(:route, domain:, space:) } + let!(:second_route) { create(:route, domain:, space:) } - let(:other_org) { Organization.make } - let(:other_domain) { PrivateDomain.make(owning_organization: other_org) } - let(:other_space) { Space.make(organization: other_org) } - let!(:third_route_for_other_org) { Route.make(domain: other_domain, space: other_space) } + let(:other_org) { create(:organization) } + let(:other_domain) { create(:private_domain, owning_organization: other_org) } + let(:other_space) { create(:space, organization: other_org) } + let!(:third_route_for_other_org) { create(:route, domain: other_domain, space: other_space) } before do set_current_user_as_admin @@ -1021,12 +1020,12 @@ module VCAP::CloudController let(:first_route_info) { decoded_response.fetch('resources')[0] } let(:second_route_info) { decoded_response.fetch('resources')[1] } let(:third_route_info) { decoded_response.fetch('resources')[2] } - let(:space1) { Space.make(organization:) } + let(:space1) { create(:space, organization:) } - let(:organization2) { Organization.make } - let(:domain2) { PrivateDomain.make(owning_organization: organization2) } - let(:space2) { Space.make(organization: organization2) } - let!(:route_for_organization2) { Route.make(domain: domain2, space: space2) } + let(:organization2) { create(:organization) } + let(:domain2) { create(:private_domain, owning_organization: organization2) } + let(:space2) { create(:space, organization: organization2) } + let!(:route_for_organization2) { create(:route, domain: domain2, space: space2) } it 'Allows organization_guid query at any place in query with preceding domain query' do org_guid = organization.guid @@ -1043,7 +1042,7 @@ module VCAP::CloudController it 'Allows organization_guid query at any place in query with all queryable filters' do org_guid = organization.guid taken_host = 'someroute' - route_temp = Route.make(host: taken_host, domain: domain, space: space) + route_temp = create(:route, host: taken_host, domain: domain, space: space) route_guid = route_temp.guid domain_guid = domain.guid @@ -1090,7 +1089,7 @@ module VCAP::CloudController context 'with pagination' do let(:results_per_page) { 1 } - let(:route_for_organization2) { Route.make(domain: domain2, space: space2) } + let(:route_for_organization2) { create(:route, domain: domain2, space: space2) } let(:domain1) { domain } let(:org1) { organization } let(:org2) { organization2 } @@ -1174,15 +1173,15 @@ module VCAP::CloudController end describe 'GET /v2/routes/ inline related resources' do - let(:organization) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: organization) } - let(:space) { Space.make(organization:) } - let(:route) { Route.make(domain:, space:) } - let(:myapp) { AppModel.make(name: 'myapp') } - let!(:app_route_mapping) { RouteMappingModel.make(route: route, app: myapp, process_type: 'web') } + let(:organization) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: organization) } + let(:space) { create(:space, organization:) } + let(:route) { create(:route, domain:, space:) } + let(:myapp) { create(:app_model, name: 'myapp') } + let!(:app_route_mapping) { create(:route_mapping_model, route: route, app: myapp, process_type: 'web') } - let!(:webproc1) { ProcessModel.make(app: myapp, type: 'web', created_at: 1.day.ago) } - let!(:webproc2) { ProcessModel.make(app: myapp, type: 'web', created_at: 2.days.ago) } + let!(:webproc1) { create(:process_model, app: myapp, type: 'web', created_at: 1.day.ago) } + let!(:webproc2) { create(:process_model, app: myapp, type: 'web', created_at: 2.days.ago) } before { set_current_user_as_admin } @@ -1203,7 +1202,7 @@ module VCAP::CloudController end describe 'GET /v2/routes/reserved/domain/:domain_guid/host/:hostname' do - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } context 'when the domain does not exist' do it 'returns a NOT_FOUND (404)' do @@ -1213,7 +1212,7 @@ module VCAP::CloudController end context 'when the domain exists' do - let(:route) { Route.make } + let(:route) { create(:route) } context 'when the hostname is not reserved' do it 'returns a NOT_FOUND (404)' do @@ -1240,7 +1239,7 @@ module VCAP::CloudController context 'when the path does exist' do context 'when the path does not contain url encoding' do let(:path) { '/my_path' } - let(:route) { Route.make(path:) } + let(:route) { create(:route, path:) } it 'returns a NO_CONTENT (204)' do get "/v2/routes/reserved/domain/#{route.domain_guid}/host/#{route.host}?path=#{path}" @@ -1250,7 +1249,7 @@ module VCAP::CloudController context 'when the path is url encoded' do let(:path) { '/my%20path' } - let(:route) { Route.make(path:) } + let(:route) { create(:route, path:) } it 'returns a NO_CONTENT' do uri_encoded_path = '%2Fmy%2520path' @@ -1264,7 +1263,7 @@ module VCAP::CloudController end describe 'GET /v2/routes/reserved/domain/:domain_guid' do - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } context 'when the domain does not exist' do it 'returns a NOT_FOUND (404)' do @@ -1274,7 +1273,7 @@ module VCAP::CloudController end context 'when the domain exists' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'returns a NOT_FOUND (404)' do get "/v2/routes/reserved/domain/#{route.domain_guid}" @@ -1282,8 +1281,8 @@ module VCAP::CloudController end context 'when the domain is a private domain' do - let(:domain) { PrivateDomain.make } - let(:route) { Route.make(domain: domain, host: '', space: Space.make(organization: domain.owning_organization)) } + let(:domain) { create(:private_domain) } + let(:route) { create(:route, domain: domain, host: '', space: create(:space, organization: domain.owning_organization)) } it 'returns NO_CONTENT (204)' do get "/v2/routes/reserved/domain/#{route.domain_guid}" @@ -1306,9 +1305,9 @@ module VCAP::CloudController end context 'when the route is tcp route' do - let(:tcp_domain) { SharedDomain.make(router_group_guid: 'tcp-group-1') } - let(:tcp_2_domain) { SharedDomain.make(router_group_guid: 'tcp-group-1') } - let(:tcp_route) { Route.make(domain: tcp_domain, host: '', port: 1234) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: 'tcp-group-1') } + let(:tcp_2_domain) { create(:shared_domain, router_group_guid: 'tcp-group-1') } + let(:tcp_route) { create(:route, domain: tcp_domain, host: '', port: 1234) } before do allow_any_instance_of(RouteValidator).to receive(:validate) @@ -1352,7 +1351,7 @@ module VCAP::CloudController context 'when the path does exist' do context 'when the path does not contain url encoding' do let(:path) { '/my_path' } - let(:route) { Route.make(path:) } + let(:route) { create(:route, path:) } it 'returns a NO_CONTENT (204)' do get "/v2/routes/reserved/domain/#{route.domain_guid}?host=#{route.host}&path=#{path}" @@ -1362,7 +1361,7 @@ module VCAP::CloudController context 'when the path is url encoded' do let(:path) { '/my%20path' } - let(:route) { Route.make(path:) } + let(:route) { create(:route, path:) } it 'returns a NO_CONTENT' do uri_encoded_path = '%2Fmy%2520path' @@ -1376,21 +1375,21 @@ module VCAP::CloudController end describe 'GET /v2/routes/:guid/' do - let(:route_space) { Space.make } - let!(:route) { Route.make(space: route_space) } + let(:route_space) { create(:space) } + let!(:route) { create(:route, space: route_space) } - let(:other_route_space) { Space.make } - let!(:other_route) { Route.make(space: other_route_space) } + let(:other_route_space) { create(:space) } + let!(:other_route) { create(:route, space: other_route_space) } - let(:no_route_space) { Space.make } + let(:no_route_space) { create(:space) } let(:process1) { ProcessModelFactory.make(space: route_space) } let(:process2) { ProcessModelFactory.make(space: route_space) } - let!(:route_mapping1) { RouteMappingModel.make(app: process1.app, route: route, process_type: process1.type) } - let!(:route_mapping2) { RouteMappingModel.make(app: process2.app, route: route, process_type: process2.type) } + let!(:route_mapping1) { create(:route_mapping_model, app: process1.app, route: route, process_type: process1.type) } + let!(:route_mapping2) { create(:route_mapping_model, app: process2.app, route: route, process_type: process2.type) } let(:other_process) { ProcessModelFactory.make(space: other_route_space) } - let!(:other_route_mapping) { RouteMappingModel.make(app: other_process.app, route: other_route, process_type: other_process.type) } + let!(:other_route_mapping) { create(:route_mapping_model, app: other_process.app, route: other_route, process_type: other_process.type) } let(:developer) { make_developer_for_space(no_route_space) } @@ -1445,7 +1444,7 @@ module VCAP::CloudController context 'when the app has more than one web process on it' do let(:developer) { make_developer_for_space(route_space) } let!(:app_model) { process1.app } - let!(:process3) { ProcessModel.make(app: app_model, type: process1.type) } + let!(:process3) { create(:process_model, app: app_model, type: process1.type) } it 'returns only one app guid' do get "v2/routes/#{route.guid}/apps" @@ -1504,7 +1503,7 @@ module VCAP::CloudController end describe 'PUT /v2/routes/:guid/apps/:app_guid' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:process) { ProcessModelFactory.make(space: route.space) } let(:developer) { make_developer_for_space(route.space) } @@ -1553,7 +1552,7 @@ module VCAP::CloudController context 'when the user is not a SpaceDeveloper' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do @@ -1568,7 +1567,7 @@ module VCAP::CloudController context 'when the route and app are already associated' do before do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) end it 'reports success' do @@ -1608,8 +1607,8 @@ module VCAP::CloudController end describe 'tcp routes' do - let(:tcp_domain) { SharedDomain.make(router_group_guid: tcp_group_1) } - let(:route) { Route.make(domain: tcp_domain, port: 9090, host: '') } + let(:tcp_domain) { create(:shared_domain, router_group_guid: tcp_group_1) } + let(:route) { create(:route, domain: tcp_domain, port: 9090, host: '') } it 'associates the route and the app' do expect(route.reload.apps).to be_empty @@ -1642,10 +1641,10 @@ module VCAP::CloudController end describe 'DELETE /v2/routes/:guid/apps/:app_guid' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:process) { ProcessModelFactory.make(space: route.space) } let(:developer) { make_developer_for_space(route.space) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } before do set_current_user(developer) @@ -1693,7 +1692,7 @@ module VCAP::CloudController context 'when the user is not a SpaceDeveloper' do before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do diff --git a/spec/unit/controllers/runtime/security_group_running_defaults_controller_spec.rb b/spec/unit/controllers/runtime/security_group_running_defaults_controller_spec.rb index 8aaf17b4adb..453f4dad017 100644 --- a/spec/unit/controllers/runtime/security_group_running_defaults_controller_spec.rb +++ b/spec/unit/controllers/runtime/security_group_running_defaults_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe SecurityGroupRunningDefaultsController do - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } it 'allows non-admins to read running security groups' do set_current_user_as_admin @@ -13,8 +13,8 @@ module VCAP::CloudController end it 'only returns SecurityGroups that are running defaults' do - SecurityGroup.make(running_default: false) - running_default = SecurityGroup.make(running_default: true) + create(:security_group, running_default: false) + running_default = create(:security_group, running_default: true) get '/v2/config/running_security_groups' expect(last_response.status).to eq(200) @@ -26,7 +26,7 @@ module VCAP::CloudController before { set_current_user_as_admin } it 'sets running_default to true on the security group and return the security group' do - security_group = SecurityGroup.make(running_default: false) + security_group = create(:security_group, running_default: false) put "/v2/config/running_security_groups/#{security_group.guid}", {} @@ -36,8 +36,8 @@ module VCAP::CloudController end it 'prevents non-admins from creating security groups' do - set_current_user(User.make) - security_group = SecurityGroup.make(running_default: false) + set_current_user(create(:user)) + security_group = create(:security_group, running_default: false) put "/v2/config/running_security_groups/#{security_group.guid}", {} @@ -56,15 +56,15 @@ module VCAP::CloudController before { set_current_user_as_admin } it 'does not allow non-admins to delete running security groups' do - set_current_user(User.make) - security_group = SecurityGroup.make(running_default: true) + set_current_user(create(:user)) + security_group = create(:security_group, running_default: true) delete "/v2/config/running_security_groups/#{security_group.guid}" expect(last_response.status).to eq(403) end it 'sets running_default to false on the security group' do - security_group = SecurityGroup.make(running_default: true) + security_group = create(:security_group, running_default: true) delete "/v2/config/running_security_groups/#{security_group.guid}" diff --git a/spec/unit/controllers/runtime/security_group_staging_defaults_controller_spec.rb b/spec/unit/controllers/runtime/security_group_staging_defaults_controller_spec.rb index 4581c36276b..508d88cc991 100644 --- a/spec/unit/controllers/runtime/security_group_staging_defaults_controller_spec.rb +++ b/spec/unit/controllers/runtime/security_group_staging_defaults_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe SecurityGroupStagingDefaultsController do - before { set_current_user(User.make) } + before { set_current_user(create(:user)) } it 'allows admins to read staging security groups' do set_current_user_as_admin @@ -13,8 +13,8 @@ module VCAP::CloudController end it 'only returns SecurityGroups that are staging defaults' do - SecurityGroup.make(staging_default: false) - staging_default = SecurityGroup.make(staging_default: true) + create(:security_group, staging_default: false) + staging_default = create(:security_group, staging_default: true) get '/v2/config/staging_security_groups' expect(decoded_response['total_results']).to eq(1) @@ -25,7 +25,7 @@ module VCAP::CloudController before { set_current_user_as_admin } it 'sets staging_default to true on the security group and return the security group' do - security_group = SecurityGroup.make(staging_default: false) + security_group = create(:security_group, staging_default: false) put "/v2/config/staging_security_groups/#{security_group.guid}", {} @@ -47,7 +47,7 @@ module VCAP::CloudController before { set_current_user_as_admin } it 'sets staging_default to false on the security group' do - security_group = SecurityGroup.make(staging_default: true) + security_group = create(:security_group, staging_default: true) delete "/v2/config/staging_security_groups/#{security_group.guid}" diff --git a/spec/unit/controllers/runtime/security_groups_controller_spec.rb b/spec/unit/controllers/runtime/security_groups_controller_spec.rb index af4b4baa4c4..c6c153eec90 100644 --- a/spec/unit/controllers/runtime/security_groups_controller_spec.rb +++ b/spec/unit/controllers/runtime/security_groups_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe SecurityGroupsController do - let(:group) { SecurityGroup.make } + let(:group) { create(:security_group) } describe 'Query Parameters' do it { expect(SecurityGroupsController).to be_queryable_by(:name) } @@ -53,7 +53,7 @@ module VCAP::CloudController end it 'returns SecurityGroupNameTaken errors on unique name errors' do - SecurityGroup.make(name: 'foo') + create(:security_group, name: 'foo') post '/v2/security_groups', '{"name":"foo"}' expect(last_response.status).to eq(400) @@ -90,10 +90,10 @@ module VCAP::CloudController end describe 'spaces' do - let(:user) { User.make } - let(:org) { Organization.make(user_guids: [user.guid]) } - let(:space) { Space.make(organization: org) } - let(:security_group) { SecurityGroup.make } + let(:user) { create(:user) } + let(:org) { create(:organization, user_guids: [user.guid]) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } before do set_current_user(user) diff --git a/spec/unit/controllers/runtime/shared_domains_controller_spec.rb b/spec/unit/controllers/runtime/shared_domains_controller_spec.rb index ea14c9c5106..6205a8bf0a8 100644 --- a/spec/unit/controllers/runtime/shared_domains_controller_spec.rb +++ b/spec/unit/controllers/runtime/shared_domains_controller_spec.rb @@ -153,7 +153,7 @@ module VCAP::CloudController RoutingApi::RouterGroup.new({ 'guid' => 'random-guid-2', 'type' => 'http' }) ] end - let!(:domain) { SharedDomain.make(name: 'shareddomain.com', router_group_guid: 'router-group-guid1') } + let!(:domain) { create(:shared_domain, name: 'shareddomain.com', router_group_guid: 'router-group-guid1') } before do allow(routing_api_client).to receive_messages(enabled?: true, router_groups: router_groups) @@ -174,7 +174,7 @@ module VCAP::CloudController end it 'includes router_group_type in the response' do - SharedDomain.make(name: 'shareddomain2.com') + create(:shared_domain, name: 'shareddomain2.com') get '/v2/shared_domains' diff --git a/spec/unit/controllers/runtime/space_quota_definitions_controller_spec.rb b/spec/unit/controllers/runtime/space_quota_definitions_controller_spec.rb index b2fc56eb8e5..0bce77a5484 100644 --- a/spec/unit/controllers/runtime/space_quota_definitions_controller_spec.rb +++ b/spec/unit/controllers/runtime/space_quota_definitions_controller_spec.rb @@ -44,8 +44,8 @@ module VCAP::CloudController include_context 'permissions' before do - @obj_a = SpaceQuotaDefinition.make(organization_guid: @org_a.guid) - @obj_b = SpaceQuotaDefinition.make(organization_guid: @org_b.guid) + @obj_a = create(:space_quota_definition, organization: @org_a) + @obj_b = create(:space_quota_definition, organization: @org_b) @space_a.space_quota_definition = @obj_a @space_a.save @@ -151,7 +151,7 @@ module VCAP::CloudController end describe 'errors' do - let(:org) { Organization.make } + let(:org) { create(:organization) } it 'returns SpaceQuotaDefinitionInvalid' do sqd_json = { name: '', non_basic_services_allowed: true, total_services: 1, total_service_keys: 1, total_routes: 1, memory_limit: 2, organization_guid: org.guid } @@ -163,7 +163,7 @@ module VCAP::CloudController end it 'returns SpaceQuotaDefinitionNameTaken errors on unique name errors' do - SpaceQuotaDefinition.make(name: 'foo', organization: org) + create(:space_quota_definition, name: 'foo', organization: org) sqd_json = { name: 'foo', non_basic_services_allowed: true, total_services: 1, total_service_keys: 1, total_routes: 1, memory_limit: 2, organization_guid: org.guid } post '/v2/space_quota_definitions', Oj.dump(sqd_json) @@ -175,7 +175,7 @@ module VCAP::CloudController describe '#delete' do it 'succeeds when no spaces are associated' do - quota = SpaceQuotaDefinition.make + quota = create(:space_quota_definition) delete "/v2/space_quota_definitions/#{quota.guid}" expect(last_response.status).to eq(204) end diff --git a/spec/unit/controllers/runtime/space_summaries_controller_spec.rb b/spec/unit/controllers/runtime/space_summaries_controller_spec.rb index fe6857b4ff5..c14a0a4cb2f 100644 --- a/spec/unit/controllers/runtime/space_summaries_controller_spec.rb +++ b/spec/unit/controllers/runtime/space_summaries_controller_spec.rb @@ -4,23 +4,23 @@ module VCAP::CloudController RSpec.describe SpaceSummariesController do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } let(:app_model) { process.app } - let!(:first_route) { Route.make(space:) } - let!(:second_route) { Route.make(space:) } - let(:first_service) { ManagedServiceInstance.make(space:) } - let(:second_service) { ManagedServiceInstance.make(space:) } + let!(:first_route) { create(:route, space:) } + let!(:second_route) { create(:route, space:) } + let(:first_service) { create(:managed_service_instance, space:) } + let(:second_service) { create(:managed_service_instance, space:) } let(:instances_reporters) { double(:instances_reporters) } let(:running_instances) { { app_model.guid => 5 } } before do - ServiceBinding.make(app: process.app, service_instance: first_service) - ServiceBinding.make(app: process.app, service_instance: second_service) + create(:service_binding, app: process.app, service_instance: first_service) + create(:service_binding, app: process.app, service_instance: second_service) - RouteMappingModel.make(app: process.app, route: first_route, process_type: process.type) - RouteMappingModel.make(app: process.app, route: second_route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: first_route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: second_route, process_type: process.type) allow(CloudController::DependencyLocator.instance).to receive(:instances_reporters).and_return(instances_reporters) allow(instances_reporters).to receive(:number_of_starting_and_running_instances_for_processes).and_return(running_instances) @@ -64,11 +64,11 @@ module VCAP::CloudController end it 'returns service summary for the space, including private service instances' do - foo_space = Space.make - private_broker = ServiceBroker.make(space_guid: foo_space.guid) - service = Service.make(service_broker: private_broker) - service_plan = ServicePlan.make(service: service, public: false) - service_instance = ManagedServiceInstance.make(space:, service_plan:) + foo_space = create(:space) + private_broker = create(:service_broker, space_guid: foo_space.guid) + service = create(:service, service_broker: private_broker) + service_plan = create(:service_plan, service: service, public: false) + service_instance = create(:managed_service_instance, space:, service_plan:) get "/v2/spaces/#{space.guid}/summary" @@ -76,11 +76,11 @@ module VCAP::CloudController end it 'does not return private services from other spaces' do - other_space = Space.make - private_broker2 = ServiceBroker.make(space: other_space) - service2 = Service.make(service_broker: private_broker2) - service_plan2 = ServicePlan.make(service: service2, public: false) - service_instance2 = ManagedServiceInstance.make(space: other_space, service_plan: service_plan2) + other_space = create(:space) + private_broker2 = create(:service_broker, space: other_space) + service2 = create(:service, service_broker: private_broker2) + service_plan2 = create(:service_plan, service: service2, public: false) + service_instance2 = create(:managed_service_instance, space: other_space, service_plan: service_plan2) get "/v2/spaces/#{space.guid}/summary" @@ -89,8 +89,8 @@ module VCAP::CloudController end it 'does not include sharing information for not-shared service instances' do - space = Space.make - ManagedServiceInstance.make(space:) + space = create(:space) + create(:managed_service_instance, space:) get "/v2/spaces/#{space.guid}/summary" @@ -107,9 +107,9 @@ module VCAP::CloudController end context 'when a managed service has been shared into this space' do - let(:receiver_space) { Space.make } - let(:originating_space) { Space.make } - let(:service_instance) { ManagedServiceInstance.make(space: originating_space) } + let(:receiver_space) { create(:space) } + let(:originating_space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, space: originating_space) } let(:services_response) { decoded_response['services'] } before do @@ -137,9 +137,9 @@ module VCAP::CloudController end context 'when a managed service instance is shared into another space' do - let(:host_space) { Space.make } - let(:service_instance) { ManagedServiceInstance.make(space: host_space) } - let(:foreign_space) { Space.make } + let(:host_space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, space: host_space) } + let(:foreign_space) { create(:space) } let(:services_response) { decoded_response['services'] } before do @@ -178,7 +178,7 @@ module VCAP::CloudController context 'when the app has rolled to a new web process' do before do process.destroy - ProcessModel.make(app: app_model, type: ProcessTypes::WEB) + create(:process_model, app: app_model, type: ProcessTypes::WEB) end it 'returns the space apps with the appropriate app guid' do diff --git a/spec/unit/controllers/runtime/spaces_controller_spec.rb b/spec/unit/controllers/runtime/spaces_controller_spec.rb index 7d3a8e19260..8e44bea0115 100644 --- a/spec/unit/controllers/runtime/spaces_controller_spec.rb +++ b/spec/unit/controllers/runtime/spaces_controller_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::SpacesController do - let(:organization_one) { Organization.make } - let(:space_one) { Space.make(organization: organization_one) } + let(:organization_one) { create(:organization) } + let(:space_one) { create(:space, organization: organization_one) } let(:user_email) { Sham.email } let(:uaa_client) { instance_double(UaaClient) } @@ -167,14 +167,14 @@ def decoded_guids describe 'app_events associations' do it 'does not return app_events with inline-relations-depth=0' do - space = Space.make + space = create(:space) get "/v2/spaces/#{space.guid}?inline-relations-depth=0" expect(entity).to have_key('app_events_url') expect(entity).not_to have_key('app_events') end it 'does not return app_events with inline-relations-depth=1 since app_events dataset is relatively expensive to query' do - space = Space.make + space = create(:space) get "/v2/spaces/#{space.guid}?inline-relations-depth=1" expect(entity).to have_key('app_events_url') expect(entity).not_to have_key('app_events') @@ -183,14 +183,14 @@ def decoded_guids describe 'events associations' do it 'does not return events with inline-relations-depth=0' do - space = Space.make + space = create(:space) get "/v2/spaces/#{space.guid}?inline-relations-depth=0" expect(entity).to have_key('events_url') expect(entity).not_to have_key('events') end it 'does not return events with inline-relations-depth=1 since events dataset is relatively expensive to query' do - space = Space.make + space = create(:space) get "/v2/spaces/#{space.guid}?inline-relations-depth=1" expect(entity).to have_key('events_url') expect(entity).not_to have_key('events') @@ -198,12 +198,12 @@ def decoded_guids end describe 'apps assocations' do - let(:organization) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: organization) } - let(:space) { Space.make(organization:) } - let(:app_model) { AppModel.make(space:) } - let!(:web_process_0) { ProcessModel.make(app: app_model, type: 'web', created_at: 2.days.ago) } - let!(:web_process_1) { ProcessModel.make(app: app_model, type: 'web', created_at: 1.day.ago) } + let(:organization) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: organization) } + let(:space) { create(:space, organization:) } + let(:app_model) { create(:app_model, space:) } + let!(:web_process_0) { create(:process_model, app: app_model, type: 'web', created_at: 2.days.ago) } + let!(:web_process_1) { create(:process_model, app: app_model, type: 'web', created_at: 1.day.ago) } it 'returns only the newest process per app' do get "/v2/spaces/#{space.guid}/apps" @@ -213,8 +213,8 @@ def decoded_guids end context 'when there are route mappings' do - let(:route) { Route.make(domain:, space:) } - let!(:app_route_mapping) { RouteMappingModel.make(route: route, app: app_model, process_type: 'web') } + let(:route) { create(:route, domain:, space:) } + let!(:app_route_mapping) { create(:route_mapping_model, route: route, app: app_model, process_type: 'web') } it 'returns only the newest app on the route via plural inline-relations' do get '/v2/spaces?inline-relations-depth=2' @@ -294,7 +294,7 @@ def decoded_guids context 'when the user does not have permissions to read' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) get "/v2/spaces/#{space_one.guid}/user_roles" expect(last_response.status).to eq(403) end @@ -302,13 +302,13 @@ def decoded_guids end describe 'GET /v2/spaces/:guid/service_instances' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } before { set_current_user(developer) } it 'returns the shared from url' do - space_instance = ManagedServiceInstance.make(space:) + space_instance = create(:managed_service_instance, space:) get "/v2/spaces/#{space.guid}/service_instances" service_instance_response = decoded_response.fetch('resources').first @@ -316,7 +316,7 @@ def decoded_guids end it 'returns the service instance parameters url' do - space_instance = ManagedServiceInstance.make(space:) + space_instance = create(:managed_service_instance, space:) get "/v2/spaces/#{space.guid}/service_instances" service_instance_response = decoded_response.fetch('resources').first @@ -325,10 +325,10 @@ def decoded_guids context 'when filtering results' do it 'returns only matching results' do - user_provided_service_instance_1 = UserProvidedServiceInstance.make(space: space, name: 'provided service 1') - UserProvidedServiceInstance.make(space: space, name: 'provided service 2') - managed_service_instance_1 = ManagedServiceInstance.make(space: space, name: 'managed service 1') - ManagedServiceInstance.make(space: space, name: 'managed service 2') + user_provided_service_instance_1 = create(:user_provided_service_instance, space: space, name: 'provided service 1') + create(:user_provided_service_instance, space: space, name: 'provided service 2') + managed_service_instance_1 = create(:managed_service_instance, space: space, name: 'managed service 1') + create(:managed_service_instance, space: space, name: 'managed service 2') get "v2/spaces/#{space.guid}/service_instances", { 'q' => 'name:provided service 1;', 'return_user_provided_service_instances' => true } guids = decoded_response.fetch('resources').map { |service| service.fetch('metadata').fetch('guid') } @@ -342,7 +342,7 @@ def decoded_guids describe 'shared service instances' do context 'when a service instance has been shared from another space' do - let(:shared_service_instance) { ManagedServiceInstance.make(space: Space.make) } + let(:shared_service_instance) { create(:managed_service_instance, space: create(:space)) } before do shared_service_instance.add_shared_space(space) @@ -358,7 +358,7 @@ def decoded_guids context 'when a service instance has been shared between two spaces that are not the queried space' do let(:other_space) { make_space_for_user(developer) } - let(:irrelevant_shared_service_instance) { ManagedServiceInstance.make(space: Space.make) } + let(:irrelevant_shared_service_instance) { create(:managed_service_instance, space: create(:space)) } before do irrelevant_shared_service_instance.add_shared_space(other_space) @@ -374,8 +374,8 @@ def decoded_guids end context 'when there are provided service instances' do - let!(:user_provided_service_instance) { UserProvidedServiceInstance.make(space:) } - let!(:managed_service_instance) { ManagedServiceInstance.make(space:) } + let!(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } + let!(:managed_service_instance) { create(:managed_service_instance, space:) } describe 'when return_user_provided_service_instances is true' do it 'returns ManagedServiceInstances and UserProvidedServiceInstances' do @@ -451,9 +451,8 @@ def decoded_guids expected = opts.fetch(:expected) let(:path) { "/v2/spaces/#{@space_a.guid}/service_instances" } let!(:managed_service_instance) do - ManagedServiceInstance.make( - space: @space_a - ) + create(:managed_service_instance, + space: @space_a) end it "returns service instances to a user that has #{perm_name} permissions" do @@ -501,23 +500,22 @@ def decoded_guids end describe 'enumerating services bound to a service-broker' do - let(:manager) { User.make(guid: 'manager-guid') } - let(:org) { Organization.make(guid: 'organization', manager_guids: [manager.guid], user_guids: org_user_guids) } + let(:manager) { create(:user, guid: 'manager-guid') } + let(:org) { create(:organization, guid: 'organization', manager_guids: [manager.guid], user_guids: org_user_guids) } let(:space) do - Space.make( - organization: org, - guid: 'space-guid', - manager_guids: space_manager_guids - ) + create(:space, + organization: org, + guid: 'space-guid', + manager_guids: space_manager_guids) end let(:org_user_guids) { [manager.guid] } let(:space_manager_guids) { [manager.guid] } let(:query) do { service_broker_guid: @broker.guid } end - let(:broker) { ServiceBroker.make(space: space, guid: 'service-broker-guid') } - let(:service) { Service.make(service_broker: broker, active: true, guid: 'service-guid') } - let!(:service_plan) { ServicePlan.make(service: service, public: false) } + let(:broker) { create(:service_broker, space: space, guid: 'service-broker-guid') } + let(:service) { create(:service, service_broker: broker, active: true, guid: 'service-guid') } + let!(:service_plan) { create(:service_plan, service: service, public: false) } before do set_current_user_as_admin(user: manager) @@ -647,9 +645,9 @@ def decoded_guids end describe 'GET', '/v2/spaces/:guid/services' do - let(:organization_two) { Organization.make } - let(:space_one) { Space.make(organization: organization_one) } - let(:space_two) { Space.make(organization: organization_two) } + let(:organization_two) { create(:organization) } + let(:space_one) { create(:space, organization: organization_one) } + let(:space_two) { create(:space, organization: organization_two) } let(:user) { make_developer_for_space(space_one) } before do @@ -660,9 +658,9 @@ def decoded_guids context 'when there is a private service broker in a space' do before do - @broker = ServiceBroker.make(space: space_one) - @service = Service.make(service_broker: @broker, active: true) - @service_plan = ServicePlan.make(service: @service, public: false) + @broker = create(:service_broker, space: space_one) + @service = create(:service, service_broker: @broker, active: true) + @service_plan = create(:service_plan, service: @service, public: false) end let(:developer) { user } @@ -751,9 +749,9 @@ def decoded_guids context 'with an offering that has private plans' do before do - @service = Service.make(active: true) - @service_plan = ServicePlan.make(service: @service, public: false) - ServicePlanVisibility.make(service_plan: @service.service_plans.first, organization: organization_one) + @service = create(:service, active: true) + @service_plan = create(:service_plan, service: @service, public: false) + create(:service_plan_visibility, service_plan: @service.service_plans.first, organization: organization_one) end it "removes the offering when the org does not have access to any of the service's plans" do @@ -780,7 +778,7 @@ def decoded_guids end it 'excludes plans that are not visible to the org' do - public_service_plan = ServicePlan.make(service: @service, public: true) + public_service_plan = create(:service_plan, service: @service, public: true) get "/v2/spaces/#{space_two.guid}/services?inline-relations-depth=1" @@ -794,8 +792,8 @@ def decoded_guids describe 'get /v2/spaces/:guid/services?q=active:' do before do - @active = Array.new(3) { Service.make(active: true).tap { |svc| ServicePlan.make(service: svc) } } - @inactive = Array.new(2) { Service.make(active: false).tap { |svc| ServicePlan.make(service: svc) } } + @active = Array.new(3) { create(:service, active: true).tap { |svc| create(:service_plan, service: svc) } } + @inactive = Array.new(2) { create(:service, active: false).tap { |svc| create(:service_plan, service: svc) } } end it 'can remove inactive services' do @@ -813,11 +811,11 @@ def decoded_guids describe 'get /v2/spaces/:guid/services?q=label:service_name' do before do - @broker = ServiceBroker.make(space: space_one) - @spaced_scope_service = Service.make(service_broker: @broker, active: true) - @service_plan = ServicePlan.make(service: @spaced_scope_service, public: false) - @public_service = ServicePlan.make(public: true).service - ServicePlan.make(public: true) + @broker = create(:service_broker, space: space_one) + @spaced_scope_service = create(:service, service_broker: @broker, active: true) + @service_plan = create(:service_plan, service: @spaced_scope_service, public: false) + @public_service = create(:service_plan, public: true).service + create(:service_plan, public: true) end it 'gets services filtered by label' do @@ -837,7 +835,7 @@ def decoded_guids describe 'audit events' do let(:user_email) { Sham.email } - let(:space) { Space.make } + let(:space) { create(:space) } before { set_current_user_as_admin(email: user_email) } @@ -883,7 +881,7 @@ def decoded_guids describe 'DELETE /v2/spaces/:guid' do context 'when recursive is false' do - let(:space) { Space.make } + let(:space) { create(:space) } before do set_current_user_as_admin @@ -898,7 +896,7 @@ def decoded_guids end it 'fails to delete spaces with apps associated to it' do - AppModel.make(space:) + create(:app_model, space:) delete "/v2/spaces/#{space.guid}" expect(last_response).to have_status_code(400) @@ -906,7 +904,7 @@ def decoded_guids end it 'deletes the associated labels' do - space_label = SpaceLabelModel.make(key_name: 'some_key', value: 'some_value', resource_guid: space.guid) + space_label = create(:space_label_model, key_name: 'some_key', value: 'some_value', resource_guid: space.guid) delete "/v2/spaces/#{space.guid}" expect(last_response).to have_status_code(204) @@ -915,7 +913,7 @@ def decoded_guids end it 'fails to delete spaces with service_instances associated to it' do - ServiceInstance.make(space:) + create(:service_instance, space:) delete "/v2/spaces/#{space.guid}" expect(last_response).to have_status_code(400) @@ -923,7 +921,7 @@ def decoded_guids end context 'when a service broker exists in the space' do - let!(:broker) { VCAP::CloudController::ServiceBroker.make(space_guid: space.guid) } + let!(:broker) { create(:service_broker, space_guid: space.guid) } it 'fails to delete spaces with service brokers (private brokers) associated to it' do delete "/v2/spaces/#{space.guid}" @@ -947,12 +945,12 @@ def decoded_guids end context 'when recursive is true' do - let!(:org) { Organization.make } - let!(:space) { Space.make(organization: org) } + let!(:org) { create(:organization) } + let!(:space) { create(:space, organization: org) } let!(:space_guid) { space.guid } - let!(:app_guid) { AppModel.make(space_guid:).guid } - let!(:route_guid) { Route.make(space_guid:).guid } - let!(:service_instance) { ManagedServiceInstance.make(space_guid:) } + let!(:app_guid) { create(:app_model, space:).guid } + let!(:route_guid) { create(:route, space:).guid } + let!(:service_instance) { create(:managed_service_instance, space:) } let!(:service_instance_guid) { service_instance.guid } let!(:user) { make_manager_for_org(org) } @@ -1028,11 +1026,11 @@ def decoded_guids end describe 'deleting service instances' do - let(:app_model) { AppModel.make(space:) } - let!(:service_instance_1) { ManagedServiceInstance.make(space_guid:) } - let!(:service_instance_2) { ManagedServiceInstance.make(space_guid:) } - let!(:service_instance_3) { ManagedServiceInstance.make(space_guid:) } - let!(:user_provided_service_instance) { UserProvidedServiceInstance.make(space_guid:) } + let(:app_model) { create(:app_model, space:) } + let!(:service_instance_1) { create(:managed_service_instance, space:) } + let!(:service_instance_2) { create(:managed_service_instance, space:) } + let!(:service_instance_3) { create(:managed_service_instance, space:) } + let!(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } before do stub_deprovision(service_instance_1, accepts_incomplete: true) @@ -1057,9 +1055,9 @@ def decoded_guids end context 'when the second of three bindings fails to delete' do - let!(:binding_1) { ServiceBinding.make(service_instance: service_instance_1, app: app_model) } - let!(:binding_2) { ServiceBinding.make(service_instance: service_instance_2, app: app_model) } - let!(:binding_3) { ServiceBinding.make(service_instance: service_instance_3, app: app_model) } + let!(:binding_1) { create(:service_binding, service_instance: service_instance_1, app: app_model) } + let!(:binding_2) { create(:service_binding, service_instance: service_instance_2, app: app_model) } + let!(:binding_3) { create(:service_binding, service_instance: service_instance_3, app: app_model) } before do stub_unbind(binding_1, accepts_incomplete: true) @@ -1096,9 +1094,9 @@ def decoded_guids end context 'when user is an Org Manager' do - let!(:space) { Space.make } + let!(:space) { create(:space) } let(:user) { make_manager_for_org(space.organization) } - let!(:broker) { VCAP::CloudController::ServiceBroker.make(space_guid: space.guid) } + let!(:broker) { create(:service_broker, space_guid: space.guid) } it 'successfully deletes spaces with associated private service brokers' do set_current_user(user) @@ -1162,7 +1160,7 @@ def decoded_guids end context 'when an instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(type: 'update', state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, type: 'update', state: 'in progress') } before do service_instance_1.service_instance_operation = last_operation @@ -1240,10 +1238,10 @@ def decoded_guids end describe 'GET /v2/spaces/:guid/users' do - let(:mgr) { User.make } - let(:user) { User.make } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } - let(:space) { Space.make(organization: org, manager_guids: [mgr.guid], developer_guids: [user.guid]) } + let(:mgr) { create(:user) } + let(:user) { create(:user) } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: [mgr.guid, user.guid]) } + let(:space) { create(:space, organization: org, manager_guids: [mgr.guid], developer_guids: [user.guid]) } before do allow(uaa_client).to receive(:usernames_for_ids).and_return({}) @@ -1263,16 +1261,15 @@ def decoded_guids end describe 'DELETE /v2/spaces/:guid/developers/:user_guid' do - let(:mgr) { User.make } - let(:developer) { User.make } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: org_user_guids) } + let(:mgr) { create(:user) } + let(:developer) { create(:user) } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: org_user_guids) } let(:space) do - Space.make( - organization: org, - manager_guids: [mgr.guid], - developer_guids: space_dev_guids, - auditor_guids: space_auditor_guids - ) + create(:space, + organization: org, + manager_guids: [mgr.guid], + developer_guids: space_dev_guids, + auditor_guids: space_auditor_guids) end let(:space_dev_guids) { [developer.guid] } let(:org_user_guids) { [mgr.guid, developer.guid] } @@ -1284,7 +1281,7 @@ def decoded_guids context 'as admin who is not a developer or manager' do before do - set_current_user_as_admin(user: User.make) + set_current_user_as_admin(user: create(:user)) end it 'successfully removes the developer' do @@ -1317,7 +1314,7 @@ def decoded_guids end context 'when removing another developer' do - let(:dev) { User.make } + let(:dev) { create(:user) } let(:space_dev_guids) { [dev.guid, developer.guid] } let(:org_user_guids) { [mgr.guid, developer.guid, dev.guid] } @@ -1334,7 +1331,7 @@ def decoded_guids end context 'as an auditor who is not a developer' do - let(:auditor) { User.make } + let(:auditor) { create(:user) } let(:space_auditor_guids) { [auditor.guid] } let(:org_user_guids) { [mgr.guid, developer.guid, auditor.guid] } @@ -1351,16 +1348,15 @@ def decoded_guids end describe 'DELETE /v2/spaces/:guid/managers/:user_guid' do - let(:manager) { User.make } - let(:developer) { User.make } - let(:org) { Organization.make(manager_guids: [manager.guid], user_guids: org_user_guids) } + let(:manager) { create(:user) } + let(:developer) { create(:user) } + let(:org) { create(:organization, manager_guids: [manager.guid], user_guids: org_user_guids) } let(:space) do - Space.make( - organization: org, - manager_guids: space_manager_guids, - developer_guids: space_dev_guids, - auditor_guids: space_auditor_guids - ) + create(:space, + organization: org, + manager_guids: space_manager_guids, + developer_guids: space_dev_guids, + auditor_guids: space_auditor_guids) end let(:space_dev_guids) { [developer.guid] } let(:org_user_guids) { [manager.guid, developer.guid] } @@ -1373,7 +1369,7 @@ def decoded_guids context 'as admin who is not a developer or manager' do before do - set_current_user_as_admin(user: User.make) + set_current_user_as_admin(user: create(:user)) end it 'successfully removes the manager' do @@ -1407,7 +1403,7 @@ def decoded_guids end context 'when removing another manager' do - let(:mgr) { User.make } + let(:mgr) { create(:user) } let(:space_manager_guids) { [mgr.guid, manager.guid] } let(:org_user_guids) { [manager.guid, mgr.guid, developer.guid] } @@ -1423,7 +1419,7 @@ def decoded_guids end context 'as an auditor who is not a manager' do - let(:auditor) { User.make } + let(:auditor) { create(:user) } let(:space_auditor_guids) { [auditor.guid] } let(:org_user_guids) { [manager.guid, developer.guid, auditor.guid] } @@ -1440,16 +1436,15 @@ def decoded_guids end describe 'DELETE /v2/spaces/:guid/auditors/:user_guid' do - let(:manager) { User.make } - let(:auditor) { User.make } - let(:org) { Organization.make(manager_guids: [manager.guid], user_guids: org_user_guids) } + let(:manager) { create(:user) } + let(:auditor) { create(:user) } + let(:org) { create(:organization, manager_guids: [manager.guid], user_guids: org_user_guids) } let(:space) do - Space.make( - organization: org, - manager_guids: space_manager_guids, - developer_guids: space_dev_guids, - auditor_guids: space_auditor_guids - ) + create(:space, + organization: org, + manager_guids: space_manager_guids, + developer_guids: space_dev_guids, + auditor_guids: space_auditor_guids) end let(:space_dev_guids) { [] } let(:org_user_guids) { [manager.guid, auditor.guid] } @@ -1462,7 +1457,7 @@ def decoded_guids context 'as admin who is not a manager' do before do - set_current_user_as_admin(user: User.make) + set_current_user_as_admin(user: create(:user)) end it 'successfully removes the auditor' do @@ -1472,7 +1467,7 @@ def decoded_guids end context 'as developer' do - let(:developer) { User.make } + let(:developer) { create(:user) } let(:space_dev_guids) { [developer.guid] } let(:org_user_guids) { [manager.guid, auditor.guid, developer.guid] } @@ -1511,7 +1506,7 @@ def decoded_guids end context 'when removing another auditor' do - let(:auditor2) { User.make } + let(:auditor2) { create(:user) } let(:space_auditor_guids) { [auditor.guid, auditor2.guid] } let(:org_user_guids) { [manager.guid, auditor.guid, auditor2.guid] } @@ -1529,11 +1524,11 @@ def decoded_guids end describe 'POST /v2/spaces' do - let(:org) { Organization.make } + let(:org) { create(:organization) } let(:name) { 'MySpace' } context 'setting roles at space creation time' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do set_current_user_as_admin @@ -1588,7 +1583,7 @@ def decoded_guids end context 'with duplicate spaces due to race conditions' do - let!(:dupe_space) { Space.make(organization_guid: org.guid, name: name) } + let!(:dupe_space) { create(:space, organization: org, name: name) } before do allow_any_instance_of(Space).to receive(:validate).and_return(true) @@ -1606,10 +1601,10 @@ def decoded_guids end describe 'PUT /v2/spaces/:guid' do - let(:user) { set_current_user(User.make) } - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } + let(:user) { set_current_user(create(:user)) } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } let(:assigner) { IsolationSegmentAssign.new } context 'associating an isolation_segment' do @@ -1714,7 +1709,7 @@ def decoded_guids end context 'setting roles at space update time' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } let(:uri) { "/v2/spaces/#{space.guid}" } before do @@ -1739,7 +1734,7 @@ def decoded_guids end context 'when there is already another space manager' do - let(:mgr) { User.make } + let(:mgr) { create(:user) } before do space.organization.add_user(mgr) @@ -1759,7 +1754,7 @@ def decoded_guids end context 'deassigning an space manager' do - let(:another_user) { User.make } + let(:another_user) { create(:user) } before do space.organization.add_user(another_user) @@ -1863,10 +1858,10 @@ def decoded_guids describe 'DELETE /v2/spaces/:guid/isolation_segment' do let(:assigner) { IsolationSegmentAssign.new } - let(:user) { set_current_user(User.make) } - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } + let(:user) { set_current_user(create(:user)) } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } before do assigner.assign(isolation_segment_model, [organization]) @@ -1955,9 +1950,9 @@ def decoded_guids end describe 'DELETE /v2/spaces/:guid/unmapped_routes' do - let(:user) { set_current_user(User.make) } - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } + let(:user) { set_current_user(create(:user)) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(state: 'STARTED') } describe 'permissions' do @@ -1984,7 +1979,7 @@ def decoded_guids end it "returns #{expected_return_value}" do - unmapped_route = Route.make(space:) + unmapped_route = create(:route, space:) delete "/v2/spaces/#{space.guid}/unmapped_routes" expect(last_response.status).to eq(expected_return_value), "Expected #{expected_return_value}, got: #{last_response.status} body: #{last_response.body} role: #{role}" @@ -2011,7 +2006,7 @@ def decoded_guids context 'when a route is neither mapped to a route nor bound to a service instance' do it 'deletes the route' do - unmapped_route = Route.make(space:) + unmapped_route = create(:route, space:) delete "/v2/spaces/#{space.guid}/unmapped_routes", {}, headers_for(user) @@ -2025,8 +2020,8 @@ def decoded_guids context 'when a route is mapped to an app' do it 'does not delete it and does not send any event to ...' do - mapped_route = Route.make(space:) - RouteMappingModel.make(app: process.app, route: mapped_route, app_port: 9090) + mapped_route = create(:route, space:) + create(:route_mapping_model, app: process.app, route: mapped_route, app_port: 9090) delete "/v2/spaces/#{space.guid}/unmapped_routes", {}, headers_for(user) @@ -2040,9 +2035,9 @@ def decoded_guids context 'when the route has a service instance' do it 'does not delete it' do - service_instance = ManagedServiceInstance.make(:routing, space:) - mapped_route = VCAP::CloudController::Route.make(space:) - RouteBinding.make(route: mapped_route, service_instance: service_instance) + service_instance = create(:managed_service_instance, :routing, space:) + mapped_route = create(:route, space:) + create(:route_binding, route: mapped_route, service_instance: service_instance) delete "/v2/spaces/#{space.guid}/unmapped_routes", {}, headers_for(user) @@ -2057,10 +2052,10 @@ def decoded_guids end describe 'security groups' do - let(:user) { User.make } - let(:org) { Organization.make(user_guids: [user.guid]) } - let(:space) { Space.make(organization: org) } - let(:security_group) { SecurityGroup.make } + let(:user) { create(:user) } + let(:org) { create(:organization, user_guids: [user.guid]) } + let(:space) { create(:space, organization: org) } + let(:security_group) { create(:security_group) } before do set_current_user(user) @@ -2229,7 +2224,7 @@ def decoded_guids %i[manager developer auditor].each do |role| plural_role = role.to_s.pluralize describe "PUT /v2/spaces/:guid/#{plural_role}" do - let(:user) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } let(:event_type) { "audit.user.space_#{role}_add" } let(:origin1) { 'larry_origin' } let(:origin2) { 'another_larry_origin' } @@ -2247,7 +2242,7 @@ def decoded_guids end context 'when the specified origin is not in the user\'s origins' do - let(:user) { User.make(username: 'fake@example.com') } + let(:user) { create(:user, username: 'fake@example.com') } let(:fake_origin) { 'fake_origin' } before do @@ -2379,8 +2374,8 @@ def decoded_guids %i[manager developer auditor].each do |role| plural_role = role.to_s.pluralize describe "POST /v2/spaces/:guid/#{role}" do - let(:user) { User.make(username: 'larry_the_user') } - let(:user2) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } + let(:user2) { create(:user, username: 'larry_the_user') } let(:origin1) { 'larry_origin' } let(:origin2) { 'another_larry_origin' } let(:event_type) { "audit.user.space_#{role}_add" } @@ -2469,7 +2464,7 @@ def decoded_guids %i[manager developer auditor].each do |role| plural_role = role.to_s.pluralize describe "DELETE /v2/spaces/:guid/#{plural_role}" do - let(:user) { User.make(username: 'larry_the_user') } + let(:user) { create(:user, username: 'larry_the_user') } let(:event_type) { "audit.user.space_#{role}_remove" } before do @@ -2576,8 +2571,8 @@ def decoded_guids %i[manager developer auditor].each do |role| plural_role = role.to_s.pluralize describe "PUT /v2/spaces/:guid/#{plural_role}/:user_guid" do - let(:user) { User.make(username: 'larry_the_user') } - let(:space) { Space.make } + let(:user) { create(:user, username: 'larry_the_user') } + let(:space) { create(:space) } let(:event_type) { "audit.user.space_#{role}_add" } before do @@ -2624,8 +2619,8 @@ def decoded_guids %i[manager developer auditor].each do |role| plural_role = role.to_s.pluralize describe "DELETE /v2/spaces/:guid/#{plural_role}/:user_guid" do - let(:user) { User.make(username: 'larry_the_user') } - let(:space) { Space.make } + let(:user) { create(:user, username: 'larry_the_user') } + let(:space) { create(:space) } let(:event_type) { "audit.user.space_#{role}_remove" } before do @@ -2671,7 +2666,7 @@ def decoded_guids end describe 'Deprecated endpoints' do - let!(:domain) { SharedDomain.make } + let!(:domain) { create(:shared_domain) } describe 'DELETE /v2/spaces/:guid/domains/:shared_domain' do it 'pretendses that it deleted a domain' do diff --git a/spec/unit/controllers/runtime/stacks_controller_spec.rb b/spec/unit/controllers/runtime/stacks_controller_spec.rb index 8eab1491ba8..f3c007e5bb8 100644 --- a/spec/unit/controllers/runtime/stacks_controller_spec.rb +++ b/spec/unit/controllers/runtime/stacks_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::StacksController do - let(:user) { User.make } + let(:user) { create(:user) } before do set_current_user(user, admin: true) @@ -57,7 +57,7 @@ module VCAP::CloudController end describe '#delete' do - let(:stack) { Stack.make } + let(:stack) { create(:stack) } context 'if no app exist' do it 'succeds' do diff --git a/spec/unit/controllers/runtime/stagings_controller_spec.rb b/spec/unit/controllers/runtime/stagings_controller_spec.rb index 2be7d38dc8c..74ab37312d3 100644 --- a/spec/unit/controllers/runtime/stagings_controller_spec.rb +++ b/spec/unit/controllers/runtime/stagings_controller_spec.rb @@ -237,7 +237,7 @@ module VCAP::CloudController before do Fog.unmock! TestConfig.override(**staging_config) - set_current_user_as_admin(user: User.make(guid: '1234'), email: 'joe@joe.com', user_name: 'briggs') + set_current_user_as_admin(user: create(:user, guid: '1234'), email: 'joe@joe.com', user_name: 'briggs') allow_any_instance_of(BitsExpiration).to receive(:expire_packages!) end @@ -265,8 +265,8 @@ module VCAP::CloudController end describe 'GET /staging/packages/:guid' do - let(:package_without_bits) { PackageModel.make } - let(:package) { PackageModel.make } + let(:package_without_bits) { create(:package_model) } + let(:package) { create(:package_model) } before { authorize(staging_user, staging_password) } @@ -337,15 +337,14 @@ def create_test_blob it_behaves_like 'a Build to Droplet stager' do let(:file_content) { 'droplet content' } - let(:package) { PackageModel.make(app: process) } + let(:package) { create(:package_model, app: process) } let(:build) do - BuildModel.make( - package: package, - app: process, - created_by_user_guid: '1234', - created_by_user_email: 'joe@joe.com', - created_by_user_name: 'briggs' - ) + create(:build_model, + package: package, + app: process, + created_by_user_guid: '1234', + created_by_user_email: 'joe@joe.com', + created_by_user_name: 'briggs') end let(:droplet) { nil } @@ -368,7 +367,7 @@ def create_test_blob end it_behaves_like 'a legacy Droplet stager to support rolling deploys' do - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } let(:file_content) { 'droplet content' } let(:upload_req) do @@ -381,8 +380,8 @@ def create_test_blob it_behaves_like 'droplet staging error handling' do let(:file_content) { 'droplet content' } - let(:package) { PackageModel.make(app: process) } - let(:build) { BuildModel.make(package: package, app: process) } + let(:package) { create(:package_model, app: process) } + let(:build) { create(:build_model, package: package, app: process) } let(:droplet) { nil } let(:upload_req) do { upload: { droplet: Rack::Test::UploadedFile.new(temp_file_with_content(file_content)) } } @@ -400,7 +399,7 @@ def create_test_blob let(:upload_req) do { upload: { droplet: Rack::Test::UploadedFile.new(temp_file_with_content(file_content)) } } end - let(:app_model) { AppModel.make } + let(:app_model) { create(:app_model) } let(:stack) { Sham.name } context 'with a valid app' do @@ -449,7 +448,7 @@ def create_test_blob end describe 'GET /staging/v3/buildpack_cache/:stack/:app_guid/download' do - let(:app_model) { AppModel.make } + let(:app_model) { create(:app_model) } let(:buildpack_cache) { Tempfile.new(app_model.guid) } let(:stack) { Sham.name } @@ -514,7 +513,7 @@ def make_request(guid=app_model.guid) end describe 'GET /staging/v3/droplets/:guid/download' do - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } before { authorize(staging_user, staging_password) } diff --git a/spec/unit/controllers/runtime/user_summaries_controller_spec.rb b/spec/unit/controllers/runtime/user_summaries_controller_spec.rb index 8c5952905e9..7fc8fa25d17 100644 --- a/spec/unit/controllers/runtime/user_summaries_controller_spec.rb +++ b/spec/unit/controllers/runtime/user_summaries_controller_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController RSpec.describe UserSummariesController do describe 'GET /users/:guid/summary' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:user) { make_user_for_space(space) } before { set_current_user_as_admin } diff --git a/spec/unit/controllers/runtime/users_controller_spec.rb b/spec/unit/controllers/runtime/users_controller_spec.rb index 4ac852a5654..d7dcbf616ca 100644 --- a/spec/unit/controllers/runtime/users_controller_spec.rb +++ b/spec/unit/controllers/runtime/users_controller_spec.rb @@ -87,7 +87,7 @@ module VCAP::CloudController end context 'admin user' do - let(:member_a) { User.make } + let(:member_a) { create(:user) } let(:enumeration_expectation_a) { User.order(:id).limit(50) } include_examples 'permission enumeration', 'Admin', @@ -100,8 +100,8 @@ module VCAP::CloudController end describe 'GET /v2/users' do - let(:greg) { User.make } - let(:timothy) { User.make } + let(:greg) { create(:user) } + let(:timothy) { create(:user) } before do set_current_user(greg, admin: true) @@ -120,7 +120,7 @@ module VCAP::CloudController end describe 'GET /v2/users/:guid' do - let(:greg) { User.make } + let(:greg) { create(:user) } before do set_current_user(greg, admin: true) @@ -136,9 +136,9 @@ module VCAP::CloudController end describe 'GET /v2/users/:guid/organizations' do - let(:mgr) { User.make } - let(:user) { User.make } - let(:org) { Organization.make(manager_guids: [mgr.guid], user_guids: [user.guid]) } + let(:mgr) { create(:user) } + let(:user) { create(:user) } + let(:org) { create(:organization, manager_guids: [mgr.guid], user_guids: [user.guid]) } before { set_current_user(user) } @@ -154,10 +154,10 @@ module VCAP::CloudController end describe 'assigning org roles' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } - let(:other_user) { User.make(username: 'other_user') } + let(:user) { create(:user) } + let(:other_user) { create(:user, username: 'other_user') } let(:expected_response) do { 'metadata' => { @@ -391,9 +391,9 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/audited_organizations/:org_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } let(:event_type) { 'audit.user.organization_auditor_remove' } before do @@ -416,7 +416,7 @@ module VCAP::CloudController end context 'when acting on another user' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do org.add_auditor(other_user) @@ -431,7 +431,7 @@ module VCAP::CloudController context 'as a manager' do context 'when acting on another user' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do org.add_manager(user) @@ -454,11 +454,11 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/audited_spaces/:space_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } let(:event_type) { 'audit.user.space_auditor_remove' } - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do set_current_user(user) @@ -523,9 +523,9 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/billing_managed_organizations/:org_guid' do - let(:space) { Space.make } - let(:user) { User.make } - let(:billing_manager) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } + let(:billing_manager) { create(:user) } let(:org) { space.organization } let(:event_type) { 'audit.user.organization_billing_manager_remove' } @@ -567,7 +567,7 @@ module VCAP::CloudController end describe 'when there are other billing managers' do - let(:other_billing_manager) { User.make } + let(:other_billing_manager) { create(:user) } before do org.add_billing_manager other_billing_manager @@ -600,9 +600,9 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/managed_organizations/:org_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:org_manager) { User.make(username: 'org manager') } + let(:org_manager) { create(:user, username: 'org manager') } let(:event_type) { 'audit.user.organization_manager_remove' } before do @@ -615,7 +615,7 @@ module VCAP::CloudController describe 'removing the last org manager' do context 'as an admin' do - let(:admin) { User.make(username: 'admin') } + let(:admin) { create(:user, username: 'admin') } before do set_current_user admin @@ -650,7 +650,7 @@ module VCAP::CloudController end describe 'when there are other managers' do - before { org.add_manager User.make } + before { org.add_manager create(:user) } describe 'removing oneself' do before { set_current_user(org_manager) } @@ -668,7 +668,7 @@ module VCAP::CloudController end context 'as a non-admin non-manager' do - let(:user) { User.make } + let(:user) { create(:user) } before do org.add_user user @@ -685,9 +685,9 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/organizations/:org_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } let(:event_type) { 'audit.user.organization_user_remove' } before do @@ -704,7 +704,7 @@ module VCAP::CloudController end context 'when acting on another org user' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do org.add_user(other_user) @@ -725,7 +725,7 @@ module VCAP::CloudController context 'when there are other managers' do before do - org.add_manager(User.make) + org.add_manager(create(:user)) end it 'can remove itself' do @@ -753,7 +753,7 @@ module VCAP::CloudController context 'when there are other billing managers' do before do - org.add_billing_manager(User.make) + org.add_billing_manager(create(:user)) end it 'can remove itself' do @@ -776,7 +776,7 @@ module VCAP::CloudController context 'as an admin' do context 'when acting on another user' do - let(:other_user) { User.make } + let(:other_user) { create(:user) } before do org.add_user other_user @@ -799,10 +799,10 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/managed_spaces/:space_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } - let(:other_user) { User.make(username: 'other_user') } + let(:user) { create(:user) } + let(:other_user) { create(:user, username: 'other_user') } let(:event_type) { 'audit.user.space_manager_remove' } before do @@ -859,11 +859,11 @@ module VCAP::CloudController end describe 'DELETE /v2/users/:guid/spaces/:space_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } let(:event_type) { 'audit.user.space_developer_remove' } - let(:other_user) { User.make(username: 'other user') } + let(:other_user) { create(:user, username: 'other user') } before do set_current_user(user) @@ -926,10 +926,10 @@ module VCAP::CloudController end describe 'assigning space roles' do - let(:other_user) { User.make(username: 'other_user') } - let(:space) { Space.make } + let(:other_user) { create(:user, username: 'other_user') } + let(:space) { create(:space) } let(:org) { space.organization } - let(:user) { User.make } + let(:user) { create(:user) } before do allow(uaa_client).to receive(:usernames_for_ids).and_return({ other_user.guid => other_user.username }) diff --git a/spec/unit/controllers/services/lifecycle/service_instance_binding_manager_spec.rb b/spec/unit/controllers/services/lifecycle/service_instance_binding_manager_spec.rb index b94dfe203e8..72ad70f1438 100644 --- a/spec/unit/controllers/services/lifecycle/service_instance_binding_manager_spec.rb +++ b/spec/unit/controllers/services/lifecycle/service_instance_binding_manager_spec.rb @@ -19,16 +19,15 @@ module VCAP::CloudController end describe '#create_route_service_instance_binding' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:route_service_url) { 'https://some-rs-url' } let(:route_services_enabled) { true } context 'user provided service instance' do let(:service_instance) do - UserProvidedServiceInstance.make( - space: route.space, - route_service_url: route_service_url - ) + create(:user_provided_service_instance, + space: route.space, + route_service_url: route_service_url) end before do @@ -44,8 +43,8 @@ module VCAP::CloudController end context 'when route is internal' do - let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let(:internal_route) { Route.make(domain: internal_domain, space: route.space) } + let(:internal_domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let(:internal_route) { create(:route, domain: internal_domain, space: route.space) } it 'raises an api error' do expect do @@ -69,7 +68,7 @@ module VCAP::CloudController end context 'managed service instance' do - let(:service_instance) { ManagedServiceInstance.make(:routing, space: route.space) } + let(:service_instance) { create(:managed_service_instance, :routing, space: route.space) } let(:arbitrary_parameters) { { 'arbitrary' => 'parameters' } } before do @@ -99,7 +98,7 @@ module VCAP::CloudController end it 'fails if the instance has another operation in progress' do - service_instance.service_instance_operation = ServiceInstanceOperation.make state: 'in progress' + service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') expect do manager.create_route_service_instance_binding(route.guid, service_instance.guid, arbitrary_parameters, route_services_enabled) end.to raise_error do |e| @@ -109,8 +108,8 @@ module VCAP::CloudController end context 'when route is internal' do - let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let(:internal_route) { Route.make(domain: internal_domain, space: route.space) } + let(:internal_domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let(:internal_route) { create(:route, domain: internal_domain, space: route.space) } it 'raises an api error' do expect do @@ -154,7 +153,7 @@ module VCAP::CloudController context 'when the route is already bound to a service_instance' do before do - RouteBinding.make(route: route, service_instance: ManagedServiceInstance.make(:routing, space: route.space)) + create(:route_binding, route: route, service_instance: create(:managed_service_instance, :routing, space: route.space)) end it 'raises a already bound to service instance error' do @@ -168,7 +167,7 @@ module VCAP::CloudController context 'when the route is already bound to the same service_instance' do before do - RouteBinding.make(route:, service_instance:) + create(:route_binding, route:, service_instance:) end it 'raises a service already bound to same route error' do @@ -192,7 +191,7 @@ module VCAP::CloudController let(:process) { ProcessModelFactory.make(space: route.space, state: 'STARTED') } before do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) end it 'sends a message on to diego' do @@ -368,7 +367,7 @@ module VCAP::CloudController allow(logger).to receive(:error) process = ProcessModelFactory.make(space: route.space, state: 'STARTED') - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) stub_request(:delete, service_binding_url_pattern).to_return(status: 200, body: {}.to_json) @@ -393,24 +392,24 @@ module VCAP::CloudController describe '#delete_route_service_binding' do context 'user provided service instance' do - let(:route) { Route.make } + let(:route) { create(:route) } let(:route_service_url) { 'https://my-rs.example.com' } let(:route_binding) do - RouteBinding.make(service_instance:, - route:, - route_service_url:) + create(:route_binding, service_instance:, + route:, + route_service_url:) end let(:service_instance) do - UserProvidedServiceInstance.make(:routing, - space: route.space, - route_service_url: route_service_url) + create(:user_provided_service_instance, :routing, + space: route.space, + route_service_url: route_service_url) end before do allow(access_validator).to receive(:validate_access).with(:update, anything).and_return(true) process = ProcessModelFactory.make(space: route.space, state: 'STARTED') - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) end it 'unbinds the route and service instance', isolation: :truncation do @@ -429,7 +428,7 @@ module VCAP::CloudController end context 'managed service instances' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:service_instance) { route_binding.service_instance } let(:route) { route_binding.route } @@ -468,7 +467,7 @@ module VCAP::CloudController context 'when the route and service instance are not bound' do it 'raises a RouteBindingNotFound error' do expect do - manager.delete_route_service_instance_binding(Route.make.guid, service_instance.guid) + manager.delete_route_service_instance_binding(create(:route).guid, service_instance.guid) end.to raise_error ServiceInstanceBindingManager::RouteBindingNotFound expect(a_request(:delete, service_binding_url_pattern)).not_to have_been_made @@ -501,7 +500,7 @@ module VCAP::CloudController it 'fails if the instance has another operation in progress' do allow(logger).to receive(:error) - service_instance.service_instance_operation = ServiceInstanceOperation.make state: 'in progress' + service_instance.service_instance_operation = create(:service_instance_operation, state: 'in progress') expect do manager.delete_route_service_instance_binding(route.guid, service_instance.guid) end.to raise_error do |e| diff --git a/spec/unit/controllers/services/lifecycle/service_instance_deprovisioner_spec.rb b/spec/unit/controllers/services/lifecycle/service_instance_deprovisioner_spec.rb index 259ae706f15..9b4390dab63 100644 --- a/spec/unit/controllers/services/lifecycle/service_instance_deprovisioner_spec.rb +++ b/spec/unit/controllers/services/lifecycle/service_instance_deprovisioner_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe ServiceInstanceDeprovisioner do - let(:event_repository) { Repositories::ServiceEventRepository.new(UserAuditInfo.new(user_guid: User.make.guid, user_email: 'email')) } + let(:event_repository) { Repositories::ServiceEventRepository.new(UserAuditInfo.new(user_guid: create(:user).guid, user_email: 'email')) } let(:deprovisioner) { ServiceInstanceDeprovisioner.new(event_repository) } describe '#deprovision_service_instance' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:fake_job) { instance_double(Jobs::DeleteActionJob) } let(:fake_action) { instance_double(ServiceInstanceDelete, can_return_warnings?: true) } let(:some_boolean) { false } diff --git a/spec/unit/controllers/services/lifecycle/service_instance_purger_spec.rb b/spec/unit/controllers/services/lifecycle/service_instance_purger_spec.rb index ef3a6d485e0..145e3cad8a9 100644 --- a/spec/unit/controllers/services/lifecycle/service_instance_purger_spec.rb +++ b/spec/unit/controllers/services/lifecycle/service_instance_purger_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::ServiceInstancePurger do - let(:event_repository) { VCAP::CloudController::Repositories::ServiceEventRepository.new(UserAuditInfo.new(user_guid: User.make.guid, user_email: 'email')) } + let(:event_repository) { VCAP::CloudController::Repositories::ServiceEventRepository.new(UserAuditInfo.new(user_guid: create(:user).guid, user_email: 'email')) } let(:purger) { ServiceInstancePurger.new(event_repository) } describe '#purge' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } it 'deletes the service instance' do purger.purge(service_instance) @@ -33,8 +33,8 @@ module VCAP::CloudController end context 'when there are service bindings' do - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } it 'records a service instance with a service binding delete event' do purger.purge(service_instance) @@ -55,11 +55,11 @@ module VCAP::CloudController end context 'when there are route bindings' do - let(:route_1) { Route.make(space: service_instance.space) } - let(:route_2) { Route.make(space: service_instance.space) } - let!(:service_instance) { ManagedServiceInstance.make(:routing) } - let!(:route_binding_1) { RouteBinding.make(service_instance: service_instance, route: route_1) } - let!(:route_binding_2) { RouteBinding.make(service_instance: service_instance, route: route_2) } + let(:route_1) { create(:route, space: service_instance.space) } + let(:route_2) { create(:route, space: service_instance.space) } + let!(:service_instance) { create(:managed_service_instance, :routing) } + let!(:route_binding_1) { create(:route_binding, service_instance: service_instance, route: route_1) } + let!(:route_binding_2) { create(:route_binding, service_instance: service_instance, route: route_2) } it 'deletes the route bindings' do purger.purge(service_instance) @@ -70,8 +70,8 @@ module VCAP::CloudController end context 'when there are service keys' do - let!(:service_key_1) { ServiceKey.make(service_instance:) } - let!(:service_key_2) { ServiceKey.make(service_instance:) } + let!(:service_key_1) { create(:service_key, service_instance:) } + let!(:service_key_2) { create(:service_key, service_instance:) } it 'records a service instance with a service key delete event' do purger.purge(service_instance) @@ -92,7 +92,7 @@ module VCAP::CloudController end context 'when the service instance has shared spaces' do - let(:target_space) { Space.make } + let(:target_space) { create(:space) } before do service_instance.add_shared_space(target_space) diff --git a/spec/unit/controllers/services/lifecycle/service_key_manager_spec.rb b/spec/unit/controllers/services/lifecycle/service_key_manager_spec.rb index fda39256ee8..94dc94cfb5f 100644 --- a/spec/unit/controllers/services/lifecycle/service_key_manager_spec.rb +++ b/spec/unit/controllers/services/lifecycle/service_key_manager_spec.rb @@ -9,7 +9,7 @@ module VCAP::CloudController let(:unbind_body) { {} } let(:services_event_repository) { double :services_event_respository, record_service_key_event: nil } - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } let(:service_key_delete_action) { double(:service_key_delete_action) } let(:delete_action_job) { double(:delete_action_job) } @@ -55,7 +55,7 @@ def stub_requests(broker) context 'when the instance has a last_operation' do before do - service_key.service_instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_key.service_instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') service_key.service_instance.save end @@ -68,9 +68,9 @@ def stub_requests(broker) end context 'when the instance operation is in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } - let(:instance) { ManagedServiceInstance.make } - let(:service_key) { ServiceKey.make(service_instance: instance) } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } + let(:instance) { create(:managed_service_instance) } + let(:service_key) { create(:service_key, service_instance: instance) } before do instance.service_instance_operation = last_operation diff --git a/spec/unit/controllers/services/service_bindings_controller_spec.rb b/spec/unit/controllers/services/service_bindings_controller_spec.rb index be6b5c0f5b7..5b0a7709e36 100644 --- a/spec/unit/controllers/services/service_bindings_controller_spec.rb +++ b/spec/unit/controllers/services/service_bindings_controller_spec.rb @@ -71,21 +71,19 @@ def bind_url_regex(opts={}) before do @process_a = ProcessModelFactory.make(space: @space_a) - @service_instance_a = ManagedServiceInstance.make + @service_instance_a = create(:managed_service_instance) @service_instance_a.add_shared_space(@space_a) - @obj_a = ServiceBinding.make( - app: @process_a.app, - service_instance: @service_instance_a - ) + @obj_a = create(:service_binding, + app: @process_a.app, + service_instance: @service_instance_a) @process_b = ProcessModelFactory.make(space: @space_b) - @service_instance_b = ManagedServiceInstance.make(space: @space_b) - @obj_b = ServiceBinding.make( - app: @process_b.app, - service_instance: @service_instance_b - ) + @service_instance_b = create(:managed_service_instance, space: @space_b) + @obj_b = create(:service_binding, + app: @process_b.app, + service_instance: @service_instance_b) end describe 'Org Level Permissions' do @@ -174,7 +172,7 @@ def bind_url_regex(opts={}) end describe 'POST /v2/service_bindings/' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } let(:process) { ProcessModelFactory.make(space:) } @@ -288,7 +286,7 @@ def bind_url_regex(opts={}) end before do - set_current_user(User.make) + set_current_user(create(:user)) end it 'returns 403' do @@ -299,7 +297,7 @@ def bind_url_regex(opts={}) context 'when attempting to bind and the service binding already exists' do before do - ServiceBinding.make(app: process.app, service_instance: service_instance) + create(:service_binding, app: process.app, service_instance: service_instance) end it 'returns a ServiceBindingAppServiceTaken error' do @@ -311,7 +309,7 @@ def bind_url_regex(opts={}) end context 'for user provided instances' do - let(:service_instance) { UserProvidedServiceInstance.make(space:, credentials:) } + let(:service_instance) { create(:user_provided_service_instance, space:, credentials:) } let(:req) do { app_guid: process.guid, @@ -356,9 +354,9 @@ def bind_url_regex(opts={}) context 'for managed instances' do let(:broker) { service_instance.service.service_broker } - let(:service) { Service.make(bindings_retrievable: false) } - let(:service_plan) { ServicePlan.make(service:) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service) { create(:service, bindings_retrievable: false) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:req) do { app_guid: process.guid, @@ -409,7 +407,7 @@ def bind_url_regex(opts={}) end context 'when bindings_retrievable is true' do - let(:service) { Service.make(bindings_retrievable: true) } + let(:service) { create(:service, bindings_retrievable: true) } context 'and the broker returns asynchronously' do let(:bind_status) { 202 } @@ -442,7 +440,7 @@ def bind_url_regex(opts={}) end context 'when bindings_retrievable is false' do - let(:service) { Service.make(bindings_retrievable: false) } + let(:service) { create(:service, bindings_retrievable: false) } it 'throws invalid service binding error' do expect(last_response).to have_status_code(400) @@ -491,7 +489,7 @@ def bind_url_regex(opts={}) context 'and the broker is spec-incompliant and returns asynchronously anyway' do let(:bind_status) { 202 } - let(:service) { Service.make(bindings_retrievable: true) } + let(:service) { create(:service, bindings_retrievable: true) } it 'returns a 502 status code' do post '/v2/service_bindings?accepts_incomplete=false', req.to_json @@ -531,8 +529,8 @@ def bind_url_regex(opts={}) end context 'when the app is in a space that the service instance is shared to' do - let(:shared_from_space) { Space.make } - let(:service_instance) { ManagedServiceInstance.make(space: shared_from_space) } + let(:shared_from_space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, space: shared_from_space) } before do service_instance.add_shared_space(space) @@ -654,7 +652,7 @@ def bind_url_regex(opts={}) end context 'when volume_mount is required and volume_services_enabled is disabled' do - let(:service_instance) { ManagedServiceInstance.make(:volume_mount, space:) } + let(:service_instance) { create(:managed_service_instance, :volume_mount, space:) } before do TestConfig.config[:volume_services_enabled] = false @@ -672,7 +670,7 @@ def bind_url_regex(opts={}) describe 'locking the instance as a result of binding' do context 'when the instance has a previous operation' do before do - service_instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') service_instance.save end @@ -724,7 +722,7 @@ def bind_url_regex(opts={}) end before do - ServiceBinding.make(app: process.app, service_instance: service_instance) + create(:service_binding, app: process.app, service_instance: service_instance) end it 'does not send a bind request to broker' do @@ -761,7 +759,7 @@ def bind_url_regex(opts={}) context 'when the instance has a last_operation' do before do - service_instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') end it 'rolls back the last_operation of the service instance' do @@ -815,8 +813,8 @@ def bind_url_regex(opts={}) end describe 'DELETE /v2/service_bindings/:service_binding_guid' do - let(:service_binding) { ServiceBinding.make(service_instance: service_instance, app: process.app) } - let(:space) { Space.make } + let(:service_binding) { create(:service_binding, service_instance: service_instance, app: process.app) } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } let(:process) { ProcessModelFactory.make(space:) } @@ -893,7 +891,7 @@ def bind_url_regex(opts={}) context 'when the user does not belong to the space' do it 'returns a 403' do - set_current_user(User.make) + set_current_user(create(:user)) delete "/v2/service_bindings/#{service_binding.guid}" expect(last_response).to have_status_code(403) @@ -909,7 +907,7 @@ def bind_url_regex(opts={}) end context 'for user provided instances' do - let(:service_instance) { UserProvidedServiceInstance.make(space:, credentials:) } + let(:service_instance) { create(:user_provided_service_instance, space:, credentials:) } let(:req) do { app_guid: process.guid, @@ -922,7 +920,7 @@ def bind_url_regex(opts={}) context 'for managed instances' do let(:broker) { service_instance.service.service_broker } - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } let(:req) do { app_guid: process.guid, @@ -1092,7 +1090,7 @@ def bind_url_regex(opts={}) context 'when the instance has a last_operation' do before do - service_binding.service_instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_binding.service_instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') service_binding.service_instance.save end @@ -1120,7 +1118,7 @@ def bind_url_regex(opts={}) end context 'when a binding has operation in progress' do - let(:last_operation) { ServiceBindingOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_binding_operation, state: 'in progress') } before do service_binding.service_binding_operation = last_operation @@ -1152,7 +1150,7 @@ def bind_url_regex(opts={}) end context 'when the instance operation is in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } before do service_instance.service_instance_operation = last_operation @@ -1184,16 +1182,16 @@ def bind_url_regex(opts={}) end describe 'GET', '/v2/service_bindings?inline-relations-depth=1', :regression do - let(:space) { Space.make } - let(:managed_service_instance) { ManagedServiceInstance.make(space:) } - let(:user_provided_service_instance) { UserProvidedServiceInstance.make(space:) } + let(:space) { create(:space) } + let(:managed_service_instance) { create(:managed_service_instance, space:) } + let(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } let(:process) { ProcessModelFactory.make(space:) } let(:developer) { make_developer_for_space(space) } it 'returns both user provided and managed service instances' do set_current_user(developer) - ServiceBinding.make(service_instance: managed_service_instance, app: process.app) - ServiceBinding.make(service_instance: user_provided_service_instance, app: process.app, name: 'service-binding-name') + create(:service_binding, service_instance: managed_service_instance, app: process.app) + create(:service_binding, service_instance: user_provided_service_instance, app: process.app, name: 'service-binding-name') get '/v2/service_bindings?inline-relations-depth=1' expect(last_response.status).to be(200) @@ -1218,9 +1216,9 @@ def bind_url_regex(opts={}) it 'can query service-bindings by name' do set_current_user(developer) - ServiceBinding.make(service_instance: managed_service_instance, app: process1.app, name: 'potato') - ServiceBinding.make(service_instance: managed_service_instance, app: process2.app, name: '3-ring') - ServiceBinding.make(service_instance: managed_service_instance, app: process3.app, name: 'potato') + create(:service_binding, service_instance: managed_service_instance, app: process1.app, name: 'potato') + create(:service_binding, service_instance: managed_service_instance, app: process2.app, name: '3-ring') + create(:service_binding, service_instance: managed_service_instance, app: process3.app, name: 'potato') get '/v2/service_bindings?inline-relations-depth=1&q=name:3-ring' expect(last_response.status).to eq(200), last_response.body @@ -1247,9 +1245,9 @@ def bind_url_regex(opts={}) before do set_current_user(developer) - 6.times { |i| ServiceBinding.make(service_instance: managed_service_instance, app: processes[i].app, name: 'potato') } - ServiceBinding.make(service_instance: managed_service_instance, app: processes[6].app, name: '3-ring') - ServiceBinding.make(service_instance: managed_service_instance, app: processes[7].app, name: '3-ring') + 6.times { |i| create(:service_binding, service_instance: managed_service_instance, app: processes[i].app, name: 'potato') } + create(:service_binding, service_instance: managed_service_instance, app: processes[6].app, name: '3-ring') + create(:service_binding, service_instance: managed_service_instance, app: processes[7].app, name: '3-ring') end it 'can set the next_url and prev_url links' do @@ -1315,15 +1313,15 @@ def bind_url_regex(opts={}) end context 'when there are service-instances in multiple spaces' do - let(:space1) { Space.make } + let(:space1) { create(:space) } let(:process1) { ProcessModelFactory.make(space: space1) } let(:developer1) { make_developer_for_space(space1) } - let(:si1) { ManagedServiceInstance.make(space: space1) } + let(:si1) { create(:managed_service_instance, space: space1) } - let(:space2) { Space.make } + let(:space2) { create(:space) } let(:process2) { ProcessModelFactory.make(space: space2) } let(:developer2) { make_developer_for_space(space2) } - let(:si2) { ManagedServiceInstance.make(space: space2) } + let(:si2) { create(:managed_service_instance, space: space2) } context 'when developer in one space tries to bind a service-instance from another space' do before do @@ -1345,8 +1343,8 @@ def bind_url_regex(opts={}) context 'when both developers bind some service-instances' do before do - ServiceBinding.make(service_instance: si1, app: process1.app, name: 'binding') - ServiceBinding.make(service_instance: si2, app: process2.app, name: 'binding') + create(:service_binding, service_instance: si1, app: process1.app, name: 'binding') + create(:service_binding, service_instance: si2, app: process2.app, name: 'binding') end it 'developer1 can see only bindings in space1' do @@ -1377,8 +1375,8 @@ def bind_url_regex(opts={}) context 'when the binding has a create operation in progress' do before do - binding = ServiceBinding.make(service_instance: managed_service_instance, app: process.app) - binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress', type: 'create', description: 'creating') + binding = create(:service_binding, service_instance: managed_service_instance, app: process.app) + binding.service_binding_operation = create(:service_binding_operation, state: 'in progress', type: 'create', description: 'creating') set_current_user(developer) end @@ -1395,8 +1393,8 @@ def bind_url_regex(opts={}) context 'when the binding has a delete operation in progress' do before do - binding = ServiceBinding.make(service_instance: managed_service_instance, app: process.app) - binding.service_binding_operation = ServiceBindingOperation.make(state: 'in progress', type: 'delete', description: 'deleting') + binding = create(:service_binding, service_instance: managed_service_instance, app: process.app) + binding.service_binding_operation = create(:service_binding_operation, state: 'in progress', type: 'delete', description: 'deleting') set_current_user(developer) end @@ -1413,20 +1411,20 @@ def bind_url_regex(opts={}) end describe 'GET', '/v2/service_bindings/:guid/parameters' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } context 'when the service binding is valid' do - let(:service_plan) { ServicePlan.make(service:) } - let(:managed_service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_plan) { create(:service_plan, service:) } + let(:managed_service_instance) { create(:managed_service_instance, space:, service_plan:) } let(:process) { ProcessModelFactory.make(space:) } context 'when the service has bindings_retrievable set to false' do - let(:service) { Service.make(bindings_retrievable: false) } + let(:service) { create(:service, bindings_retrievable: false) } it 'returns a 400' do set_current_user(developer) - binding = ServiceBinding.make(service_instance: managed_service_instance, app: process.app) + binding = create(:service_binding, service_instance: managed_service_instance, app: process.app) get "/v2/service_bindings/#{binding.guid}/parameters" expect(last_response.status).to be(400) @@ -1435,9 +1433,9 @@ def bind_url_regex(opts={}) end context 'when the service has bindings_retrievable set to true' do - let(:service) { Service.make(bindings_retrievable: true) } + let(:service) { create(:service, bindings_retrievable: true) } let(:broker) { service.service_broker } - let(:binding) { ServiceBinding.make(service_instance: managed_service_instance, app: process.app) } + let(:binding) { create(:service_binding, service_instance: managed_service_instance, app: process.app) } let(:body) { { 'parameters' => { 'foo' => true } }.to_json } let(:response_code) { 200 } @@ -1523,7 +1521,7 @@ def bind_url_regex(opts={}) end context 'when the user has access to the binding of a shared service instance' do - let(:managed_service_instance) { ManagedServiceInstance.make(space: Space.make, service_plan: service_plan) } + let(:managed_service_instance) { create(:managed_service_instance, space: create(:space), service_plan: service_plan) } before do managed_service_instance.add_shared_space(space) @@ -1537,8 +1535,8 @@ def bind_url_regex(opts={}) end context 'when the user who shared the service instance tries to access binding parameters in the shared to space' do - let(:source_space) { Space.make } - let(:managed_service_instance) { ManagedServiceInstance.make(space: source_space, service_plan: service_plan) } + let(:source_space) { create(:space) } + let(:managed_service_instance) { create(:managed_service_instance, space: source_space, service_plan: service_plan) } let(:developer) { make_developer_for_space(source_space) } before do @@ -1552,7 +1550,7 @@ def bind_url_regex(opts={}) end context 'when the service binding has an operation in progress' do - let(:last_operation) { ServiceBindingOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_binding_operation, state: 'in progress') } before do binding.service_binding_operation = last_operation @@ -1567,7 +1565,7 @@ def bind_url_regex(opts={}) end context 'user permissions' do - let(:user) { User.make } + let(:user) { create(:user) } let(:body) { {}.to_json } { @@ -1604,11 +1602,11 @@ def bind_url_regex(opts={}) context 'when the binding is for a user provided service' do let(:process) { ProcessModelFactory.make(space:) } - let(:user_provided_service_instance) { UserProvidedServiceInstance.make(space:) } + let(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } it 'returns a 400' do set_current_user(developer) - binding = ServiceBinding.make(service_instance: user_provided_service_instance, app: process.app) + binding = create(:service_binding, service_instance: user_provided_service_instance, app: process.app) get "/v2/service_bindings/#{binding.guid}/parameters" expect(last_response.status).to be(400) @@ -1626,7 +1624,7 @@ def bind_url_regex(opts={}) end context 'when the requested binding is a service key' do - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } it 'returns a 404' do set_current_user(developer) diff --git a/spec/unit/controllers/services/service_brokers_controller_spec.rb b/spec/unit/controllers/services/service_brokers_controller_spec.rb index eff7192f8de..005a59d3484 100644 --- a/spec/unit/controllers/services/service_brokers_controller_spec.rb +++ b/spec/unit/controllers/services/service_brokers_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe ServiceBrokersController, :services do - let(:broker) { ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:catalog_json) do { 'services' => [{ @@ -87,12 +87,12 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end describe 'GET /v2/service_brokers' do - let(:space_a) { Space.make } - let(:space_b) { Space.make } - let(:user) { User.make } - let!(:public_broker) { ServiceBroker.make } - let!(:space_a_broker) { ServiceBroker.make space: space_a } - let!(:space_b_broker) { ServiceBroker.make space: space_b } + let(:space_a) { create(:space) } + let(:space_b) { create(:space) } + let(:user) { create(:user) } + let!(:public_broker) { create(:service_broker) } + let!(:space_a_broker) { create(:service_broker, space: space_a) } + let!(:space_b_broker) { create(:service_broker, space: space_b) } before { set_current_user_as_admin } @@ -178,7 +178,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) let(:body) { body_hash.to_json } let(:errors) { instance_double(Sequel::Model::Errors, on: nil) } - let(:user) { User.make } + let(:user) { create(:user) } before { set_current_user_as_admin } @@ -248,9 +248,9 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end describe 'adding a broker to a space only' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:body) { body_hash.merge({ space_guid: space.guid }).to_json } - let(:user) { User.make } + let(:user) { create(:user) } before do space.organization.add_user user @@ -272,7 +272,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end it 'returns a 403 if a user is not a SpaceDeveloper for the space' do - set_current_user(User.make) + set_current_user(create(:user)) post '/v2/service_brokers', body expect(last_response.status).to eq(403) @@ -308,8 +308,8 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end context 'when the user is a SpaceDeveloper' do - let(:user) { User.make } - let(:space) { Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } before do space.organization.add_user user @@ -336,7 +336,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) context 'when the broker url is taken' do before do - ServiceBroker.make(broker_url: body_hash[:broker_url]) + create(:service_broker, broker_url: body_hash[:broker_url]) end it 'creates the broker' do @@ -361,7 +361,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) context 'when the broker name is taken' do before do - ServiceBroker.make(name: body_hash[:name]) + create(:service_broker, name: body_hash[:name]) end it 'returns an error' do @@ -593,8 +593,8 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end describe 'DELETE /v2/service_brokers/:guid' do - let!(:broker) { ServiceBroker.make(name: 'FreeWidgets', broker_url: 'http://example.com/', auth_password: 'secret') } - let(:user) { User.make } + let!(:broker) { create(:service_broker, name: 'FreeWidgets', broker_url: 'http://example.com/', auth_password: 'secret') } + let(:user) { create(:user) } before { set_current_user_as_admin } @@ -633,9 +633,9 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) context 'when a service instance exists', isolation: :truncation do it 'returns a 400 and an appropriate error message' do - service = Service.make(service_broker: broker) - service_plan = ServicePlan.make(service:) - ManagedServiceInstance.make(service_plan:) + service = create(:service, service_broker: broker) + service_plan = create(:service_plan, service:) + create(:managed_service_instance, service_plan:) delete "/v2/service_brokers/#{broker.guid}" @@ -650,7 +650,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) describe 'authentication' do it 'returns a forbidden status for non-admin users' do - set_current_user(User.make) + set_current_user(create(:user)) delete "/v2/service_brokers/#{broker.guid}" expect(last_response).to be_forbidden @@ -675,15 +675,14 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) let(:body) { body_hash.to_json } let(:errors) { instance_double(Sequel::Model::Errors, on: nil) } let(:broker) do - ServiceBroker.make( - guid: '123', - name: 'My Custom Service', - broker_url: 'http://broker.example.com', - auth_username: 'me', - auth_password: 'abc123' - ) + create(:service_broker, + guid: '123', + name: 'My Custom Service', + broker_url: 'http://broker.example.com', + auth_username: 'me', + auth_password: 'abc123') end - let(:user) { User.make } + let(:user) { create(:user) } before do attrs = { @@ -768,7 +767,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end context 'when the broker name is taken' do - let!(:another_broker) { ServiceBroker.make(broker_url: 'http://example.com') } + let!(:another_broker) { create(:service_broker, broker_url: 'http://example.com') } before { body_hash[:name] = another_broker.name } @@ -820,11 +819,11 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) }] } end - let(:service) { Service.make(:v2, service_broker: broker) } - let(:service_plan) { ServicePlan.make(:v2, service:) } + let(:service) { create(:service, :v2, service_broker: broker) } + let(:service_plan) { create(:service_plan, :v2, service:) } before do - ManagedServiceInstance.make(:v2, service_plan:) + create(:managed_service_instance, :v2, service_plan:) end it 'includes the warnings in the response' do @@ -837,7 +836,7 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) describe 'authentication' do it 'returns a forbidden status for non-admin users' do - set_current_user(User.make) + set_current_user(create(:user)) put "/v2/service_brokers/#{broker.guid}", body expect(last_response).to be_forbidden @@ -845,18 +844,17 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end context 'when the user is a space developer' do - let(:space) { Space.make(id: 1) } + let(:space) { create(:space, id: 1) } let(:broker) do - ServiceBroker.make( - guid: '123', - name: 'My Custom Service', - broker_url: 'http://broker.example.com', - auth_username: 'me', - auth_password: 'abc123', - space_id: space.id - ) + create(:service_broker, + guid: '123', + name: 'My Custom Service', + broker_url: 'http://broker.example.com', + auth_username: 'me', + auth_password: 'abc123', + space_id: space.id) end - let(:user) { User.make } + let(:user) { create(:user) } before do space.organization.add_user user @@ -896,16 +894,15 @@ def stub_catalog(broker_url: nil, username: nil, password: nil) end context 'when the user is a space developer in another space' do - let(:space_outer) { Space.make(id: 2) } + let(:space_outer) { create(:space, id: 2) } let(:broker) do - ServiceBroker.make( - guid: '123', - name: 'My Custom Service', - broker_url: 'http://broker.example.com', - auth_username: 'me', - auth_password: 'abc123', - space_id: space_outer.id - ) + create(:service_broker, + guid: '123', + name: 'My Custom Service', + broker_url: 'http://broker.example.com', + auth_username: 'me', + auth_password: 'abc123', + space_id: space_outer.id) end it 'does not update the broker' do diff --git a/spec/unit/controllers/services/service_instances_controller_spec.rb b/spec/unit/controllers/services/service_instances_controller_spec.rb index 80a75f21d79..16b5c3b94b0 100644 --- a/spec/unit/controllers/services/service_instances_controller_spec.rb +++ b/spec/unit/controllers/services/service_instances_controller_spec.rb @@ -45,8 +45,8 @@ module VCAP::CloudController include_context 'permissions' before do - @obj_a = ManagedServiceInstance.make(space: @space_a) - @obj_b = ManagedServiceInstance.make(space: @space_b) + @obj_a = create(:managed_service_instance, space: @space_a) + @obj_b = create(:managed_service_instance, space: @space_b) end def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) @@ -85,11 +85,11 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'plans from a private broker' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:organization) { space.organization } - let!(:private_broker) { ServiceBroker.make(space_guid: space.guid) } - let!(:service_from_a_private_broker) { Service.make(service_broker: private_broker) } - let!(:plan_from_a_private_broker) { ServicePlan.make(service: service_from_a_private_broker, public: false) } + let!(:private_broker) { create(:service_broker, space_guid: space.guid) } + let!(:service_from_a_private_broker) { create(:service, service_broker: private_broker) } + let!(:plan_from_a_private_broker) { create(:service_plan, service: service_from_a_private_broker, public: false) } let(:broker) { private_broker } let!(:developer) { make_developer_for_space(space) } @@ -116,7 +116,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end it 'does not allow user to create a service instance for a private broker in a difference space as the broker' do - other_space = Space.make(organization:) + other_space = create(:space, organization:) other_space.add_developer developer payload = Oj.dump( @@ -132,9 +132,9 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'plans with public:false' do - let!(:unprivileged_organization) { Organization.make } - let!(:private_plan) { ServicePlan.make(:v2, public: false) } - let!(:unprivileged_space) { Space.make(organization: unprivileged_organization) } + let!(:unprivileged_organization) { create(:organization) } + let!(:private_plan) { create(:service_plan, :v2, public: false) } + let!(:unprivileged_space) { create(:space, organization: unprivileged_organization) } let!(:developer) { make_developer_for_space(unprivileged_space) } let(:broker) { private_plan.service_broker } @@ -166,14 +166,14 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) describe 'a user who belongs to a privileged organization' do let!(:privileged_organization) do - Organization.make.tap do |org| + create(:organization).tap do |org| ServicePlanVisibility.create( organization: org, service_plan: private_plan ) end end - let!(:privileged_space) { Space.make(organization: privileged_organization) } + let!(:privileged_space) { create(:space, organization: privileged_organization) } before do developer.add_organization(privileged_organization) @@ -224,7 +224,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) enumerate: 1 it 'prevents a developer from creating a service instance in an unauthorized space' do - plan = ServicePlan.make(:v2) + plan = create(:service_plan, :v2) req = Oj.dump( name: 'foo', @@ -276,10 +276,10 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'with a v2 service' do let(:service_broker_url) { "http://example.com/v2/service_instances/#{ServiceInstance.last.guid}" } let(:service_broker_url_with_accepts_incomplete) { "#{service_broker_url}?accepts_incomplete=true" } - let(:service_broker) { ServiceBroker.make(broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } - let(:service) { Service.make(service_broker:) } - let(:plan) { ServicePlan.make(:v2, service:) } - let(:space) { Space.make } + let(:service_broker) { create(:service_broker, broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } + let(:service) { create(:service, service_broker:) } + let(:plan) { create(:service_plan, :v2, service:) } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } let(:response_body) do { @@ -327,8 +327,8 @@ def stub_delete_and_return(status, body) end context 'when the catalog response includes services that require route forwarding' do - let(:service) { Service.make(:routing, service_broker:) } - let(:plan) { ServicePlan.make(:v2, service:) } + let(:service) { create(:service, :routing, service_broker:) } + let(:plan) { create(:service_plan, :v2, service:) } context 'when route service is disabled' do before do @@ -380,8 +380,8 @@ def stub_delete_and_return(status, body) end context 'when the catalog response includes services that require volume mounts' do - let(:service) { Service.make(:volume_mount, service_broker:) } - let(:plan) { ServicePlan.make(:v2, service:) } + let(:service) { create(:service, :volume_mount, service_broker:) } + let(:plan) { create(:service_plan, :v2, service:) } context 'when volume mounts service is disabled' do before do @@ -465,7 +465,7 @@ def stub_delete_and_return(status, body) end context 'when the plan has maintenance_info' do - let(:plan) { ServicePlan.make(:v2, service: service, maintenance_info: { version: '2.0.0' }) } + let(:plan) { create(:service_plan, :v2, service: service, maintenance_info: { version: '2.0.0' }) } it 'passes along the maintenance_info to the service broker' do create_managed_service_instance(accepts_incomplete: 'false') @@ -943,7 +943,7 @@ def stub_delete_and_return(status, body) end context 'when a service instance has been shared into a target space' do - let(:source_space) { Space.make(organization: space.organization) } + let(:source_space) { create(:space, organization: space.organization) } before do source_space.add_developer(developer) @@ -1110,7 +1110,7 @@ def stub_delete_and_return(status, body) end context 'when the broker returns "maintenance_info" in the catalog' do - let(:plan) { ServicePlan.make(:v2, service: service, maintenance_info: { version: '2.0.0' }) } + let(:plan) { create(:service_plan, :v2, service: service, maintenance_info: { version: '2.0.0' }) } it 'stores it on a service instance level' do create_managed_service_instance @@ -1124,7 +1124,7 @@ def stub_delete_and_return(status, body) end describe 'GET', '/v2/managed_service_instances' do - let(:service_instance) { ManagedServiceInstance.make(gateway_name: Sham.name) } + let(:service_instance) { create(:managed_service_instance, gateway_name: Sham.name) } let(:space) { service_instance.space } let(:developer) { make_developer_for_space(space) } @@ -1147,7 +1147,7 @@ def stub_delete_and_return(status, body) describe 'GET /v2/service_instances' do context 'dashboard_url' do - let(:service_instance) { ManagedServiceInstance.make(gateway_name: Sham.name) } + let(:service_instance) { create(:managed_service_instance, gateway_name: Sham.name) } let(:space) { service_instance.space } let(:developer) { make_developer_for_space(space) } @@ -1164,17 +1164,17 @@ def stub_delete_and_return(status, body) before { set_current_user_as_admin } context 'when filtering by org guid' do - let(:org1) { Organization.make(guid: '1') } - let(:org2) { Organization.make(guid: '2') } - let(:org3) { Organization.make(guid: '3') } - let(:space1) { Space.make(organization: org1) } - let(:space2) { Space.make(organization: org2) } - let(:space3) { Space.make(organization: org3) } + let(:org1) { create(:organization, guid: '1') } + let(:org2) { create(:organization, guid: '2') } + let(:org3) { create(:organization, guid: '3') } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } + let(:space3) { create(:space, organization: org3) } context 'when the operator is ":"' do it 'successfully filters' do - instance1 = ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space2) + instance1 = create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space2) get "v2/service_instances?q=organization_guid:#{org1.guid}" @@ -1185,9 +1185,9 @@ def stub_delete_and_return(status, body) context 'when filtering by other parameters as well' do it 'filters by both parameters' do - instance1 = ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space1) - ManagedServiceInstance.make(name: instance1.name, space: space2) + instance1 = create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space1) + create(:managed_service_instance, name: instance1.name, space: space2) get "v2/service_instances?q=organization_guid:#{org1.guid}&q=name:#{instance1.name}" @@ -1201,9 +1201,9 @@ def stub_delete_and_return(status, body) context 'when the operator is "IN"' do it 'successfully filters' do - instance1 = ManagedServiceInstance.make(name: 'inst1', space: space1) - instance2 = ManagedServiceInstance.make(name: 'inst2', space: space2) - ManagedServiceInstance.make(name: 'inst3', space: space3) + instance1 = create(:managed_service_instance, name: 'inst1', space: space1) + instance2 = create(:managed_service_instance, name: 'inst2', space: space2) + create(:managed_service_instance, name: 'inst3', space: space3) get "v2/service_instances?q=organization_guid%20IN%20#{org1.guid},#{org2.guid}" @@ -1216,9 +1216,9 @@ def stub_delete_and_return(status, body) end context 'when the operator is a comparator' do - let!(:instance1) { ManagedServiceInstance.make(name: 'inst1', space: space1) } - let!(:instance2) { ManagedServiceInstance.make(name: 'inst2', space: space2) } - let!(:instance3) { ManagedServiceInstance.make(name: 'inst3', space: space3) } + let!(:instance1) { create(:managed_service_instance, name: 'inst1', space: space1) } + let!(:instance2) { create(:managed_service_instance, name: 'inst2', space: space2) } + let!(:instance3) { create(:managed_service_instance, name: 'inst3', space: space3) } it 'successfully filters on <' do get "v2/service_instances?q=organization_guid<#{org2.guid}" @@ -1261,8 +1261,8 @@ def stub_delete_and_return(status, body) context 'when the query is missing an operator or a value' do it 'filters by org_guid = nil (to match behavior of filters other than org guid)' do - ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space2) + create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space2) get 'v2/service_instances?q=organization_guid' @@ -1274,17 +1274,17 @@ def stub_delete_and_return(status, body) end context 'when filtering by other query parameters' do - let!(:org1) { Organization.make(guid: '1') } - let!(:org2) { Organization.make(guid: '2') } - let!(:org3) { Organization.make(guid: '3') } - let!(:space1) { Space.make(organization: org1) } - let!(:space2) { Space.make(organization: org2) } - let!(:space3) { Space.make(organization: org3) } - - let!(:instance1) { ManagedServiceInstance.make(name: 'instance-1', space: space1) } - let!(:instance2) { ManagedServiceInstance.make(name: 'instance-2', space: space1, gateway_name: "hall'") } - let!(:instance3) { ManagedServiceInstance.make(name: instance1.name, space: space2) } - let!(:instance4) { ManagedServiceInstance.make(name: 'instance-4', space: space3, gateway_name: 'oates') } + let!(:org1) { create(:organization, guid: '1') } + let!(:org2) { create(:organization, guid: '2') } + let!(:org3) { create(:organization, guid: '3') } + let!(:space1) { create(:space, organization: org1) } + let!(:space2) { create(:space, organization: org2) } + let!(:space3) { create(:space, organization: org3) } + + let!(:instance1) { create(:managed_service_instance, name: 'instance-1', space: space1) } + let!(:instance2) { create(:managed_service_instance, name: 'instance-2', space: space1, gateway_name: "hall'") } + let!(:instance3) { create(:managed_service_instance, name: instance1.name, space: space2) } + let!(:instance4) { create(:managed_service_instance, name: 'instance-4', space: space3, gateway_name: 'oates') } it 'filters by space_guid' do get "v2/service_instances?q=space_guid:#{space1.guid}" @@ -1296,7 +1296,7 @@ def stub_delete_and_return(status, body) end it 'filters by service_plan_guid' do - service_plan1 = ServicePlan.make(active: false) + service_plan1 = create(:service_plan, active: false) instance1.service_plan_id = service_plan1.id instance1.save get "v2/service_instances?q=service_plan_guid:#{service_plan1.guid}" @@ -1308,8 +1308,8 @@ def stub_delete_and_return(status, body) end context 'service bindings' do - let!(:service_binding_1) { ServiceBinding.make(service_instance: instance1) } - let!(:service_binding_2) { ServiceBinding.make(service_instance: instance2) } + let!(:service_binding_1) { create(:service_binding, service_instance: instance1) } + let!(:service_binding_2) { create(:service_binding, service_instance: instance2) } it 'filters by service_binding_guid' do get "v2/service_instances?q=service_binding_guid:#{service_binding_1.guid}" @@ -1322,8 +1322,8 @@ def stub_delete_and_return(status, body) end context 'service keys' do - let!(:service_key_1) { ServiceKey.make(service_instance: instance1, name: 'hall') } - let!(:service_key_2) { ServiceKey.make(service_instance: instance2, name: 'oates') } + let!(:service_key_1) { create(:service_key, service_instance: instance1, name: 'hall') } + let!(:service_key_2) { create(:service_key, service_instance: instance2, name: 'oates') } it 'filters by service_key_guid' do get "v2/service_instances?q=service_key_guid:#{service_key_1.guid}" @@ -1336,10 +1336,10 @@ def stub_delete_and_return(status, body) end context 'gateway_name' do - let!(:instance1) { ManagedServiceInstance.make(name: 'instance-1', space: space1) } - let!(:instance2) { ManagedServiceInstance.make(name: 'instance-2', space: space1, gateway_name: "hall'") } - let!(:instance3) { ManagedServiceInstance.make(name: instance1.name, space: space2) } - let!(:instance4) { ManagedServiceInstance.make(name: 'instance-4', space: space3, gateway_name: 'oates') } + let!(:instance1) { create(:managed_service_instance, name: 'instance-1', space: space1) } + let!(:instance2) { create(:managed_service_instance, name: 'instance-2', space: space1, gateway_name: "hall'") } + let!(:instance3) { create(:managed_service_instance, name: instance1.name, space: space2) } + let!(:instance4) { create(:managed_service_instance, name: 'instance-4', space: space3, gateway_name: 'oates') } it 'filters by gateway_name' do get 'v2/service_instances?q=gateway_name:oates' @@ -1352,7 +1352,7 @@ def stub_delete_and_return(status, body) end it 'filters by service_binding_guid' do - service_plan1 = ServicePlan.make(active: false) + service_plan1 = create(:service_plan, active: false) instance1.service_plan_id = service_plan1.id instance1.save get "v2/service_instances?q=service_plan_guid:#{service_plan1.guid}" @@ -1365,18 +1365,18 @@ def stub_delete_and_return(status, body) end context 'when filtering by name' do - let!(:org1) { Organization.make(guid: '1') } - let!(:org2) { Organization.make(guid: '2') } - let!(:org3) { Organization.make(guid: '3') } - let!(:space1) { Space.make(organization: org1) } - let!(:space2) { Space.make(organization: org2) } - let!(:space3) { Space.make(organization: org3) } + let!(:org1) { create(:organization, guid: '1') } + let!(:org2) { create(:organization, guid: '2') } + let!(:org3) { create(:organization, guid: '3') } + let!(:space1) { create(:space, organization: org1) } + let!(:space2) { create(:space, organization: org2) } + let!(:space3) { create(:space, organization: org3) } context 'when the operator is ":"' do it 'successfully filters' do - instance1 = ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space1) - ManagedServiceInstance.make(name: instance1.name, space: space2) + instance1 = create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space1) + create(:managed_service_instance, name: instance1.name, space: space2) get "v2/service_instances?&q=name:#{instance1.name}" @@ -1389,9 +1389,9 @@ def stub_delete_and_return(status, body) context 'when the operator is "IN"' do it 'successfully filters' do - instance1 = ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space1) - ManagedServiceInstance.make(name: instance1.name, space: space2) + instance1 = create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space1) + create(:managed_service_instance, name: instance1.name, space: space2) get "v2/service_instances?&q=name%20IN%20#{instance1.name}" @@ -1403,9 +1403,9 @@ def stub_delete_and_return(status, body) end context 'when the operator is a comparator' do - let!(:instance1) { ManagedServiceInstance.make(name: 'inst1', space: space1) } - let!(:instance2) { ManagedServiceInstance.make(name: 'inst2', space: space2) } - let!(:instance3) { ManagedServiceInstance.make(name: 'inst3', space: space3) } + let!(:instance1) { create(:managed_service_instance, name: 'inst1', space: space1) } + let!(:instance2) { create(:managed_service_instance, name: 'inst2', space: space2) } + let!(:instance3) { create(:managed_service_instance, name: 'inst3', space: space3) } it 'successfully filters on <' do get "v2/service_instances?q=name<#{instance2.name}" @@ -1450,8 +1450,8 @@ def stub_delete_and_return(status, body) context 'when the query is missing an operator or a value' do it 'filters by name = nil (to match behavior of filters other than name)' do - ManagedServiceInstance.make(name: 'instance-1', space: space1) - ManagedServiceInstance.make(name: 'instance-2', space: space2) + create(:managed_service_instance, name: 'instance-1', space: space1) + create(:managed_service_instance, name: 'instance-2', space: space2) get 'v2/service_instances?q=name' @@ -1465,8 +1465,8 @@ def stub_delete_and_return(status, body) end context 'admin_read_only' do - let!(:instance1) { ManagedServiceInstance.make(name: 'inst1') } - let!(:instance2) { ManagedServiceInstance.make(name: 'inst2') } + let!(:instance1) { create(:managed_service_instance, name: 'inst1') } + let!(:instance2) { create(:managed_service_instance, name: 'inst2') } before { set_current_user_as_admin_read_only } @@ -1484,16 +1484,16 @@ def stub_delete_and_return(status, body) before { set_current_user_as_admin } let(:results_per_page) { 1 } - let(:service_instance) { ManagedServiceInstance.make(gateway_name: Sham.name) } - let(:org1) { Organization.make(guid: '1') } - let(:org2) { Organization.make(guid: '2') } - let(:space1) { Space.make(organization: org1) } - let(:space2) { Space.make(organization: org2) } + let(:service_instance) { create(:managed_service_instance, gateway_name: Sham.name) } + let(:org1) { create(:organization, guid: '1') } + let(:org2) { create(:organization, guid: '2') } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } let!(:instances) do - [ManagedServiceInstance.make(name: 'instance-1', space: space1), - ManagedServiceInstance.make(name: 'instance-2', space: space1), - ManagedServiceInstance.make(name: 'instance-3', space: space1), - ManagedServiceInstance.make(name: 'instance-4', space: space2)] + [create(:managed_service_instance, name: 'instance-1', space: space1), + create(:managed_service_instance, name: 'instance-2', space: space1), + create(:managed_service_instance, name: 'instance-3', space: space1), + create(:managed_service_instance, name: 'instance-4', space: space2)] end context 'at page 1' do @@ -1558,10 +1558,10 @@ def stub_delete_and_return(status, body) end describe 'GET', '/v2/managed_service_instances/:guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:service_instance) { ManagedServiceInstance.make(space:) } - let(:service_plan) { ServicePlan.make(active: false) } + let(:service_instance) { create(:managed_service_instance, space:) } + let(:service_plan) { create(:service_plan, active: false) } it 'is deprecated' do set_current_user(developer) @@ -1585,9 +1585,9 @@ def stub_delete_and_return(status, body) let(:developer) { make_developer_for_space(space) } context 'with a managed service instance' do - let(:space) { Space.make } - let(:service_instance) { ManagedServiceInstance.make(space:) } - let(:service_plan) { ServicePlan.make(active: false) } + let(:space) { create(:space) } + let(:service_instance) { create(:managed_service_instance, space:) } + let(:service_plan) { create(:service_plan, active: false) } before do service_instance.dashboard_url = 'this.should.be.visible.com' @@ -1627,7 +1627,7 @@ def stub_delete_and_return(status, body) end context 'with a user provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } before { set_current_user(developer) } @@ -1662,16 +1662,15 @@ def stub_delete_and_return(status, body) describe 'PUT /v2/service_instances/:service_instance_guid' do let(:service_broker_url) { "http://example.com/v2/service_instances/#{service_instance.guid}" } - let(:service_broker) { ServiceBroker.make(broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } - let(:service) { Service.make(plan_updateable: true, service_broker: service_broker) } - let(:old_service_plan) { ServicePlan.make(:v2, service:) } - let(:new_service_plan) { ServicePlan.make(:v2, service:) } + let(:service_broker) { create(:service_broker, broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } + let(:service) { create(:service, plan_updateable: true, service_broker: service_broker) } + let(:old_service_plan) { create(:service_plan, :v2, service:) } + let(:new_service_plan) { create(:service_plan, :v2, service:) } let(:service_instance) do - ManagedServiceInstance.make( - service_plan: old_service_plan, - dashboard_url: 'http://dashboard_url.com', - maintenance_info: { version: '1.2.3' } - ) + create(:managed_service_instance, + service_plan: old_service_plan, + dashboard_url: 'http://dashboard_url.com', + maintenance_info: { version: '1.2.3' }) end let(:body) do @@ -1825,8 +1824,8 @@ def stub_delete_and_return(status, body) name: 'new-name' ) end - let(:last_operation) { ServiceInstanceOperation.make(state: 'succeeded') } - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:last_operation) { create(:service_instance_operation, state: 'succeeded') } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } before do service_instance.service_instance_operation = last_operation @@ -1929,8 +1928,8 @@ def stub_delete_and_return(status, body) end context 'when the service instance is shared' do - let(:service_instance) { ManagedServiceInstance.make } - let(:target_space) { Space.make } + let(:service_instance) { create(:managed_service_instance) } + let(:target_space) { create(:space) } let(:target_space_developer) { make_developer_for_space(target_space) } let(:body) do { @@ -2013,8 +2012,8 @@ def stub_delete_and_return(status, body) end context 'and a developer in the target space tries to rename a service instance in the target space' do - let(:service_instance) { ManagedServiceInstance.make(name: 'r1') } - let(:target_space_service_instance) { ManagedServiceInstance.make(name: 'r2', space: target_space) } + let(:service_instance) { create(:managed_service_instance, name: 'r1') } + let(:target_space_service_instance) { create(:managed_service_instance, name: 'r2', space: target_space) } before do set_current_user(target_space_developer) @@ -2054,7 +2053,7 @@ def stub_delete_and_return(status, body) end context 'when the broker does not support service level plan updates but supports plan level updates' do - let(:old_service_plan) { ServicePlan.make(:v2, plan_updateable: true, service: service) } + let(:old_service_plan) { create(:service_plan, :v2, plan_updateable: true, service: service) } before { service.update(plan_updateable: false) } @@ -2089,8 +2088,8 @@ def stub_delete_and_return(status, body) end context 'when the service instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } before do service_instance.service_instance_operation = last_operation @@ -2108,7 +2107,7 @@ def stub_delete_and_return(status, body) before { service.update(plan_updateable: false) } context 'and the broker does not declare plan_updateable on plan level' do - let(:old_service_plan) { ServicePlan.make(:v2, plan_updateable: nil) } + let(:old_service_plan) { create(:service_plan, :v2, plan_updateable: nil) } it 'returns an error response with a useful error to the user' do put "/v2/service_instances/#{service_instance.guid}", body @@ -2129,7 +2128,7 @@ def stub_delete_and_return(status, body) end context 'and the broker does not support plan_updateable on plan level' do - let(:old_service_plan) { ServicePlan.make(:v2, plan_updateable: false) } + let(:old_service_plan) { create(:service_plan, :v2, plan_updateable: false) } it 'does not update the service plan in the database' do put "/v2/service_instances/#{service_instance.guid}", body @@ -2149,14 +2148,13 @@ def stub_delete_and_return(status, body) end context 'when the new service plan is non-bindable' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, bindable: false) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, bindable: false) } context 'and service bindings exist' do before do - ServiceBinding.make( - app: AppModel.make(space: service_instance.space), - service_instance: service_instance - ) + create(:service_binding, + app: create(:app_model, space: service_instance.space), + service_instance: service_instance) end it 'does not update the service plan in the database' do @@ -2185,7 +2183,7 @@ def stub_delete_and_return(status, body) end context 'when the user has no read permissions to the space' do - let(:org_auditor) { User.make } + let(:org_auditor) { create(:user) } before do service_instance.space.organization.add_auditor(org_auditor) @@ -2201,7 +2199,7 @@ def stub_delete_and_return(status, body) end context 'when the user has read but not write permissions to the space' do - let(:space_auditor) { User.make } + let(:space_auditor) { create(:user) } before do service_instance.space.organization.add_user(space_auditor) @@ -2233,9 +2231,9 @@ def stub_delete_and_return(status, body) end context 'when the requested plan belongs to a different service' do - let(:other_broker) { ServiceBroker.make } - let(:other_service) { Service.make(plan_updateable: true, service_broker: other_broker) } - let(:other_plan) { ServicePlan.make(service: other_service) } + let(:other_broker) { create(:service_broker) } + let(:other_service) { create(:service, plan_updateable: true, service_broker: other_broker) } + let(:other_plan) { create(:service_plan, service: other_service) } let(:body) do Oj.dump( @@ -2277,13 +2275,13 @@ def stub_delete_and_return(status, body) end describe 'the space_guid parameter' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:developer) { make_developer_for_space(space) } - let(:instance) { ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } it 'prevents a developer from moving the service instance to a space for which he is also a space developer' do - space2 = Space.make(organization: org) + space2 = create(:space, organization: org) space2.add_developer(developer) move_req = Oj.dump( @@ -2507,8 +2505,8 @@ def stub_delete_and_return(status, body) name: 'new-name' ) end - let(:last_operation) { ServiceInstanceOperation.make(state: 'succeeded') } - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:last_operation) { create(:service_instance_operation, state: 'succeeded') } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } before do service_instance.service_instance_operation = last_operation @@ -2559,8 +2557,8 @@ def stub_delete_and_return(status, body) end context 'when the service instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } before do service_instance.service_instance_operation = last_operation @@ -2592,7 +2590,7 @@ def stub_delete_and_return(status, body) end context 'when the broker did not declare support for plan upgrades' do - let(:old_service_plan) { ServicePlan.make(:v2) } + let(:old_service_plan) { create(:service_plan, :v2) } before { service.update(plan_updateable: false) } @@ -2613,7 +2611,7 @@ def stub_delete_and_return(status, body) end context 'when the user has read but not write permissions' do - let(:auditor) { User.make } + let(:auditor) { create(:user) } before do service_instance.space.organization.add_auditor(auditor) @@ -2667,13 +2665,13 @@ def stub_delete_and_return(status, body) end describe 'and the space_guid is provided' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:developer) { make_developer_for_space(space) } - let(:instance) { ManagedServiceInstance.make(space:) } + let(:instance) { create(:managed_service_instance, space:) } it 'prevents a developer from moving the service instance to a space for which he is also a space developer' do - space2 = Space.make(organization: org) + space2 = create(:space, organization: org) space2.add_developer(developer) move_req = Oj.dump( @@ -2701,7 +2699,7 @@ def stub_delete_and_return(status, body) end context 'when maintenance_info is NOT provided in the request, but it exists for the new plan' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, maintenance_info: { version: '1.0.0' }) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, maintenance_info: { version: '1.0.0' }) } let(:status) { 202 } context 'when the delayed job finishes successfully' do @@ -2753,8 +2751,8 @@ def stub_delete_and_return(status, body) { maintenance_info: { version: '2.0.0' } }.to_json end let(:old_maintenance_info) { { 'version' => '1.0.0' } } - let(:plan) { ServicePlan.make(:v2, service: service, maintenance_info: { version: '2.0.0' }) } - let(:service_instance) { ManagedServiceInstance.make(service_plan: plan, maintenance_info: old_maintenance_info) } + let(:plan) { create(:service_plan, :v2, service: service, maintenance_info: { version: '2.0.0' }) } + let(:service_instance) { create(:managed_service_instance, service_plan: plan, maintenance_info: old_maintenance_info) } context 'when the broker responds synchronously' do let(:status) { 200 } @@ -2890,9 +2888,9 @@ def stub_delete_and_return(status, body) describe 'DELETE /v2/service_instances/:service_instance_guid' do context 'with a managed service instance' do - let(:service) { Service.make(:v2) } - let(:service_plan) { ServicePlan.make(:v2, service:) } - let!(:service_instance) { ManagedServiceInstance.make(service_plan:) } + let(:service) { create(:service, :v2) } + let(:service_plan) { create(:service_plan, :v2, service:) } + let!(:service_instance) { create(:managed_service_instance, service_plan:) } let(:body) { '{}' } let(:status) { 200 } let(:developer) { make_developer_for_space(space) } @@ -2951,7 +2949,7 @@ def stub_delete_and_return(status, body) end context 'when the instance has bindings' do - let(:service_binding) { ServiceBinding.make(service_instance:) } + let(:service_binding) { create(:service_binding, service_instance:) } before do stub_unbind(service_binding) @@ -3040,7 +3038,7 @@ def stub_delete_and_return(status, body) end context 'when the instance has route bindings' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:service_instance) { route_binding.service_instance } let(:route) { route_binding.route } @@ -3079,7 +3077,7 @@ def stub_delete_and_return(status, body) end context 'when the instance has service keys' do - let!(:service_key) { ServiceKey.make(service_instance:) } + let!(:service_key) { create(:service_key, service_instance:) } context 'does not provide the recursive parameter' do it 'does not delete the associated service keys' do @@ -3115,7 +3113,7 @@ def stub_delete_and_return(status, body) end it 'does not delete the service instance if failed to delete the service key' do - service_key_1 = ServiceKey.make(service_instance:) + service_key_1 = create(:service_key, service_instance:) stub_unbind(service_key_1, status: 500) expect do @@ -3129,9 +3127,9 @@ def stub_delete_and_return(status, body) end context 'when the service instance has been shared' do - let(:originating_space) { Space.make } - let(:shared_to_space) { Space.make } - let!(:service_instance) { ManagedServiceInstance.make(space: originating_space) } + let(:originating_space) { create(:space) } + let(:shared_to_space) { create(:space) } + let!(:service_instance) { create(:managed_service_instance, space: originating_space) } before do service_instance.add_shared_space(shared_to_space) @@ -3159,10 +3157,9 @@ def stub_delete_and_return(status, body) context 'and there are bindings to the shared instance' do before do - ServiceBinding.make( - app: AppModel.make(space: shared_to_space), - service_instance: service_instance - ) + create(:service_binding, + app: create(:app_model, space: shared_to_space), + service_instance: service_instance) end it 'gives the user an error' do @@ -3592,7 +3589,7 @@ def stub_delete_and_return(status, body) end context 'and the instance operation is update in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress', type: 'update') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress', type: 'update') } before do service_instance.service_instance_operation = last_operation @@ -3606,7 +3603,7 @@ def stub_delete_and_return(status, body) end context 'and the instance operation is create in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress', type: 'create') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress', type: 'create') } before do service_instance.service_instance_operation = last_operation @@ -3645,8 +3642,8 @@ def stub_delete_and_return(status, body) end context 'when the service instance has service bindings' do - let!(:service_binding_1) { ServiceBinding.make(service_instance:) } - let!(:service_binding_2) { ServiceBinding.make(service_instance:) } + let!(:service_binding_1) { create(:service_binding, service_instance:) } + let!(:service_binding_2) { create(:service_binding, service_instance:) } it 'deletes the service instance and all of its service bindings' do expect(ManagedServiceInstance.find(guid: service_instance.guid)).not_to be_nil @@ -3661,8 +3658,8 @@ def stub_delete_and_return(status, body) end context 'when the service instance as service keys' do - let!(:service_key_1) { ServiceKey.make(service_instance:) } - let!(:service_key_2) { ServiceKey.make(service_instance:) } + let!(:service_key_1) { create(:service_key, service_instance:) } + let!(:service_key_2) { create(:service_key, service_instance:) } it 'deletes the service instance and all of its service keys' do expect(ManagedServiceInstance.find(guid: service_instance.guid)).not_to be_nil @@ -3695,7 +3692,7 @@ def stub_delete_and_return(status, body) end context 'with a user provided service instance' do - let!(:service_instance) { UserProvidedServiceInstance.make } + let!(:service_instance) { create(:user_provided_service_instance) } let(:developer) { make_developer_for_space(service_instance.space) } before { set_current_user(developer, email: 'user@example.com') } @@ -3724,7 +3721,7 @@ def stub_delete_and_return(status, body) end context 'when the instance has bindings' do - let!(:service_binding) { ServiceBinding.make(service_instance:) } + let!(:service_binding) { create(:service_binding, service_instance:) } it 'does not delete the associated service bindings' do expect do @@ -3757,14 +3754,14 @@ def stub_delete_and_return(status, body) end describe 'GET /v2/service_instances/:service_instance_guid/routes' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:manager) { make_manager_for_space(space) } let(:auditor) { make_auditor_for_space(space) } let(:developer) { make_developer_for_space(space) } context 'when the user is not a member of the space this instance exists in' do - let(:space_a) { Space.make } - let(:instance) { ManagedServiceInstance.make(space: space_a) } + let(:space_a) { create(:space) } + let(:instance) { create(:managed_service_instance, space: space_a) } def verify_forbidden(user) set_current_user(user) @@ -3786,14 +3783,14 @@ def verify_forbidden(user) end context 'when the user is a member of the space this instance exists in' do - let(:instance_a) { ManagedServiceInstance.make(:routing, space:) } - let(:instance_b) { ManagedServiceInstance.make(:routing, space:) } - let(:route_a) { Route.make(space:) } - let(:route_b) { Route.make(space:) } - let(:route_c) { Route.make(space:) } - let!(:route_binding_a) { RouteBinding.make(route: route_a, service_instance: instance_a) } - let!(:route_binding_b) { RouteBinding.make(route: route_b, service_instance: instance_a) } - let!(:route_binding_c) { RouteBinding.make(route: route_c, service_instance: instance_b) } + let(:instance_a) { create(:managed_service_instance, :routing, space:) } + let(:instance_b) { create(:managed_service_instance, :routing, space:) } + let(:route_a) { create(:route, space:) } + let(:route_b) { create(:route, space:) } + let(:route_c) { create(:route, space:) } + let!(:route_binding_a) { create(:route_binding, route: route_a, service_instance: instance_a) } + let!(:route_binding_b) { create(:route_binding, route: route_b, service_instance: instance_a) } + let!(:route_binding_c) { create(:route_binding, route: route_c, service_instance: instance_b) } context 'when the user is a SpaceAuditor' do it 'returns the routes that belong to the service instance' do @@ -3846,10 +3843,10 @@ def verify_forbidden(user) end describe 'PUT /v2/service_instances/:service_instance_guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:service_instance) { ManagedServiceInstance.make(:routing, space:) } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } + let(:route) { create(:route, space:) } let(:opts) { {} } let(:service_binding_url_pattern) { %r{/v2/service_instances/#{service_instance.guid}/service_bindings/} } @@ -3900,8 +3897,8 @@ def verify_forbidden(user) end context 'when the route is internal' do - let(:domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let(:route) { Route.make(domain:, space:) } + let(:domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let(:route) { create(:route, domain:, space:) } it 'raises RouteServiceCannotBeBoundToInternalRoute' do put "/v2/service_instances/#{service_instance.guid}/routes/#{route.guid}" @@ -3978,7 +3975,7 @@ def verify_forbidden(user) end context 'when the service instance is not a route service' do - let(:service_instance) { ManagedServiceInstance.make(space:) } + let(:service_instance) { create(:managed_service_instance, space:) } it 'raises a 400 error' do put "/v2/service_instances/#{service_instance.guid}/routes/#{route.guid}" @@ -4012,11 +4009,11 @@ def verify_forbidden(user) context 'when the route has an associated service instance' do before do - RouteBinding.make service_instance:, route: + create(:route_binding, service_instance:, route:) end it 'raises RouteAlreadyBoundToServiceInstance' do - new_service_instance = ManagedServiceInstance.make(:routing, space:) + new_service_instance = create(:managed_service_instance, :routing, space:) get "/v2/service_instances/#{new_service_instance.guid}/routes" expect(last_response.status).to eq(200) expect(Oj.load(last_response.body)['total_results']).to be(0) @@ -4058,7 +4055,7 @@ def verify_forbidden(user) context 'when the route is mapped to an app' do before do first_process = ProcessModelFactory.make(diego: true, space: route.space, state: 'STARTED') - RouteMappingModel.make(app: first_process.app, route: route, process_type: first_process.type) + create(:route_mapping_model, app: first_process.app, route: route, process_type: first_process.type) end it 'successfully binds to the route' do @@ -4069,7 +4066,7 @@ def verify_forbidden(user) context 'and is mapped to multiple apps' do before do another_process = ProcessModelFactory.make(space: route.space, state: 'STARTED') - RouteMappingModel.make(app: another_process.app, route: route, process_type: another_process.type) + create(:route_mapping_model, app: another_process.app, route: route, process_type: another_process.type) end it 'successfully binds to the route' do @@ -4137,8 +4134,8 @@ def verify_forbidden(user) end context 'when the route and service_instance are not in the same space' do - let(:other_space) { Space.make(organization: space.organization) } - let(:service_instance) { ManagedServiceInstance.make(:routing, space: other_space) } + let(:other_space) { create(:space, organization: space.organization) } + let(:service_instance) { create(:managed_service_instance, :routing, space: other_space) } before do other_space.add_developer(developer) @@ -4199,7 +4196,7 @@ def verify_forbidden(user) context 'when the instance has a last_operation' do before do - service_instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + service_instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') end it 'rolls back the last_operation of the service instance' do @@ -4233,15 +4230,15 @@ def verify_forbidden(user) end describe 'DELETE /v2/service_instances/:service_instance_guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:service_instance) { ManagedServiceInstance.make(:routing, space:) } - let(:route) { Route.make(space:) } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } + let(:route) { create(:route, space:) } before { set_current_user developer } context 'when a service has an associated route' do - let!(:route_binding) { RouteBinding.make(route:, service_instance:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } before do stub_unbind(route_binding) @@ -4324,10 +4321,10 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/permissions' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:instance) { ManagedServiceInstance.make(space:) } - let(:user) { User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:instance) { create(:managed_service_instance, space:) } + let(:user) { create(:user) } context 'when the user is a member of the space this instance exists in' do describe 'permissions' do @@ -4400,7 +4397,7 @@ def verify_forbidden(user) end context 'when the user is NOT a member of the space this instance exists in' do - let(:instance) { ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } it 'returns a JSON payload indicating the user does not have permission to manage this instance' do set_current_user(user) @@ -4433,9 +4430,9 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/shared_from' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:instance) { ManagedServiceInstance.make(space:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:instance) { create(:managed_service_instance, space:) } context 'when the service instance does not exist' do it 'returns a 404' do @@ -4455,8 +4452,8 @@ def verify_forbidden(user) end context 'when the service instance is shared' do - let(:other_org) { Organization.make } - let(:other_space) { Space.make(organization: other_org) } + let(:other_org) { create(:organization) } + let(:other_space) { create(:space, organization: other_org) } before do instance.add_shared_space(other_space) @@ -4475,7 +4472,7 @@ def verify_forbidden(user) end describe 'permissions' do - let(:user) { User.make } + let(:user) { create(:user) } context 'when the user is a member of the org/space this instance exists in' do { @@ -4537,7 +4534,7 @@ def verify_forbidden(user) end context 'when the user is NOT a member of the space this instance exists in' do - let(:instance) { ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } it 'returns a JSON payload indicating the user does not have permission to manage this instance' do set_current_user(user) @@ -4550,9 +4547,9 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/shared_to' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:instance) { ManagedServiceInstance.make(space:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:instance) { create(:managed_service_instance, space:) } it 'returns the correct body' do set_current_user_as_admin @@ -4570,8 +4567,8 @@ def verify_forbidden(user) end context 'when the service instance is shared into multiple spaces' do - let(:space1) { Space.make } - let(:space2) { Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } before do instance.add_shared_space(space1) @@ -4607,11 +4604,11 @@ def verify_forbidden(user) context 'when there are apps bound to the shared service instance' do before do - ServiceBinding.make(service_instance: instance, app: AppModel.make(space: space1)) - ServiceBinding.make(service_instance: instance, app: AppModel.make(space: space1)) - ServiceBinding.make(service_instance: ServiceInstance.make(space: space1), app: AppModel.make(space: space1)) + create(:service_binding, service_instance: instance, app: create(:app_model, space: space1)) + create(:service_binding, service_instance: instance, app: create(:app_model, space: space1)) + create(:service_binding, service_instance: create(:service_instance, space: space1), app: create(:app_model, space: space1)) - ServiceBinding.make(service_instance: instance, app: AppModel.make(space: space2)) + create(:service_binding, service_instance: instance, app: create(:app_model, space: space2)) end it 'returns the correct bound_app_count' do @@ -4631,9 +4628,9 @@ def verify_forbidden(user) end describe 'permissions' do - let(:user) { User.make } - let(:target_org) { Organization.make } - let(:target_space) { Space.make(organization: target_org) } + let(:user) { create(:user) } + let(:target_org) { create(:organization) } + let(:target_space) { create(:space, organization: target_org) } before do instance.add_shared_space(target_space) @@ -4713,8 +4710,8 @@ def verify_forbidden(user) end context 'when the user is not a member of either the shared_from or shared_to space/org' do - let(:random_org) { Organization.make } - let(:random_space) { Space.make(organization: random_org) } + let(:random_org) { create(:organization) } + let(:random_space) { create(:space, organization: random_org) } { 'space_developer' => 404, @@ -4745,14 +4742,14 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/service_keys' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:manager) { make_manager_for_space(space) } let(:auditor) { make_auditor_for_space(space) } let(:developer) { make_developer_for_space(space) } context 'when the user is not a member of the space this instance exists in' do - let(:space_a) { Space.make } - let(:instance) { ManagedServiceInstance.make(space: space_a) } + let(:space_a) { create(:space) } + let(:instance) { create(:managed_service_instance, space: space_a) } def verify_forbidden(user) set_current_user(user) @@ -4784,12 +4781,12 @@ def verify_forbidden(user) end context 'when the user is a member of the space this instance exists in' do - let(:instance_a) { ManagedServiceInstance.make(space:) } - let(:instance_b) { ManagedServiceInstance.make(space:) } - let!(:service_key_a) { ServiceKey.make(name: 'fake-key-a', service_instance: instance_a) } - let!(:service_key_b) { ServiceKey.make(name: 'fake-key-b', service_instance: instance_a) } - let!(:service_key_c) { ServiceKey.make(name: 'fake-key-c', service_instance: instance_b) } - let!(:service_key_credhub_ref) { ServiceKey.make(:credhub_reference, name: 'credhub-ref-service-key', service_instance: instance_b) } + let(:instance_a) { create(:managed_service_instance, space:) } + let(:instance_b) { create(:managed_service_instance, space:) } + let!(:service_key_a) { create(:service_key, name: 'fake-key-a', service_instance: instance_a) } + let!(:service_key_b) { create(:service_key, name: 'fake-key-b', service_instance: instance_a) } + let!(:service_key_c) { create(:service_key, name: 'fake-key-c', service_instance: instance_b) } + let!(:service_key_credhub_ref) { create(:service_key, :credhub_reference, name: 'credhub-ref-service-key', service_instance: instance_b) } let(:credhub_credentials) { { 'username' => 'admin_annie', 'password' => 'realsecur3' } } before do @@ -4859,10 +4856,10 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/parameters' do - let(:space) { Space.make } - let(:service) { Service.make } - let(:service_plan) { ServicePlan.make(service:) } - let(:instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:space) { create(:space) } + let(:service) { create(:service) } + let(:service_plan) { create(:service_plan, service:) } + let(:instance) { create(:managed_service_instance, space:, service_plan:) } let(:developer) { make_developer_for_space(space) } before { set_current_user developer } @@ -4877,7 +4874,7 @@ def verify_forbidden(user) end context 'when instances_retrievable is set to true' do - let(:service) { Service.make(instances_retrievable: true) } + let(:service) { create(:service, instances_retrievable: true) } let(:body) { {}.to_json } let(:response_code) { 200 } @@ -4947,7 +4944,7 @@ def verify_forbidden(user) end context 'when the service instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } before do instance.service_instance_operation = last_operation @@ -4963,7 +4960,7 @@ def verify_forbidden(user) end context 'when instances_retrievable is set to false' do - let(:service) { Service.make(instances_retrievable: false) } + let(:service) { create(:service, instances_retrievable: false) } it 'returns a 400 with error message' do get "/v2/service_instances/#{instance.guid}/parameters" @@ -4973,7 +4970,7 @@ def verify_forbidden(user) end context 'when the service instance has an operation in progress' do - let(:last_operation) { ServiceInstanceOperation.make(state: 'in progress') } + let(:last_operation) { create(:service_instance_operation, state: 'in progress') } before do instance.service_instance_operation = last_operation @@ -4990,7 +4987,7 @@ def verify_forbidden(user) end context 'when the service is user provided' do - let(:instance) { UserProvidedServiceInstance.make(space:) } + let(:instance) { create(:user_provided_service_instance, space:) } it 'returns a 400 with error message' do get "/v2/service_instances/#{instance.guid}/parameters" @@ -5021,7 +5018,7 @@ def verify_forbidden(user) 'org_auditor' => 403, 'org_billing_manager' => 403 }.each do |role, expected_return_value| - let(:service) { Service.make(instances_retrievable: true) } + let(:service) { create(:service, instances_retrievable: true) } context "as an #{role}" do before do @@ -5045,14 +5042,14 @@ def verify_forbidden(user) end context 'when the service instance is shared' do - let(:target_space) { Space.make } + let(:target_space) { create(:space) } before do instance.add_shared_space(target_space) end %w[space_auditor space_developer space_manager].each do |role| - let(:service) { Service.make(instances_retrievable: true) } + let(:service) { create(:service, instances_retrievable: true) } context "as an #{role} in the target space, but with no permissions in the souce space" do before do @@ -5075,11 +5072,11 @@ def verify_forbidden(user) end describe 'GET /v2/service_instances/:service_instance_guid/routes/:route_guid/parameters' do - let(:space) { Space.make } - let(:service) { Service.make(:routing, bindings_retrievable: true) } - let(:service_plan) { ServicePlan.make(service:) } - let(:instance) { ManagedServiceInstance.make(space:, service_plan:) } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:service) { create(:service, :routing, bindings_retrievable: true) } + let(:service_plan) { create(:service_plan, service:) } + let(:instance) { create(:managed_service_instance, space:, service_plan:) } + let(:route) { create(:route, space:) } let(:developer) { make_developer_for_space(space) } before { set_current_user developer } @@ -5115,10 +5112,10 @@ def verify_forbidden(user) end context 'when the route binding does exist' do - let!(:route_binding) { RouteBinding.make(service_instance: instance, route: route) } + let!(:route_binding) { create(:route_binding, service_instance: instance, route: route) } context 'when bindings_retrievable is set to false' do - let(:service) { Service.make(:routing, bindings_retrievable: false) } + let(:service) { create(:service, :routing, bindings_retrievable: false) } it 'returns a 400' do get "/v2/service_instances/#{instance.guid}/routes/#{route.guid}/parameters" @@ -5205,7 +5202,7 @@ def verify_forbidden(user) end context 'when the service instance is shared' do - let(:target_space) { Space.make } + let(:target_space) { create(:space) } before do instance.add_shared_space(target_space) @@ -5257,29 +5254,27 @@ def verify_forbidden(user) end describe 'Validation messages' do - let(:paid_quota) { QuotaDefinition.make(total_services: 1) } + let(:paid_quota) { create(:quota_definition, total_services: 1) } let(:free_quota_with_no_services) do - QuotaDefinition.make( - total_services: 0, - non_basic_services_allowed: false - ) + create(:quota_definition, + total_services: 0, + non_basic_services_allowed: false) end let(:free_quota_with_one_service) do - QuotaDefinition.make( - total_services: 1, - non_basic_services_allowed: false - ) + create(:quota_definition, + total_services: 1, + non_basic_services_allowed: false) end - let(:paid_plan) { ServicePlan.make(:v2) } - let(:free_plan) { ServicePlan.make(:v2, free: true) } - let(:org) { Organization.make(quota_definition: paid_quota) } - let(:space) { Space.make(organization: org) } + let(:paid_plan) { create(:service_plan, :v2) } + let(:free_plan) { create(:service_plan, :v2, free: true) } + let(:org) { create(:organization, quota_definition: paid_quota) } + let(:space) { create(:space, organization: org) } let(:developer) { make_developer_for_space(space) } before { set_current_user(developer) } it 'returns duplicate name message correctly' do - existing_service_instance = ManagedServiceInstance.make(space:) + existing_service_instance = create(:managed_service_instance, space:) service_instance_params = { name: existing_service_instance.name, space_guid: space.guid, @@ -5292,7 +5287,7 @@ def verify_forbidden(user) end it 'returns space quota exceeded message correctly' do - space.space_quota_definition = SpaceQuotaDefinition.make(total_services: 0, organization: space.organization) + space.space_quota_definition = create(:space_quota_definition, total_services: 0, organization: space.organization) space.save service_instance_params = { name: 'name', @@ -5306,7 +5301,7 @@ def verify_forbidden(user) end it 'returns service plan not allowed by space quota message correctly' do - space.space_quota_definition = SpaceQuotaDefinition.make(non_basic_services_allowed: false, organization: space.organization) + space.space_quota_definition = create(:space_quota_definition, non_basic_services_allowed: false, organization: space.organization) space.save service_instance_params = { name: 'name', @@ -5376,9 +5371,9 @@ def verify_forbidden(user) context 'invalid space guid' do it 'returns a user friendly error' do - org = Organization.make - space = Space.make(organization: org) - plan = ServicePlan.make(:v2, free: true) + org = create(:organization) + space = create(:space, organization: org) + plan = create(:service_plan, :v2, free: true) body = { 'space_guid' => 'invalid_space_guid', @@ -5395,8 +5390,8 @@ def verify_forbidden(user) end it 'returns service does not support routes message correctly' do - route = Route.make - service_instance = ManagedServiceInstance.make + route = create(:route) + service_instance = create(:managed_service_instance) set_current_user_as_admin put "/v2/service_instances/#{service_instance.guid}/routes/#{route.guid}" diff --git a/spec/unit/controllers/services/service_keys_controller_spec.rb b/spec/unit/controllers/services/service_keys_controller_spec.rb index 4f588fe252c..c381ff2fa65 100644 --- a/spec/unit/controllers/services/service_keys_controller_spec.rb +++ b/spec/unit/controllers/services/service_keys_controller_spec.rb @@ -71,17 +71,15 @@ def bind_url_regex(opts={}) include_context 'permissions' before do - @service_instance_a = ManagedServiceInstance.make(space: @space_a) - @obj_a = ServiceKey.make( - name: 'fake-name-a', - service_instance: @service_instance_a - ) - - @service_instance_b = ManagedServiceInstance.make(space: @space_b) - @obj_b = ServiceKey.make( - name: 'fake-name-b', - service_instance: @service_instance_b - ) + @service_instance_a = create(:managed_service_instance, space: @space_a) + @obj_a = create(:service_key, + name: 'fake-name-a', + service_instance: @service_instance_a) + + @service_instance_b = create(:managed_service_instance, space: @space_b) + @obj_b = create(:service_key, + name: 'fake-name-b', + service_instance: @service_instance_b) end describe 'Org Level Permissions' do @@ -160,7 +158,7 @@ def bind_url_regex(opts={}) end describe 'create' do - let(:instance) { ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:space) { instance.space } let(:service) { instance.service } let(:developer) { make_developer_for_space(space) } @@ -301,7 +299,7 @@ def bind_url_regex(opts={}) describe 'locking the instance as a result of creating service key' do context 'when the instance has a previous operation' do before do - instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') instance.save end @@ -332,7 +330,7 @@ def bind_url_regex(opts={}) context 'when attempting to create key and service key already exists' do before do - ServiceKey.make(name: name, service_instance: instance) + create(:service_key, name: name, service_instance: instance) end it 'returns a ServiceKeyNameTaken error' do @@ -368,7 +366,7 @@ def bind_url_regex(opts={}) context 'when the instance has a last_operation' do before do - instance.service_instance_operation = ServiceInstanceOperation.make(type: 'create', state: 'succeeded') + instance.service_instance_operation = create(:service_instance_operation, type: 'create', state: 'succeeded') end it 'rolls back the last_operation of the service instance' do @@ -403,7 +401,7 @@ def bind_url_regex(opts={}) end context 'when the service instance has been shared' do - let(:other_space) { Space.make } + let(:other_space) { create(:space) } before do instance.add_shared_space(other_space) @@ -428,7 +426,7 @@ def bind_url_regex(opts={}) end context 'for a user-provided service instance' do - let(:instance) { UserProvidedServiceInstance.make } + let(:instance) { create(:user_provided_service_instance) } it 'returns an error to the user' do post '/v2/service_keys', req @@ -439,13 +437,13 @@ def bind_url_regex(opts={}) end describe 'GET', '/v2/service_keys' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:instance_a) { ManagedServiceInstance.make(space:) } - let(:instance_b) { ManagedServiceInstance.make(space:) } - let(:service_key_a) { ServiceKey.make(name: 'fake-key-a', service_instance: instance_a) } - let(:service_key_b) { ServiceKey.make(name: 'fake-key-b', service_instance: instance_a) } - let(:service_key_c) { ServiceKey.make(name: 'fake-key-c', service_instance: instance_b) } + let(:instance_a) { create(:managed_service_instance, space:) } + let(:instance_b) { create(:managed_service_instance, space:) } + let(:service_key_a) { create(:service_key, name: 'fake-key-a', service_instance: instance_a) } + let(:service_key_b) { create(:service_key, name: 'fake-key-b', service_instance: instance_a) } + let(:service_key_c) { create(:service_key, name: 'fake-key-c', service_instance: instance_b) } before do service_key_a.save @@ -480,10 +478,10 @@ def bind_url_regex(opts={}) end describe 'GET', '/v2/service_keys/:service_key_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:instance) { ManagedServiceInstance.make(space:) } - let(:service_key) { ServiceKey.make(name: 'fake-key', service_instance: instance) } + let(:instance) { create(:managed_service_instance, space:) } + let(:service_key) { create(:service_key, name: 'fake-key', service_instance: instance) } before { set_current_user(developer) } @@ -510,7 +508,7 @@ def verify_not_found_response(service_key_guid) end context 'when the user is a developer in a space to which the service instance is shared' do - let(:other_space) { Space.make } + let(:other_space) { create(:space) } let(:developer) { make_developer_for_space(other_space) } before do @@ -525,7 +523,7 @@ def verify_not_found_response(service_key_guid) end context 'when the key is a CredHub reference' do - let(:service_key) { ServiceKey.make(:credhub_reference, name: 'fake-key', service_instance: instance) } + let(:service_key) { create(:service_key, :credhub_reference, name: 'fake-key', service_instance: instance) } let(:credentials) { { 'username' => 'admin_annie', 'password' => 'realsecur3' } } let(:fake_credhub_client) { instance_double(Credhub::Client) } @@ -580,7 +578,7 @@ def verify_not_found_response(service_key_guid) end describe 'DELETE', '/v2/service_keys/:service_key_guid' do - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } let(:instance) { service_key.service_instance } let(:developer) { make_developer_for_space(instance.space) } @@ -621,7 +619,7 @@ def verify_not_found_response(service_key_guid) end context 'when the user is a developer in a space to which the service instance is shared' do - let(:other_space) { Space.make } + let(:other_space) { create(:space) } let(:developer) { make_developer_for_space(other_space) } before do @@ -667,7 +665,7 @@ def verify_not_found_response(service_key_guid) end describe 'GET', '/v2/service_keys/:service_key_guid/parameters' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } before do @@ -675,14 +673,14 @@ def verify_not_found_response(service_key_guid) end context 'when the service key is for managed service instance' do - let(:service_plan) { ServicePlan.make(service:) } - let(:managed_service_instance) { ManagedServiceInstance.make(space:, service_plan:) } + let(:service_plan) { create(:service_plan, service:) } + let(:managed_service_instance) { create(:managed_service_instance, space:, service_plan:) } context 'when the service has bindings_retrievable set to false' do - let(:service) { Service.make(bindings_retrievable: false) } + let(:service) { create(:service, bindings_retrievable: false) } it 'returns a 400' do - service_key = ServiceKey.make(service_instance: managed_service_instance) + service_key = create(:service_key, service_instance: managed_service_instance) get "/v2/service_keys/#{service_key.guid}/parameters" expect(last_response.status).to be(400) @@ -691,10 +689,10 @@ def verify_not_found_response(service_key_guid) end context 'when the service has bindings_retrievable not set' do - let(:service) { Service.make } + let(:service) { create(:service) } it 'returns a 400' do - service_key = ServiceKey.make(service_instance: managed_service_instance) + service_key = create(:service_key, service_instance: managed_service_instance) get "/v2/service_keys/#{service_key.guid}/parameters" expect(last_response.status).to be(400) @@ -703,9 +701,9 @@ def verify_not_found_response(service_key_guid) end context 'when the service has bindings_retrievable set to true' do - let(:service) { Service.make(bindings_retrievable: true) } + let(:service) { create(:service, bindings_retrievable: true) } let(:broker) { service.service_broker } - let(:service_key) { ServiceKey.make(service_instance: managed_service_instance) } + let(:service_key) { create(:service_key, service_instance: managed_service_instance) } let(:body) { { 'parameters' => { 'foo' => true } }.to_json } let(:response_code) { 200 } @@ -790,7 +788,7 @@ def verify_not_found_response(service_key_guid) end context 'user permissions' do - let(:user) { User.make } + let(:user) { create(:user) } let(:body) { {}.to_json } { @@ -834,10 +832,10 @@ def verify_not_found_response(service_key_guid) end context 'when the key is for a user provided service' do - let(:user_provided_service_instance) { UserProvidedServiceInstance.make(space:) } + let(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } it 'returns a 400' do - service_key = ServiceKey.make(service_instance: user_provided_service_instance) + service_key = create(:service_key, service_instance: user_provided_service_instance) get "/v2/service_keys/#{service_key.guid}/parameters" expect(last_response.status).to be(400) diff --git a/spec/unit/controllers/services/service_plan_visibilities_controller_spec.rb b/spec/unit/controllers/services/service_plan_visibilities_controller_spec.rb index a3c6908e957..ab5675fe788 100644 --- a/spec/unit/controllers/services/service_plan_visibilities_controller_spec.rb +++ b/spec/unit/controllers/services/service_plan_visibilities_controller_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe ServicePlanVisibilitiesController, :services do - let(:user) { User.make } + let(:user) { create(:user) } before { set_current_user(user, admin: true, email: 'some-email-address@example.com') } @@ -28,8 +28,8 @@ module VCAP::CloudController include_context 'permissions' before do - @obj_a = ServicePlanVisibility.make - @obj_b = ServicePlanVisibility.make + @obj_a = create(:service_plan_visibility) + @obj_b = create(:service_plan_visibility) end def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) @@ -59,8 +59,8 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'POST /v2/service_plan_visibilities' do - let!(:organization) { Organization.make } - let!(:service_plan) { ServicePlan.make(public: false) } + let!(:organization) { create(:organization) } + let!(:service_plan) { create(:service_plan, public: false) } it 'creates the service plan visibility' do params = { organization_guid: organization.guid, service_plan_guid: service_plan.guid } @@ -95,10 +95,10 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'PUT /v2/service_plan_visibilities/:guid' do - let!(:organization) { Organization.make } - let!(:new_organization) { Organization.make } - let!(:service_plan) { ServicePlan.make(public: false) } - let!(:visibility) { ServicePlanVisibility.make(organization_guid: organization.guid, service_plan_guid: service_plan.guid) } + let!(:organization) { create(:organization) } + let!(:new_organization) { create(:organization) } + let!(:service_plan) { create(:service_plan, public: false) } + let!(:visibility) { create(:service_plan_visibility, organization_guid: organization.guid, service_plan_guid: service_plan.guid) } it 'updates the service plan visibility' do put "/v2/service_plan_visibilities/#{visibility.guid}", Oj.dump({ organization_guid: new_organization.guid }) @@ -127,9 +127,9 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'DELETE /v2/service_plan_visibilities/:guid' do - let!(:organization) { Organization.make } - let!(:service_plan) { ServicePlan.make(public: false) } - let!(:visibility) { ServicePlanVisibility.make(organization_guid: organization.guid, service_plan_guid: service_plan.guid) } + let!(:organization) { create(:organization) } + let!(:service_plan) { create(:service_plan, public: false) } + let!(:visibility) { create(:service_plan_visibility, organization_guid: organization.guid, service_plan_guid: service_plan.guid) } it 'deletes the service plan visibility' do delete "/v2/service_plan_visibilities/#{visibility.guid}" diff --git a/spec/unit/controllers/services/service_plans_controller_spec.rb b/spec/unit/controllers/services/service_plans_controller_spec.rb index 191136db7df..e600c5e6000 100644 --- a/spec/unit/controllers/services/service_plans_controller_spec.rb +++ b/spec/unit/controllers/services/service_plans_controller_spec.rb @@ -12,7 +12,7 @@ module VCAP::CloudController enumerate: 7 end - let(:developer) { make_developer_for_space(Space.make) } + let(:developer) { make_developer_for_space(create(:space)) } describe 'Query Parameters' do it { expect(ServicePlansController).to be_queryable_by(:active) } @@ -60,9 +60,9 @@ module VCAP::CloudController include_context 'permissions' before do - 5.times { ServicePlan.make } - @obj_a = ServicePlan.make - @obj_b = ServicePlan.make + create_list(:service_plan, 5) + @obj_a = create(:service_plan) + @obj_b = create(:service_plan) end describe 'Org Level Permissions' do @@ -126,7 +126,7 @@ module VCAP::CloudController end describe 'non public service plans' do - let!(:private_plan) { ServicePlan.make(public: false) } + let!(:private_plan) { create(:service_plan, public: false) } let(:plan_guids) do decoded_response.fetch('resources').collect do |r| r.fetch('metadata').fetch('guid') @@ -158,7 +158,7 @@ module VCAP::CloudController end describe 'GET', '/v2/service_plans/:guid' do - let(:service_plan) { ServicePlan.make } + let(:service_plan) { create(:service_plan) } it 'returns the plan' do set_current_user_as_admin @@ -198,7 +198,7 @@ module VCAP::CloudController end context 'when the plan does not set bindable' do - let(:service_plan) { ServicePlan.make(bindable: nil) } + let(:service_plan) { create(:service_plan, bindable: nil) } it 'inherits bindable from the service' do set_current_user_as_admin @@ -214,7 +214,7 @@ module VCAP::CloudController end context 'non-admin user' do - let(:user) { User.make } + let(:user) { create(:user) } before do set_current_user(user) @@ -232,7 +232,7 @@ module VCAP::CloudController end context 'when the plan is inactive' do - let(:inactive_plan) { ServicePlan.make(:v2, active: false, public: true) } + let(:inactive_plan) { create(:service_plan, :v2, active: false, public: true) } it 'returns a 403' do get "/v2/service_plans/#{inactive_plan.guid}" @@ -240,8 +240,8 @@ module VCAP::CloudController end context 'and the user has a service instance associated with that plan' do - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } before do space.organization.add_user(user) @@ -250,10 +250,10 @@ module VCAP::CloudController end it 'returns the plan' do - broker = ServiceBroker.make - service = Service.make(service_broker: broker) - service_plan = ServicePlan.make(service: service, public: false, active: false) - ManagedServiceInstance.make(space:, service_plan:) + broker = create(:service_broker) + service = create(:service, service_broker: broker) + service_plan = create(:service_plan, service: service, public: false, active: false) + create(:managed_service_instance, space:, service_plan:) service_plan.reload set_current_user(user) @@ -271,10 +271,10 @@ module VCAP::CloudController end it 'returns the unbindable plan' do - broker = ServiceBroker.make - service = Service.make(:v2, service_broker: broker) - service_plan = ServicePlan.make(:v2, service: service, public: true, active: true) - ManagedServiceInstance.make(:v2, space:, service_plan:) + broker = create(:service_broker) + service = create(:service, :v2, service_broker: broker) + service_plan = create(:service_plan, :v2, service: service, public: true, active: true) + create(:managed_service_instance, :v2, space:, service_plan:) service_plan.update(public: false) service_plan.reload @@ -300,21 +300,21 @@ module VCAP::CloudController @services = { public: [ - ServicePlan.make(:v2, active: true, public: true), - ServicePlan.make(:v2, active: true, public: true), - ServicePlan.make(:v2, active: false, public: true) + create(:service_plan, :v2, active: true, public: true), + create(:service_plan, :v2, active: true, public: true), + create(:service_plan, :v2, active: false, public: true) ], private: [ - ServicePlan.make(:v2, active: true, public: false), - ServicePlan.make(:v2, active: false, public: false) + create(:service_plan, :v2, active: true, public: false), + create(:service_plan, :v2, active: false, public: false) ] } end context 'as a space developer' do - let(:space) { Space.make } - let(:user) { User.make } - let(:different_service_plan) { ServicePlan.make } + let(:space) { create(:space) } + let(:user) { create(:user) } + let(:different_service_plan) { create(:service_plan) } before do space.organization.add_user(user) @@ -345,9 +345,9 @@ module VCAP::CloudController context 'with private service brokers' do it 'returns service plans from private brokers that are in the same space as the user' do - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker) - private_broker_service_plan = ServicePlan.make(service: service, public: false) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker) + private_broker_service_plan = create(:service_plan, service: service, public: false) set_current_user(user) get '/v2/service_plans' @@ -363,9 +363,9 @@ module VCAP::CloudController context 'when a service instance is associated with an inactive plan' do it 'does not list the inactive service plan' do - service = Service.make - service_plan = ServicePlan.make(service: service, public: true, active: true) - ManagedServiceInstance.make(service_plan:) + service = create(:service) + service_plan = create(:service_plan, service: service, public: true, active: true) + create(:managed_service_instance, service_plan:) service_plan.update(public: false) service_plan.reload @@ -383,8 +383,8 @@ module VCAP::CloudController end context 'as an admin' do - let(:different_service) { Service.make(service_broker: ServiceBroker.make) } - let(:different_service_plan) { ServicePlan.make } + let(:different_service) { create(:service, service_broker: create(:service_broker)) } + let(:different_service_plan) { create(:service_plan) } before do set_current_user_as_admin @@ -568,7 +568,7 @@ module VCAP::CloudController describe 'PUT', '/v2/service_plans/:guid' do context 'when fields other than public are requested' do it 'only updates the public field' do - service_plan = ServicePlan.make(name: 'old-name', public: true) + service_plan = create(:service_plan, name: 'old-name', public: true) payload = Oj.dump({ 'name' => 'new-name', 'public' => false }) set_current_user_as_admin @@ -583,11 +583,11 @@ module VCAP::CloudController end describe 'DELETE', '/v2/service_plans/:guid' do - let(:service_plan) { ServicePlan.make } + let(:service_plan) { create(:service_plan) } it 'prevents recursive deletions if there are any instances' do set_current_user_as_admin - ManagedServiceInstance.make(service_plan:) + create(:managed_service_instance, service_plan:) delete "/v2/service_plans/#{service_plan.guid}?recursive=true" expect(last_response).to have_status_code(400) diff --git a/spec/unit/controllers/services/service_usage_events_controller_spec.rb b/spec/unit/controllers/services/service_usage_events_controller_spec.rb index 80a50443493..262ab9b9350 100644 --- a/spec/unit/controllers/services/service_usage_events_controller_spec.rb +++ b/spec/unit/controllers/services/service_usage_events_controller_spec.rb @@ -11,10 +11,9 @@ module VCAP::CloudController end before do - ServiceUsageEvent.make( - service_instance_type: 'managed_service_instance', - guid: event_guid1 - ) + create(:service_usage_event, + service_instance_type: 'managed_service_instance', + guid: event_guid1) set_current_user_as_admin end @@ -35,8 +34,8 @@ module VCAP::CloudController let(:event_guid2) { SecureRandom.uuid } before do - ServiceUsageEvent.make(guid: event_guid2) - ServiceUsageEvent.make + create(:service_usage_event, guid: event_guid2) + create(:service_usage_event) end it 'can filter by after_guid' do @@ -79,13 +78,12 @@ module VCAP::CloudController context 'when filtering by service instance type' do before do - ServiceUsageEvent.make( - service_instance_type: 'user_provided_service_instance', - service_plan_guid: nil, - service_plan_name: nil, - service_guid: nil, - service_label: nil - ) + create(:service_usage_event, + service_instance_type: 'user_provided_service_instance', + service_plan_guid: nil, + service_plan_name: nil, + service_guid: nil, + service_label: nil) end it 'returns a list of service usage events of managed_service_instance type only' do @@ -104,9 +102,9 @@ module VCAP::CloudController context 'and the response is multiple pages' do before do - ServiceUsageEvent.make(service_instance_type: 'managed_service_instance') - ServiceUsageEvent.make(service_instance_type: 'managed_service_instance') - ServiceUsageEvent.make(service_instance_type: 'managed_service_instance') + create(:service_usage_event, service_instance_type: 'managed_service_instance') + create(:service_usage_event, service_instance_type: 'managed_service_instance') + create(:service_usage_event, service_instance_type: 'managed_service_instance') end it 'maintains the service_instance_type in the next_url' do @@ -131,8 +129,8 @@ module VCAP::CloudController end context 'when filtering by service guid' do - let(:service) { Service.make(:v2) } - let!(:event) { ServiceUsageEvent.make(service_guid: service.guid) } + let(:service) { create(:service, :v2) } + let!(:event) { create(:service_usage_event, service_guid: service.guid) } it 'can filter by service_guid' do get "/v2/service_usage_events?q=service_guid:#{service.guid}" @@ -142,7 +140,7 @@ module VCAP::CloudController end context 'when the response is multiple pages' do - let!(:event2) { ServiceUsageEvent.make(service_guid: service.guid) } + let!(:event2) { create(:service_usage_event, service_guid: service.guid) } it 'includes service_guid in the next_url' do get "/v2/service_usage_events?q=service_guid:#{service.guid}&results-per-page=1" @@ -166,7 +164,7 @@ module VCAP::CloudController context 'when the user is not an admin (i.e. is not authorized)' do it 'returns 403' do - set_current_user(User.make) + set_current_user(create(:user)) get '/v2/service_usage_events' expect(last_response.status).to eq(403) end @@ -183,7 +181,7 @@ module VCAP::CloudController end it 'returns 403 as a non-admin' do - set_current_user(User.make) + set_current_user(create(:user)) url = "/v2/service_usage_events/#{event_guid1}" get url expect(last_response.status).to eq(403) @@ -191,8 +189,8 @@ module VCAP::CloudController end describe 'POST /v2/service_usage_events/destructively_purge_all_and_reseed_existing_instance', isolation: :truncation do - let(:user) { User.make } - let(:instance) { ManagedServiceInstance.make } + let(:user) { create(:user) } + let(:instance) { create(:managed_service_instance) } it 'purge all existing events' do expect(ServiceUsageEvent.count).not_to eq(0) diff --git a/spec/unit/controllers/services/services_controller_spec.rb b/spec/unit/controllers/services/services_controller_spec.rb index dc1fbb736e6..0669fc3b95c 100644 --- a/spec/unit/controllers/services/services_controller_spec.rb +++ b/spec/unit/controllers/services/services_controller_spec.rb @@ -44,9 +44,9 @@ module VCAP::CloudController include_context 'permissions' before do - 5.times { ServicePlan.make } - @obj_a = ServicePlan.make.service - @obj_b = ServicePlan.make.service + create_list(:service_plan, 5) + @obj_a = create(:service_plan).service + @obj_b = create(:service_plan).service end describe 'Org Level Permissions' do @@ -104,12 +104,12 @@ module VCAP::CloudController end describe 'GET /v2/services/:guid/service_plans' do - let!(:organization) { Organization.make } - let!(:space) { Space.make(organization:) } - let!(:user) { User.make } - let!(:broker) { ServiceBroker.make(space:) } - let!(:service) { Service.make(service_broker: broker) } - let!(:service_plan) { ServicePlan.make(service: service, public: false) } + let!(:organization) { create(:organization) } + let!(:space) { create(:space, organization:) } + let!(:user) { create(:user) } + let!(:broker) { create(:service_broker, space:) } + let!(:service) { create(:service, service_broker: broker) } + let!(:service_plan) { create(:service_plan, service: service, public: false) } before do organization.add_user user @@ -135,12 +135,12 @@ module VCAP::CloudController describe 'GET /v2/services/:guid' do let(:broker_name) { 'broker-1' } - let!(:organization) { Organization.make } - let!(:space) { Space.make(organization:) } - let!(:user) { User.make } - let!(:broker) { ServiceBroker.make(space: space, name: broker_name) } - let!(:service) { Service.make(service_broker: broker) } - let!(:service_plan) { ServicePlan.make(service: service, public: false) } + let!(:organization) { create(:organization) } + let!(:space) { create(:space, organization:) } + let!(:user) { create(:user) } + let!(:broker) { create(:service_broker, space: space, name: broker_name) } + let!(:service) { create(:service, service_broker: broker) } + let!(:service_plan) { create(:service_plan, service: service, public: false) } before do organization.add_user(user) @@ -163,7 +163,7 @@ module VCAP::CloudController describe 'GET /v2/services' do let(:organization) do - Organization.make.tap do |org| + create(:organization).tap do |org| org.add_user(user) org.add_manager(user) org.add_billing_manager(user) @@ -171,44 +171,44 @@ module VCAP::CloudController end end - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:broker_name) { 'broker-1' } - let(:service_broker) { ServiceBroker.make(name: broker_name) } + let(:service_broker) { create(:service_broker, name: broker_name) } before { set_current_user(user) } let!(:public_and_active) do opts = { active: true, long_description: Sham.long_description, service_broker: service_broker } - Service.make(opts).tap do |svc| - ServicePlan.make(public: true, active: true, service: svc) + create(:service, opts).tap do |svc| + create(:service_plan, public: true, active: true, service: svc) end end let!(:public_and_inactive) do opts = { active: false, long_description: Sham.long_description, service_broker: service_broker } - Service.make(opts).tap do |svc| - ServicePlan.make(public: true, active: false, service: svc) + create(:service, opts).tap do |svc| + create(:service_plan, public: true, active: false, service: svc) end end let!(:private_and_active) do opts = { active: true, long_description: Sham.long_description, service_broker: service_broker } - Service.make(opts).tap do |svc| - ServicePlan.make(public: false, active: true, service: svc) + create(:service, opts).tap do |svc| + create(:service_plan, public: false, active: true, service: svc) end end let!(:private_and_inactive) do opts = { active: false, long_description: Sham.long_description, service_broker: service_broker } - Service.make(opts).tap do |svc| - ServicePlan.make(public: false, active: false, service: svc) + create(:service, opts).tap do |svc| + create(:service_plan, public: false, active: false, service: svc) end end let!(:private_with_visibility_to_user) do opts = { active: true, long_description: Sham.long_description, service_broker: service_broker } - Service.make(opts).tap do |svc| - plan = ServicePlan.make(public: false, active: true, service: svc) - ServicePlanVisibility.make(service_plan: plan, organization: organization) + create(:service, opts).tap do |svc| + plan = create(:service_plan, public: false, active: true, service: svc) + create(:service_plan_visibility, service_plan: plan, organization: organization) end end @@ -246,10 +246,10 @@ def decoded_long_descriptions context 'with private brokers' do it 'returns plans visible in any space they are a member of' do - space = Space.make(organization:) - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker, active: true) - ServicePlan.make(service:) + space = create(:space, organization:) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + create(:service_plan, service:) space.add_developer(user) get '/v2/services' @@ -273,7 +273,7 @@ def decoded_long_descriptions context 'when the user has an invalid auth token' do context 'and when the hide_marketplace_from_unauthenticated_users feature flag is disabled' do it 'raises an InvalidAuthToken error' do - set_current_user(User.make, token: :invalid_token) + set_current_user(create(:user), token: :invalid_token) get '/v2/services' expect(last_response).to have_status_code 401 @@ -287,7 +287,7 @@ def decoded_long_descriptions end it 'continues to raise an InvalidAuthToken error' do - set_current_user(User.make, token: :invalid_token) + set_current_user(create(:user), token: :invalid_token) get '/v2/services' expect(last_response).to have_status_code 401 @@ -332,13 +332,13 @@ def decoded_long_descriptions end describe 'DELETE /v2/services/:guid' do - let!(:service) { Service.make(:v2) } - let!(:service_plan) { ServicePlan.make(service:) } - let!(:service_instance) { ManagedServiceInstance.make(service_plan:) } - let!(:service_binding) { ServiceBinding.make(service_instance:) } - let!(:service_key) { ServiceKey.make(service_instance:) } + let!(:service) { create(:service, :v2) } + let!(:service_plan) { create(:service_plan, service:) } + let!(:service_instance) { create(:managed_service_instance, service_plan:) } + let!(:service_binding) { create(:service_binding, service_instance:) } + let!(:service_key) { create(:service_key, service_instance:) } let(:email) { 'admin@example.com' } - let(:user) { User.make } + let(:user) { create(:user) } before { set_current_user(user, { email: email, admin: true }) } @@ -383,7 +383,7 @@ def decoded_long_descriptions delete "/v2/services/#{service.guid}" expect(last_response).to have_status_code 401 - set_current_user(User.make) + set_current_user(create(:user)) delete "/v2/services/#{service.guid}" expect(last_response).to have_status_code 403 end diff --git a/spec/unit/controllers/services/user_provided_service_instances_controller_spec.rb b/spec/unit/controllers/services/user_provided_service_instances_controller_spec.rb index c131a173574..45a5c3dd949 100644 --- a/spec/unit/controllers/services/user_provided_service_instances_controller_spec.rb +++ b/spec/unit/controllers/services/user_provided_service_instances_controller_spec.rb @@ -42,8 +42,8 @@ module VCAP::CloudController include_context 'permissions' before do - @obj_a = UserProvidedServiceInstance.make(space: @space_a) - @obj_b = UserProvidedServiceInstance.make(space: @space_b) + @obj_a = create(:user_provided_service_instance, space: @space_a) + @obj_b = create(:user_provided_service_instance, space: @space_b) end def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) @@ -117,7 +117,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'GET', '/v2/user_provided_service_instances/' do - let(:service_instance) { UserProvidedServiceInstance.make(gateway_name: Sham.name) } + let(:service_instance) { create(:user_provided_service_instance, gateway_name: Sham.name) } let(:space) { service_instance.space } let(:developer) { make_developer_for_space(space) } @@ -131,7 +131,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'filtering' do let(:first_found_instance) { decoded_response.fetch('resources').first } - let(:service_instance) { UserProvidedServiceInstance.make(name: 'other') } + let(:service_instance) { create(:user_provided_service_instance, name: 'other') } it 'allows filtering by service name' do get "v2/user_provided_service_instances?q=name:#{service_instance.name}" @@ -170,20 +170,20 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end context 'when filtering by org guid' do - let(:org1) { Organization.make(guid: '1') } - let(:org2) { Organization.make(guid: '2') } - let(:org3) { Organization.make(guid: '3') } - let(:space1) { Space.make(organization: org1) } - let(:space2) { Space.make(organization: org2) } - let(:space3) { Space.make(organization: org3) } + let(:org1) { create(:organization, guid: '1') } + let(:org2) { create(:organization, guid: '2') } + let(:org3) { create(:organization, guid: '3') } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } + let(:space3) { create(:space, organization: org3) } before { set_current_user_as_admin } context 'when the operator is ":"' do context 'when the details fit on the first page' do it 'successfully filters' do - instance1 = UserProvidedServiceInstance.make(name: 'instance-1', space: space1) - UserProvidedServiceInstance.make(name: 'instance-2', space: space2) + instance1 = create(:user_provided_service_instance, name: 'instance-1', space: space1) + create(:user_provided_service_instance, name: 'instance-2', space: space2) get "v2/user_provided_service_instances?q=organization_guid:#{org1.guid}" @@ -196,10 +196,10 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'with pagination' do let(:results_per_page) { 1 } let!(:instances) do - [UserProvidedServiceInstance.make(name: 'instance-1', space: space1), - UserProvidedServiceInstance.make(name: 'instance-2', space: space1), - UserProvidedServiceInstance.make(name: 'instance-3', space: space1), - UserProvidedServiceInstance.make(name: 'instance-4', space: space2)] + [create(:user_provided_service_instance, name: 'instance-1', space: space1), + create(:user_provided_service_instance, name: 'instance-2', space: space1), + create(:user_provided_service_instance, name: 'instance-3', space: space1), + create(:user_provided_service_instance, name: 'instance-4', space: space2)] end context 'at page 1' do @@ -264,9 +264,9 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when filtering by other parameters as well' do it 'filters by both parameters' do - instance1 = UserProvidedServiceInstance.make(name: 'instance-1', space: space1) - UserProvidedServiceInstance.make(name: 'instance-2', space: space1) - UserProvidedServiceInstance.make(name: instance1.name, space: space2) + instance1 = create(:user_provided_service_instance, name: 'instance-1', space: space1) + create(:user_provided_service_instance, name: 'instance-2', space: space1) + create(:user_provided_service_instance, name: instance1.name, space: space2) get "v2/user_provided_service_instances?q=organization_guid:#{org1.guid}&q=name:#{instance1.name}" @@ -280,9 +280,9 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when the operator is "IN"' do it 'successfully filters' do - instance1 = UserProvidedServiceInstance.make(name: 'inst1', space: space1) - instance2 = UserProvidedServiceInstance.make(name: 'inst2', space: space2) - UserProvidedServiceInstance.make(name: 'inst3', space: space3) + instance1 = create(:user_provided_service_instance, name: 'inst1', space: space1) + instance2 = create(:user_provided_service_instance, name: 'inst2', space: space2) + create(:user_provided_service_instance, name: 'inst3', space: space3) get "v2/user_provided_service_instances?q=organization_guid%20IN%20#{org1.guid},#{org2.guid}" @@ -296,8 +296,8 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when the query is missing an operator or a value' do it 'filters by org_guid = nil (to match behavior of filters other than org guid)' do - UserProvidedServiceInstance.make(name: 'instance-1', space: space1) - UserProvidedServiceInstance.make(name: 'instance-2', space: space2) + create(:user_provided_service_instance, name: 'instance-1', space: space1) + create(:user_provided_service_instance, name: 'instance-2', space: space2) get 'v2/user_provided_service_instances?q=organization_guid' @@ -313,7 +313,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) describe 'POST', '/v2/user_provided_service_instances' do let(:email) { 'email@example.com' } let(:developer) { make_developer_for_space(space) } - let(:space) { Space.make } + let(:space) { create(:space) } let(:req) do { 'name' => 'my-upsi', @@ -341,7 +341,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when the new service instance name is taken' do let(:service_instance_attrs) { { name: 'foo', space: space } } - let(:service_instance) { UserProvidedServiceInstance.make(service_instance_attrs) } + let(:service_instance) { create(:user_provided_service_instance, service_instance_attrs) } let(:req_dup) do { @@ -547,7 +547,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) describe 'PUT', '/v2/user_provided_service_instances/:guid' do let(:email) { 'email@example.com' } let(:developer) { make_developer_for_space(space) } - let(:space) { Space.make } + let(:space) { create(:space) } let(:req) do { 'name' => 'my-upsi', @@ -556,7 +556,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) } end - let!(:service_instance) { UserProvidedServiceInstance.make(space:) } + let!(:service_instance) { create(:user_provided_service_instance, space:) } before { set_current_user(developer) } @@ -598,8 +598,8 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when the updated service instance name is taken' do let(:service_instance_attrs_foo) { { name: 'foo', space: space } } let(:service_instance_attrs_bar) { { name: 'bar', space: space } } - let(:service_instance_foo) { UserProvidedServiceInstance.make(service_instance_attrs_foo) } - let(:service_instance_bar) { UserProvidedServiceInstance.make(service_instance_attrs_bar) } + let(:service_instance_foo) { create(:user_provided_service_instance, service_instance_attrs_foo) } + let(:service_instance_bar) { create(:user_provided_service_instance, service_instance_attrs_bar) } it 'fails and returns service instance name is taken' do put "/v2/user_provided_service_instances/#{service_instance_foo.guid}", @@ -624,13 +624,13 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'the space_guid parameter' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:developer) { make_developer_for_space(space) } - let(:instance) { UserProvidedServiceInstance.make(space:) } + let(:instance) { create(:user_provided_service_instance, space:) } it 'prevents a developer from moving the service instance to a space for which he is also a space developer' do - space2 = Space.make(organization: org) + space2 = create(:space, organization: org) space2.add_developer(developer) move_req = Oj.dump( @@ -656,7 +656,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end context 'when the service instance has a binding' do - let!(:binding) { ServiceBinding.make service_instance: } + let!(:binding) { create(:service_binding, service_instance:) } it 'propagates the updated credentials to the binding' do put "/v2/user_provided_service_instances/#{service_instance.guid}", req.to_json @@ -669,8 +669,8 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) describe 'DELETE', '/v2/user_provided_service_instances/:guid' do let(:email) { 'email@example.com' } let(:developer) { make_developer_for_space(space) } - let(:space) { Space.make } - let!(:service_instance) { UserProvidedServiceInstance.make(space:) } + let(:space) { create(:space) } + let!(:service_instance) { create(:user_provided_service_instance, space:) } before { set_current_user(developer, email:) } @@ -700,11 +700,11 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'PUT', '/v2/user_provided_service_instances/:guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:opts) { {} } - let(:service_instance) { UserProvidedServiceInstance.make(:routing, space:) } + let(:service_instance) { create(:user_provided_service_instance, :routing, space:) } before do TestConfig.config[:route_services_enabled] = true @@ -791,11 +791,11 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when the route has an associated service instance' do before do - RouteBinding.make service_instance:, route: + create(:route_binding, service_instance:, route:) end it 'raises RouteAlreadyBoundToServiceInstance' do - new_service_instance = UserProvidedServiceInstance.make(:routing, space:) + new_service_instance = create(:user_provided_service_instance, :routing, space:) get "/v2/user_provided_service_instances/#{new_service_instance.guid}/routes" expect(last_response.status).to eq(200) expect(Oj.load(last_response.body)['total_results']).to be(0) @@ -829,11 +829,11 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end context 'when the route is internal' do - let(:domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let(:route) { Route.make(domain:, space:) } + let(:domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let(:route) { create(:route, domain:, space:) } it 'raises RouteServiceCannotBeBoundToInternalRoute' do - new_service_instance = UserProvidedServiceInstance.make(:routing, space:) + new_service_instance = create(:user_provided_service_instance, :routing, space:) put "/v2/user_provided_service_instances/#{new_service_instance.guid}/routes/#{route.guid}" expect(last_response.status).to eq(400), last_response.body expect(Oj.load(last_response.body)['description']). @@ -843,7 +843,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when attempting to bind to a service with no route_service_url' do before do - service_instance = UserProvidedServiceInstance.make(space:) + service_instance = create(:user_provided_service_instance, space:) put "/v2/user_provided_service_instances/#{service_instance.guid}/routes/#{route.guid}" end @@ -855,7 +855,7 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) context 'when attempting to bind to a service with an empty route_service_url' do before do - service_instance = UserProvidedServiceInstance.make(route_service_url: '', space: space) + service_instance = create(:user_provided_service_instance, route_service_url: '', space: space) put "/v2/user_provided_service_instances/#{service_instance.guid}/routes/#{route.guid}" end @@ -866,8 +866,8 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end context 'when the route and service_instance are not in the same space' do - let(:other_space) { Space.make(organization: space.organization) } - let(:service_instance) { UserProvidedServiceInstance.make(:routing, space: other_space) } + let(:other_space) { create(:space, organization: space.organization) } + let(:service_instance) { create(:user_provided_service_instance, :routing, space: other_space) } before do other_space.add_developer(developer) @@ -884,15 +884,15 @@ def self.user_sees_empty_enumerate(user_role, member_a_ivar, member_b_ivar) end describe 'DELETE', '/v2/user_provided_service_instances/:service_instance_guid/routes/:route_guid' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:developer) { make_developer_for_space(space) } - let(:service_instance) { UserProvidedServiceInstance.make(:routing, space:) } - let(:route) { Route.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, :routing, space:) } + let(:route) { create(:route, space:) } before { set_current_user(developer) } context 'when a service has an associated route' do - let!(:route_binding) { RouteBinding.make(route:, service_instance:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } it 'deletes the association between the route and the service instance' do set_current_user(developer, email: 'developer@example.com') diff --git a/spec/unit/controllers/services/validators/service_update_validator_spec.rb b/spec/unit/controllers/services/validators/service_update_validator_spec.rb index 5650e9af6de..0c5d007c89d 100644 --- a/spec/unit/controllers/services/validators/service_update_validator_spec.rb +++ b/spec/unit/controllers/services/validators/service_update_validator_spec.rb @@ -6,11 +6,11 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::ServiceUpdateValidator, :services do describe '#validate_service_instance' do let(:service_broker_url) { "http://example.com/v2/service_instances/#{service_instance.guid}" } - let(:service_broker) { ServiceBroker.make(broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } - let(:service) { Service.make(plan_updateable: true, service_broker: service_broker) } - let(:old_service_plan) { ServicePlan.make(:v2, service: service, free: true, maintenance_info: { version: '2.0.0' }) } - let(:new_service_plan) { ServicePlan.make(:v2, service:) } - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:service_broker) { create(:service_broker, broker_url: 'http://example.com', auth_username: 'auth_username', auth_password: 'auth_password') } + let(:service) { create(:service, plan_updateable: true, service_broker: service_broker) } + let(:old_service_plan) { create(:service_plan, :v2, service: service, free: true, maintenance_info: { version: '2.0.0' }) } + let(:new_service_plan) { create(:service_plan, :v2, service:) } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } let(:space) { service_instance.space } let(:update_attrs) { {} } @@ -49,7 +49,7 @@ module VCAP::CloudController let(:active) {} let(:public) {} - let(:old_service_plan) { ServicePlan.make(:v2, service:, active:, public:) } + let(:old_service_plan) { create(:service_plan, :v2, service:, active:, public:) } context 'when the current user is an admin' do before do @@ -80,7 +80,7 @@ module VCAP::CloudController let(:public) { false } before do - ServicePlanVisibility.make(organization: space.organization, service_plan: old_service_plan) + create(:service_plan_visibility, organization: space.organization, service_plan: old_service_plan) end it 'allows the update' do @@ -103,10 +103,10 @@ module VCAP::CloudController end context 'when the model errors' do - let(:smol_space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(guid: 'smol-space-quota-guid', organization: space.organization, total_services: 1) } + let(:smol_space_quota) { create(:space_quota_definition, guid: 'smol-space-quota-guid', organization: space.organization, total_services: 1) } before do - ManagedServiceInstance.make(service_plan: old_service_plan, space: space) + create(:managed_service_instance, service_plan: old_service_plan, space: space) smol_space_quota.add_space(space) end @@ -120,15 +120,14 @@ module VCAP::CloudController end context 'when the requested plan is not bindable' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, bindable: false) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, bindable: false) } let(:update_attrs) { { 'service_plan_guid' => new_service_plan.guid } } context 'and service bindings exist' do before do - ServiceBinding.make( - app: AppModel.make(space: service_instance.space), - service_instance: service_instance - ) + create(:service_binding, + app: create(:app_model, space: service_instance.space), + service_instance: service_instance) end it 'raises a validation error' do @@ -214,9 +213,9 @@ module VCAP::CloudController end context 'when the plan is in a different service' do - let(:other_broker) { ServiceBroker.make } - let(:other_service) { Service.make(plan_updateable: true, service_broker: other_broker) } - let(:new_service_plan) { ServicePlan.make(:v2, service: other_service) } + let(:other_broker) { create(:service_broker) } + let(:other_service) { create(:service, plan_updateable: true, service_broker: other_broker) } + let(:new_service_plan) { create(:service_plan, :v2, service: other_service) } let(:update_attrs) { { 'service_plan_guid' => new_service_plan.guid } } it 'raises a validation error' do @@ -227,7 +226,7 @@ module VCAP::CloudController end context 'when the service instance is shared' do - let(:shared_space) { Space.make } + let(:shared_space) { create(:space) } before do service_instance.add_shared_space(shared_space) @@ -262,7 +261,7 @@ module VCAP::CloudController context 'when maintenance_info is absent on service_plan and maintenance_info update requested' do let(:update_attrs) { { 'maintenance_info' => { 'version' => '2.0.0' } } } - let(:old_service_plan) { ServicePlan.make(:v2, service: service, free: true) } + let(:old_service_plan) { create(:service_plan, :v2, service: service, free: true) } it 'errors' do expect do @@ -306,21 +305,20 @@ module VCAP::CloudController end context 'paid plans' do - let(:old_service_plan) { ServicePlan.make(:v2, service: service, free: false) } + let(:old_service_plan) { create(:service_plan, :v2, service: service, free: false) } let(:free_quota) do - QuotaDefinition.make( - total_services: 10, - non_basic_services_allowed: false - ) + create(:quota_definition, + total_services: 10, + non_basic_services_allowed: false) end - let(:free_plan) { ServicePlan.make(:v2, free: true) } - let(:org) { Organization.make(quota_definition: free_quota) } + let(:free_plan) { create(:service_plan, :v2, free: true) } + let(:org) { create(:organization, quota_definition: free_quota) } let(:developer) { make_developer_for_space(space) } context 'when paid plans are disabled for the quota' do - let(:service_instance) { ManagedServiceInstance.make(service_plan: old_service_plan) } + let(:service_instance) { create(:managed_service_instance, service_plan: old_service_plan) } before do space.space_quota_definition = free_quota @@ -338,7 +336,7 @@ module VCAP::CloudController end context 'when changing to an unpaid plan from a paid plan' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, free: true) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, free: true) } let(:update_attrs) { { 'service_plan_guid' => new_service_plan.guid } } it 'succeeds' do @@ -353,7 +351,7 @@ module VCAP::CloudController end context 'when changing to a different paid plan from a paid plan' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, free: false) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, free: false) } let(:update_attrs) { { 'service_plan_guid' => new_service_plan.guid } } it 'errors' do @@ -374,7 +372,7 @@ module VCAP::CloudController end context 'when paid plans are enabled for the quota' do - let(:new_service_plan) { ServicePlan.make(:v2, service: service, free: false) } + let(:new_service_plan) { create(:service_plan, :v2, service: service, free: false) } let(:update_attrs) { { 'service_plan_guid' => new_service_plan.guid } } it 'succeeds for paid plans' do @@ -386,7 +384,7 @@ module VCAP::CloudController context 'when parameters update requested' do let(:update_attrs) { { 'parameters' => { 'foo' => 'bar' } } } - let(:old_service_plan) { ServicePlan.make(:v2, service:, active:, public:) } + let(:old_service_plan) { create(:service_plan, :v2, service:, active:, public:) } let(:active) {} let(:public) {} diff --git a/spec/unit/controllers/v3/app_features_controller_spec.rb b/spec/unit/controllers/v3/app_features_controller_spec.rb index 9991fe2ecb1..6fdf6d19662 100644 --- a/spec/unit/controllers/v3/app_features_controller_spec.rb +++ b/spec/unit/controllers/v3/app_features_controller_spec.rb @@ -4,10 +4,10 @@ ## NOTICE: Prefer request specs over controller specs as per ADR #0003 ## RSpec.describe AppFeaturesController, type: :controller do - let(:app_model) { VCAP::CloudController::AppModel.make(enable_ssh: true, service_binding_k8s_enabled: true) } + let(:app_model) { create(:app_model, enable_ssh: true, service_binding_k8s_enabled: true) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:app_feature_ssh_response) { { 'name' => 'ssh', 'description' => 'Enable SSHing into the app.', 'enabled' => true } } let(:app_feature_revisions_response) { { 'name' => 'revisions', 'description' => 'Enable versioning of an application', 'enabled' => true } } let(:app_feature_service_binding_k8s_response) do diff --git a/spec/unit/controllers/v3/app_manifests_controller_spec.rb b/spec/unit/controllers/v3/app_manifests_controller_spec.rb index c045a780ad2..b2f6c8f54ea 100644 --- a/spec/unit/controllers/v3/app_manifests_controller_spec.rb +++ b/spec/unit/controllers/v3/app_manifests_controller_spec.rb @@ -5,10 +5,10 @@ RSpec.describe AppManifestsController, type: :controller do describe '#show' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_yml_manifest) do { diff --git a/spec/unit/controllers/v3/app_revisions_controller_spec.rb b/spec/unit/controllers/v3/app_revisions_controller_spec.rb index 05a99336e6e..aef117f36f3 100644 --- a/spec/unit/controllers/v3/app_revisions_controller_spec.rb +++ b/spec/unit/controllers/v3/app_revisions_controller_spec.rb @@ -5,7 +5,7 @@ RSpec.describe AppRevisionsController, type: :controller do let!(:space) { app_model.space } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user) @@ -14,11 +14,11 @@ end describe '#index' do - let!(:app_model) { VCAP::CloudController::AppModel.make } - let!(:app_without_revisions) { VCAP::CloudController::AppModel.make(space:) } - let!(:revision1) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 808) } - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 809) } - let!(:revision_for_another_app) { VCAP::CloudController::RevisionModel.make } + let!(:app_model) { create(:app_model) } + let!(:app_without_revisions) { create(:app_model, space:) } + let!(:revision1) { create(:revision_model, app: app_model, version: 808) } + let!(:revision2) { create(:revision_model, app: app_model, version: 809) } + let!(:revision_for_another_app) { create(:revision_model) } it 'returns 200 and shows the revisions' do get :index, params: { guid: app_model.guid } @@ -28,7 +28,7 @@ end context 'filters' do - let!(:revision3) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 810) } + let!(:revision3) { create(:revision_model, app: app_model, version: 810) } it 'by version' do get :index, params: { guid: app_model.guid, versions: '808,810' } @@ -55,7 +55,7 @@ context 'permissions' do context 'when the user does not have cc read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'raises an ApiError with a 403 code' do @@ -84,15 +84,15 @@ end describe '#deployed' do - let!(:app_model) { VCAP::CloudController::AppModel.make } - let!(:app_without_revisions) { VCAP::CloudController::AppModel.make(space:) } - let!(:revision1) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 808) } - let!(:revision2) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 809) } - let!(:revision_for_another_app) { VCAP::CloudController::RevisionModel.make } - let!(:revision3) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 810) } - let!(:process1) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision1, type: 'web', state: 'STARTED') } - let!(:process2) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision2, type: 'worker', state: 'STARTED') } - let!(:process3) { VCAP::CloudController::ProcessModel.make(app: app_model, revision: revision3, type: 'web', state: 'STOPPED') } + let!(:app_model) { create(:app_model) } + let!(:app_without_revisions) { create(:app_model, space:) } + let!(:revision1) { create(:revision_model, app: app_model, version: 808) } + let!(:revision2) { create(:revision_model, app: app_model, version: 809) } + let!(:revision_for_another_app) { create(:revision_model) } + let!(:revision3) { create(:revision_model, app: app_model, version: 810) } + let!(:process1) { create(:process_model, app: app_model, revision: revision1, type: 'web', state: 'STARTED') } + let!(:process2) { create(:process_model, app: app_model, revision: revision2, type: 'worker', state: 'STARTED') } + let!(:process3) { create(:process_model, app: app_model, revision: revision3, type: 'web', state: 'STOPPED') } it 'returns the deployed revisions' do get :deployed, params: { guid: app_model.guid } @@ -111,7 +111,7 @@ context 'permissions' do context 'when the user does not have cc read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'raises an ApiError with a 403 code' do diff --git a/spec/unit/controllers/v3/application_controller_spec.rb b/spec/unit/controllers/v3/application_controller_spec.rb index f7410e23a27..a894a820e9a 100644 --- a/spec/unit/controllers/v3/application_controller_spec.rb +++ b/spec/unit/controllers/v3/application_controller_spec.rb @@ -68,7 +68,7 @@ def warnings_incorrect_type describe '#check_read_permissions' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'is required on index' do @@ -256,7 +256,7 @@ def warnings_incorrect_type end describe '#handle_blobstore_error' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } it 'rescues from ApiError and renders an error presenter' do allow_any_instance_of(ErrorPresenter).to receive(:raise_500?).and_return(false) @@ -268,7 +268,7 @@ def warnings_incorrect_type end describe '#handle_api_error' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } it 'rescues from ApiError and renders an error presenter' do routes.draw { get 'api_explode' => 'anonymous#api_explode' } @@ -279,7 +279,7 @@ def warnings_incorrect_type end describe '#handle_compound_error' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } it 'rescues from CompoundErrors and renders an error presenter' do routes.draw { get 'compound_error' => 'anonymous#compound_error' } @@ -290,7 +290,7 @@ def warnings_incorrect_type end describe '#handle_not_found' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } it 'rescues from NotFound error and renders an error presenter' do routes.draw { get 'not_found' => 'anonymous#not_found' } @@ -301,7 +301,7 @@ def warnings_incorrect_type end describe '#handle_db_connection_error' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } before do allow_any_instance_of(ErrorPresenter).to receive(:raise_500?).and_return(false) @@ -325,7 +325,7 @@ def warnings_incorrect_type end describe '#handle_key_derivation_error' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } before do allow_any_instance_of(ErrorPresenter).to receive(:raise_500?).and_return(false) @@ -342,7 +342,7 @@ def warnings_incorrect_type end describe '#add_warning_headers' do - let!(:user) { set_current_user(VCAP::CloudController::User.make) } + let!(:user) { set_current_user(create(:user)) } it 'does nothing when warnings is nil' do routes.draw { get 'warnings_is_nil' => 'anonymous#warnings_is_nil' } diff --git a/spec/unit/controllers/v3/apps_controller_spec.rb b/spec/unit/controllers/v3/apps_controller_spec.rb index f74f841b593..fa55b83a9eb 100644 --- a/spec/unit/controllers/v3/apps_controller_spec.rb +++ b/spec/unit/controllers/v3/apps_controller_spec.rb @@ -5,7 +5,7 @@ RSpec.describe AppsV3Controller, type: :controller do describe '#index' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user_as_admin(user:) @@ -57,11 +57,11 @@ context 'sorting' do before do - VCAP::CloudController::AppModel.make(name: 'clem') - VCAP::CloudController::AppModel.make(name: 'abel') - VCAP::CloudController::AppModel.make(name: 'quartz') - VCAP::CloudController::AppModel.make(name: 'beale') - VCAP::CloudController::AppModel.make(name: 'rocky') + create(:app_model, name: 'clem') + create(:app_model, name: 'abel') + create(:app_model, name: 'quartz') + create(:app_model, name: 'beale') + create(:app_model, name: 'rocky') end it 'sorts and paginates the apps by name' do @@ -145,9 +145,9 @@ end describe '#show' do - let!(:app_model) { VCAP::CloudController::AppModel.make } + let!(:app_model) { create(:app_model) } let(:space) { app_model.space } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user) @@ -174,7 +174,7 @@ context 'permissions' do context 'when the user does not have cc read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'raises an ApiError with a 403 code' do @@ -188,8 +188,8 @@ end describe '#create' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:space) { VCAP::CloudController::Space.make } + let(:user) { set_current_user(create(:user)) } + let(:space) { create(:space) } let(:request_body) do { name: 'some-name', @@ -460,7 +460,7 @@ context 'cnb' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_cnb', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_cnb', enabled: true, error_message: nil) end context 'when lifecycle data contains credentials' do @@ -508,7 +508,7 @@ end before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: false, error_message: nil) end context 'admin' do @@ -545,7 +545,7 @@ end before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_cnb', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_cnb', enabled: false, error_message: nil) end context 'admin' do @@ -574,7 +574,7 @@ end describe '#update' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } let(:org) { space.organization } @@ -582,7 +582,7 @@ let(:request_body) { { name: 'new-name' } } before do - user = VCAP::CloudController::User.make + user = create(:user) set_current_user(user) allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) @@ -613,8 +613,8 @@ let(:new_name) { 'potato' } before do - VCAP::CloudController::Buildpack.make(name: 'some-buildpack-name') - VCAP::CloudController::Buildpack.make(name: 'some-buildpack') + create(:buildpack, name: 'some-buildpack-name') + create(:buildpack, name: 'some-buildpack') end context 'when the space developer does not request lifecycle' do @@ -687,7 +687,7 @@ end context 'for a docker app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } it 'uses the existing lifecycle on app' do patch :update, params: { guid: app_model.guid }.merge(request_body), as: :json @@ -864,7 +864,7 @@ end context 'docker request' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } context 'when attempting to change to another lifecycle type' do let(:request_body) do @@ -965,11 +965,11 @@ context 'when the metadata is valid' do let!(:app_annotation) do - VCAP::CloudController::AppAnnotationModel.make(app: app_model, key_name: 'existing_anno', value: 'original-value') + create(:app_annotation_model, app: app_model, key_name: 'existing_anno', value: 'original-value') end let!(:delete_annotation) do - VCAP::CloudController::AppAnnotationModel.make(app: app_model, key_name: 'please', value: 'delete me') + create(:app_annotation_model, app: app_model, key_name: 'please', value: 'delete me') end let(:request_body) do @@ -1029,16 +1029,16 @@ end describe '#destroy' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } let(:app_delete_stub) { instance_double(VCAP::CloudController::AppDelete) } before do allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) allow(VCAP::CloudController::Jobs::DeleteActionJob).to receive(:new).and_call_original allow(VCAP::CloudController::AppDelete).to receive(:new).and_return(app_delete_stub) allow(AppsV3Controller::DeleteAppErrorTranslatorJob).to receive(:new).and_call_original @@ -1088,12 +1088,12 @@ end describe '#start' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid) } - let(:droplet) { VCAP::CloudController::DropletModel.make(state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid) } + let(:droplet) { create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:buildpack_lifecycle) { VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) } + let(:user) { set_current_user(create(:user)) } + let(:buildpack_lifecycle) { create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) } before do allow_user_read_access_for(user, spaces: [space]) @@ -1113,7 +1113,7 @@ context 'permissions' do context 'when the user does not have write permissions' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -1195,11 +1195,11 @@ end context 'when requesting docker lifecycle and diego_docker feature flag is disabled' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, droplet_guid: droplet.guid) } - let(:droplet) { VCAP::CloudController::DropletModel.make(:docker, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, :docker, droplet_guid: droplet.guid) } + let(:droplet) { create(:droplet_model, :docker, state: VCAP::CloudController::DropletModel::STAGED_STATE) } before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: false, error_message: nil) end context 'admin' do @@ -1229,17 +1229,17 @@ end describe '#stop' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid, desired_state: 'STARTED') } - let(:droplet) { VCAP::CloudController::DropletModel.make(state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid, desired_state: 'STARTED') } + let(:droplet) { create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user) allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) end it 'returns a 200 and the app' do @@ -1255,7 +1255,7 @@ context 'permissions' do context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -1319,14 +1319,14 @@ end describe '#restart' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid, desired_state: 'STARTED') } - let(:droplet) { VCAP::CloudController::DropletModel.make(state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid, desired_state: 'STARTED') } + let(:droplet) { create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) end context 'permissions' do @@ -1411,12 +1411,12 @@ end context 'when requesting docker lifecycle' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, droplet_guid: droplet.guid) } - let(:droplet) { VCAP::CloudController::DropletModel.make(:docker, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, :docker, droplet_guid: droplet.guid) } + let(:droplet) { create(:droplet_model, :docker, state: VCAP::CloudController::DropletModel::STAGED_STATE) } context 'and diego_docker feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'returns 200' do @@ -1429,7 +1429,7 @@ context 'and diego_docker feature flag is disabled' do before do app_model.buildpack_lifecycle_data = nil - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: false, error_message: nil) end context 'admin' do @@ -1494,12 +1494,12 @@ end describe '#builds' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } - let!(:build1) { VCAP::CloudController::BuildModel.make(app_guid: app_model.guid, guid: 'build-1') } - let!(:build2) { VCAP::CloudController::BuildModel.make(app_guid: app_model.guid, guid: 'build-2') } + let(:user) { create(:user) } + let!(:build1) { create(:build_model, app_guid: app_model.guid, guid: 'build-1') } + let!(:build2) { create(:build_model, app_guid: app_model.guid, guid: 'build-2') } before do set_current_user_as_admin(user:) @@ -1553,17 +1553,17 @@ end describe '#clear_buildpack_cache' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid, desired_state: 'STARTED') } - let(:droplet) { VCAP::CloudController::DropletModel.make(state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid, desired_state: 'STARTED') } + let(:droplet) { create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user) allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) end it 'returns a 202 and a job' do @@ -1619,7 +1619,7 @@ context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -1660,17 +1660,17 @@ end describe '#show_env' do - let(:app_model) { VCAP::CloudController::AppModel.make(environment_variables: { meep: 'moop', beep: 'boop' }) } + let(:app_model) { create(:app_model, environment_variables: { meep: 'moop', beep: 'boop' }) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user, email: 'mona@example.com') allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) allow_user_secret_access(user, space:) - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) end it 'returns 200 and the environment variables' do @@ -1702,7 +1702,7 @@ context 'permissions' do context 'when the user does not have read permissions' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.write']) + set_current_user(create(:user), scopes: ['cloud_controller.write']) end it 'returns a 403' do @@ -1752,7 +1752,7 @@ context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 for non-admins' do @@ -1794,7 +1794,7 @@ context 'when the env_var_visibility feature flag is disabled' do before do allow_user_secret_access(user, space:) - VCAP::CloudController::FeatureFlag.make(name: 'env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 for all users' do @@ -1818,10 +1818,10 @@ end describe '#show_environment_variables' do - let(:app_model) { VCAP::CloudController::AppModel.make(environment_variables: { meep: 'moop', beep: 'boop' }) } + let(:app_model) { create(:app_model, environment_variables: { meep: 'moop', beep: 'boop' }) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_success_response) do { @@ -1868,7 +1868,7 @@ context 'when the space_developer_env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'space_developer_env_var_visibility', enabled: false, error_message: nil) end role_to_expected_http_response.merge({ 'space_developer' => 403 }).each do |role, expected_return_value| @@ -1890,7 +1890,7 @@ context 'when the env_var_visibility feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'env_var_visibility', enabled: false, error_message: nil) + create(:feature_flag, name: 'env_var_visibility', enabled: false, error_message: nil) end it 'raises 403 for all users' do @@ -1904,7 +1904,7 @@ end context 'when the user does not have read scope' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do org.add_user(user) @@ -1929,7 +1929,7 @@ end context 'when the app does not have environment variables' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } it 'returns 200 and the set of links' do set_current_user_as_admin(user:) @@ -1966,10 +1966,10 @@ end describe '#update_environment_variables' do - let(:app_model) { VCAP::CloudController::AppModel.make(environment_variables: { override: 'value-to-override', preserve: 'value-to-keep' }) } + let(:app_model) { create(:app_model, environment_variables: { override: 'value-to-override', preserve: 'value-to-keep' }) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:expected_success_response) do { @@ -2092,20 +2092,20 @@ end describe '#assign_current_droplet' do - let(:app_model) { VCAP::CloudController::AppModel.make } - let(:droplet) { VCAP::CloudController::DropletModel.make(process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model) } + let(:droplet) { create(:droplet_model, process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:request_body) { { data: { guid: droplet.guid } } } let(:droplet_link) { { 'href' => "#{link_prefix}/v3/apps/#{app_model.guid}/droplets/current" } } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do app_model.add_droplet(droplet) set_current_user(user) allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) - VCAP::CloudController::BuildpackLifecycleDataModel.make(app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) + create(:buildpack_lifecycle_data_model, app: app_model, buildpacks: nil, stack: VCAP::CloudController::Stack.default.name) end it 'returns 200 and the droplet guid' do @@ -2143,7 +2143,7 @@ end context 'and the droplet is not associated with the application' do - let(:unassociated_droplet) { VCAP::CloudController::DropletModel.make } + let(:unassociated_droplet) { create(:droplet_model) } let(:request_body) { { data: { guid: unassociated_droplet.guid } } } it 'returns a 422' do @@ -2193,7 +2193,7 @@ context 'when the app has a Deployment in flight' do context 'when the deployment is deploying' do before do - VCAP::CloudController::DeploymentModel.make(app: app_model, state: 'DEPLOYING') + create(:deployment_model, app: app_model, state: 'DEPLOYING') end it 'returns an UnprocessableEntity error' do @@ -2209,7 +2209,7 @@ context 'permissions' do context 'when the user does not have write permissions' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -2250,12 +2250,12 @@ end describe '#current_droplet' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid) } - let(:droplet) { VCAP::CloudController::DropletModel.make(process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid) } + let(:droplet) { create(:droplet_model, process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:droplet_link) { { 'href' => "/v3/apps/#{app_model.guid}/droplets/current" } } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do app_model.add_droplet(droplet) @@ -2272,7 +2272,7 @@ end context 'when the current droplet is not set' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } it 'returns a 404 Not Found' do get :current_droplet, params: { guid: app_model.guid } @@ -2284,12 +2284,12 @@ end describe '#current_droplet_relationship' do - let(:app_model) { VCAP::CloudController::AppModel.make(droplet_guid: droplet.guid) } - let(:droplet) { VCAP::CloudController::DropletModel.make(process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:app_model) { create(:app_model, droplet_guid: droplet.guid) } + let(:droplet) { create(:droplet_model, process_types: { 'web' => 'start app' }, state: VCAP::CloudController::DropletModel::STAGED_STATE) } let(:droplet_link) { { 'href' => "/v3/apps/#{app_model.guid}/droplets/current" } } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do app_model.add_droplet(droplet) @@ -2306,7 +2306,7 @@ end context 'when the current droplet is not set' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } it 'returns a 404 Not Found' do get :current_droplet_relationship, params: { guid: app_model.guid } diff --git a/spec/unit/controllers/v3/buildpacks_controller_spec.rb b/spec/unit/controllers/v3/buildpacks_controller_spec.rb index b5412b1c008..a2b5ed6ae6a 100644 --- a/spec/unit/controllers/v3/buildpacks_controller_spec.rb +++ b/spec/unit/controllers/v3/buildpacks_controller_spec.rb @@ -10,7 +10,7 @@ end describe '#index' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } describe 'permissions by role' do role_to_expected_http_response = { @@ -28,8 +28,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role(role:, org:, space:, user:) @@ -49,12 +49,12 @@ end context 'when the user is logged in' do - let!(:stack1) { VCAP::CloudController::Stack.make } - let!(:stack2) { VCAP::CloudController::Stack.make } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack) } - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(stack: stack1.name, position: 2) } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(stack: stack2.name, position: 1) } - let!(:buildpack3) { VCAP::CloudController::Buildpack.make(stack: stack1.name, lifecycle: 'cnb', position: 1) } + let!(:buildpack1) { create(:buildpack, stack: stack1.name, position: 2) } + let!(:buildpack2) { create(:buildpack, stack: stack2.name, position: 1) } + let!(:buildpack3) { create(:buildpack, stack: stack1.name, lifecycle: 'cnb', position: 1) } before do set_current_user(user) @@ -120,13 +120,13 @@ end describe '#destroy' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } - let(:user) { VCAP::CloudController::User.make } + let(:buildpack) { create(:buildpack) } + let(:user) { create(:user) } describe 'permissions' do context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -145,8 +145,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -172,8 +172,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -246,14 +246,14 @@ end describe '#show' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do set_current_user(user) end context 'when the buildpack exists' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'renders a single buildpack details' do get :show, params: { guid: buildpack.guid } @@ -273,14 +273,14 @@ describe '#create' do before do - VCAP::CloudController::Buildpack.make - VCAP::CloudController::Buildpack.make - VCAP::CloudController::Buildpack.make + create(:buildpack) + create(:buildpack) + create(:buildpack) end context 'when authorized' do - let(:user) { VCAP::CloudController::User.make } - let(:stack) { VCAP::CloudController::Stack.make } + let(:user) { create(:user) } + let(:stack) { create(:stack) } let(:params) do { name: 'the-r3al_Name', @@ -305,7 +305,7 @@ context 'when params are correct' do context 'when the stack exists' do - let(:stack) { VCAP::CloudController::Stack.make } + let(:stack) { create(:stack) } it 'saves the buildpack in the database' do post :create, params: params, as: :json @@ -366,15 +366,15 @@ end describe '#update' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:buildpack) do - VCAP::CloudController::Buildpack.make(stack: nil) + create(:buildpack, stack: nil) end describe 'permissions' do context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -393,8 +393,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -420,8 +420,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -450,7 +450,7 @@ expect(buildpack.reload.enabled).to be false end - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:headers) { headers_for(user) } before do @@ -468,7 +468,7 @@ context 'when there are model level validation failures' do it 'returns 422' do - other_buildpack = VCAP::CloudController::Buildpack.make(stack: buildpack.stack) + other_buildpack = create(:buildpack, stack: buildpack.stack) patch :update, params: { guid: buildpack.guid, name: other_buildpack.name }, as: :json expect(response).to have_http_status :unprocessable_content @@ -478,8 +478,8 @@ it 'updates the updatable fields' do buildpack - other_buildpack = VCAP::CloudController::Buildpack.make - new_stack = VCAP::CloudController::Stack.make + other_buildpack = create(:buildpack) + new_stack = create(:stack) new_values = { name: 'new-name', stack: new_stack.name, @@ -515,7 +515,7 @@ describe '#upload' do let(:stat_double) { instance_double(File::Stat, size: 2) } let(:test_buildpack) { VCAP::CloudController::Buildpack.create_from_hash({ name: 'upload_binary_buildpack', stack: nil, position: 0 }) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:uploader) { instance_double(VCAP::CloudController::BuildpackUpload, upload_async: nil) } let(:buildpack_bits_path) { '/tmp/buildpack_bits_path' } let(:buildpack_bits_name) { 'buildpack.zip' } @@ -532,7 +532,7 @@ context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -551,8 +551,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -578,8 +578,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -624,7 +624,7 @@ end context 'when the buildpack is locked' do - let(:bp) { VCAP::CloudController::Buildpack.make(locked: true) } + let(:bp) { create(:buildpack, locked: true) } it 'returns a 422 and error message that the buildpack is locked' do post :upload, params: { guid: bp.guid, bits_path: buildpack_bits_path, bits_name: buildpack_bits_name }.merge({}), as: :json diff --git a/spec/unit/controllers/v3/builds_controller_spec.rb b/spec/unit/controllers/v3/builds_controller_spec.rb index 3f9333f4ac9..e9c81b5ee3a 100644 --- a/spec/unit/controllers/v3/builds_controller_spec.rb +++ b/spec/unit/controllers/v3/builds_controller_spec.rb @@ -5,27 +5,25 @@ RSpec.describe BuildsController, type: :controller do describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:organization) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:build) { VCAP::CloudController::BuildModel.make(package: package, app: app_model) } + let(:user) { set_current_user(create(:user)) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } + let(:app_model) { create(:app_model, space:) } + let(:package) { create(:package_model, app_guid: app_model.guid) } + let(:build) { create(:build_model, package: package, app: app_model) } let!(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: build - ) - end - let(:package2) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:build2) { VCAP::CloudController::BuildModel.make(package: package2, app: app_model) } + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: build) + end + let(:package2) { create(:package_model, app_guid: app_model.guid) } + let(:build2) { create(:build_model, package: package2, app: app_model) } let!(:droplet2) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package2.guid, - build: build2 - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package2.guid, + build: build2) end it 'eager loads associated resources that the presenter specifies' do @@ -167,17 +165,16 @@ end describe '#create' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { set_current_user(create(:user)) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:stack) { VCAP::CloudController::Stack.default.name } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } let(:package) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::PackageModel::READY_STATE, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + state: VCAP::CloudController::PackageModel::READY_STATE, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end let(:stagers) { instance_double(VCAP::CloudController::Stagers) } let(:stager) { double(:stager, stage: nil) } @@ -265,7 +262,7 @@ end describe 'buildpack lifecycle' do - let(:buildpack) { VCAP::CloudController::Buildpack.make(stack:) } + let(:buildpack) { create(:buildpack, stack:) } let(:buildpack_request) { 'http://dan-and-zach-awesome-pack.com' } let(:buildpack_lifecycle) do { @@ -392,12 +389,12 @@ end describe 'docker lifecycle' do - let(:docker_app_model) { VCAP::CloudController::AppModel.make(:docker, space:) } + let(:docker_app_model) { create(:app_model, :docker, space:) } let(:package) do - VCAP::CloudController::PackageModel.make(:docker, - app_guid: docker_app_model.guid, - type: VCAP::CloudController::PackageModel::DOCKER_TYPE, - state: VCAP::CloudController::PackageModel::READY_STATE) + create(:package_model, :docker, + app_guid: docker_app_model.guid, + type: VCAP::CloudController::PackageModel::DOCKER_TYPE, + state: VCAP::CloudController::PackageModel::READY_STATE) end let(:docker_lifecycle) do @@ -419,7 +416,7 @@ context 'when diego_docker is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'returns a 201 Created response and creates a build model with an associated package' do @@ -447,7 +444,7 @@ context 'when diego_docker feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: false, error_message: nil) end it 'raises 403' do @@ -461,12 +458,12 @@ end describe 'cnb lifecycle' do - let(:cnb_app_model) { VCAP::CloudController::AppModel.make(:cnb, space:) } + let(:cnb_app_model) { create(:app_model, :cnb, space:) } let(:package) do - VCAP::CloudController::PackageModel.make(:cnb, - app_guid: cnb_app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE, - state: VCAP::CloudController::PackageModel::READY_STATE) + create(:package_model, :cnb, + app_guid: cnb_app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE, + state: VCAP::CloudController::PackageModel::READY_STATE) end let(:cnb_lifecycle) do @@ -488,7 +485,7 @@ context 'when diego_cnb is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_cnb', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_cnb', enabled: true, error_message: nil) end it 'returns a 201 Created response and creates a build model with an associated package' do @@ -516,7 +513,7 @@ context 'when diego_cnb feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_cnb', enabled: false, error_message: nil) + create(:feature_flag, name: 'diego_cnb', enabled: false, error_message: nil) end it 'raises 403' do @@ -749,19 +746,18 @@ end describe '#update' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:user) { set_current_user(create(:user)) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:stack) { VCAP::CloudController::Stack.default.name } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } let(:package) do - VCAP::CloudController::PackageModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::PackageModel::READY_STATE, - type: VCAP::CloudController::PackageModel::BITS_TYPE - ) + create(:package_model, + app_guid: app_model.guid, + state: VCAP::CloudController::PackageModel::READY_STATE, + type: VCAP::CloudController::PackageModel::BITS_TYPE) end - let(:build) { VCAP::CloudController::BuildModel.make(package: package, app: app_model) } + let(:build) { create(:build_model, package: package, app: app_model) } let(:new_labels) do { release: 'stable', @@ -857,7 +853,7 @@ end context 'permissions' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } context 'when the user cannot read the app' do before do @@ -892,18 +888,17 @@ end describe '#show' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:organization) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let(:build) { VCAP::CloudController::BuildModel.make(package: package, app: app_model) } + let(:user) { set_current_user(create(:user)) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } + let(:app_model) { create(:app_model, space:) } + let(:package) { create(:package_model, app_guid: app_model.guid) } + let(:build) { create(:build_model, package: package, app: app_model) } let!(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - build: build - ) + create(:droplet_model, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + build: build) end context 'with sufficient permissions' do @@ -975,7 +970,7 @@ context 'when the user does not have the read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'returns a 403 NotAuthorized error' do diff --git a/spec/unit/controllers/v3/deployments_controller_spec.rb b/spec/unit/controllers/v3/deployments_controller_spec.rb index 6179407742d..034ff91efdb 100644 --- a/spec/unit/controllers/v3/deployments_controller_spec.rb +++ b/spec/unit/controllers/v3/deployments_controller_spec.rb @@ -5,10 +5,10 @@ ## NOTICE: Prefer request specs over controller specs as per ADR #0003 ## RSpec.describe DeploymentsController, type: :controller do - let(:user) { VCAP::CloudController::User.make } - let(:app) { VCAP::CloudController::AppModel.make(desired_state: VCAP::CloudController::ProcessModel::STARTED) } - let!(:process_model) { VCAP::CloudController::ProcessModel.make(app:) } - let(:droplet) { VCAP::CloudController::DropletModel.make(app: app, process_types: { 'web' => 'spider' }) } + let(:user) { create(:user) } + let(:app) { create(:app_model, desired_state: VCAP::CloudController::ProcessModel::STARTED) } + let!(:process_model) { create(:process_model, app:) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'spider' }) } let(:app_guid) { app.guid } let(:space) { app.space } let(:org) { space.organization } @@ -57,10 +57,9 @@ context 'the app does not have a current droplet' do let(:app_without_droplet) do - VCAP::CloudController::AppModel.make( - desired_state: VCAP::CloudController::ProcessModel::STARTED, - space: space - ) + create(:app_model, + desired_state: VCAP::CloudController::ProcessModel::STARTED, + space: space) end let(:request_body) do @@ -86,7 +85,7 @@ end context 'when a droplet is provided' do - let(:other_droplet) { VCAP::CloudController::DropletModel.make(app: app, process_types: { web: 'start-me-up' }) } + let(:other_droplet) { create(:droplet_model, app: app, process_types: { web: 'start-me-up' }) } let(:request_body) do { droplet: { @@ -181,7 +180,7 @@ end context 'the droplet is not associated with the application' do - let(:unassociated_droplet) { VCAP::CloudController::DropletModel.make } + let(:unassociated_droplet) { create(:droplet_model) } let(:request_body) do { droplet: { @@ -243,12 +242,12 @@ end context 'when a revision is provided' do - let(:newer_droplet) { VCAP::CloudController::DropletModel.make(app: app, process_types: { 'web' => 'rackup' }) } + let(:newer_droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'rackup' }) } let!(:earlier_revision) do - VCAP::CloudController::RevisionModel.make(app: app, droplet_guid: droplet.guid, created_at: 5.days.ago, version: 2, description: 'earlier revision') + create(:revision_model, app: app, droplet_guid: droplet.guid, created_at: 5.days.ago, version: 2, description: 'earlier revision') end let!(:later_revision) do - VCAP::CloudController::RevisionModel.make(app: app, droplet_guid: newer_droplet.guid, version: 3, description: 'later revision') + create(:revision_model, app: app, droplet_guid: newer_droplet.guid, version: 3, description: 'later revision') end let(:request_body) do @@ -283,12 +282,12 @@ context 'when the provided revision specifies start commands' do let!(:earlier_revision) do - VCAP::CloudController::RevisionModel.make(:custom_web_command, - app: app, - droplet_guid: newer_droplet.guid, # same droplet as currently associated revision - created_at: 5.days.ago, - version: 2, - description: 'reassigned earlier_revision') + create(:revision_model, :custom_web_command, + app: app, + droplet_guid: newer_droplet.guid, # same droplet as currently associated revision + created_at: 5.days.ago, + version: 2, + description: 'reassigned earlier_revision') end it 'uses the process commands from the revision to create a new revision' do @@ -330,7 +329,7 @@ end context 'when both a revision and a droplet are provided' do - let!(:revision) { VCAP::CloudController::RevisionModel.make(app:) } + let!(:revision) { create(:revision_model, app:) } let(:request_body) do { droplet: { @@ -446,7 +445,7 @@ end describe '#show' do - let(:deployment) { VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app, droplet: droplet) } + let(:deployment) { create(:deployment_model, state: 'DEPLOYING', app: app, droplet: droplet) } describe 'for a valid user' do before do @@ -468,7 +467,7 @@ end context 'when the current droplet changes on the app' do - let(:new_droplet) { VCAP::CloudController::DropletModel.make } + let(:new_droplet) { create(:droplet_model) } it 'shows the droplet guid for the droplet the deployment was created with' do app.update(droplet: new_droplet) @@ -507,8 +506,8 @@ end describe '#index' do - let!(:deployment) { VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app) } - let!(:another_deployment) { VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app) } + let!(:deployment) { create(:deployment_model, state: 'DEPLOYING', app: app) } + let!(:another_deployment) { create(:deployment_model, state: 'DEPLOYING', app: app) } context 'permissions' do describe 'authorization' do @@ -621,8 +620,8 @@ context 'when querying by states' do let(:states_list) { 'DEPLOYED,CANCELED' } let(:params) { { states: states_list } } - let!(:deployed_deployment) { VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYED', app: app) } - let!(:canceled_deployment) { VCAP::CloudController::DeploymentModel.make(state: 'CANCELED', app: app) } + let!(:deployed_deployment) { create(:deployment_model, state: 'DEPLOYED', app: app) } + let!(:canceled_deployment) { create(:deployment_model, state: 'CANCELED', app: app) } it 'gets only the requested deployments' do get(:index, params:) @@ -644,11 +643,10 @@ describe '#cancel' do let!(:deployment) do - VCAP::CloudController::DeploymentModel.make( - state: 'DEPLOYING', - app: app, - previous_droplet: VCAP::CloudController::DropletModel.make(app: app, process_types: { 'web' => 'www' }) - ) + create(:deployment_model, + state: 'DEPLOYING', + app: app, + previous_droplet: create(:droplet_model, app: app, process_types: { 'web' => 'www' })) end before do @@ -701,8 +699,8 @@ end describe '#update' do - let(:deployment) { VCAP::CloudController::DeploymentModel.make(app:) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:deployment) { create(:deployment_model, app:) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) diff --git a/spec/unit/controllers/v3/droplets_controller_spec.rb b/spec/unit/controllers/v3/droplets_controller_spec.rb index 766d9263bf2..23905b845ef 100644 --- a/spec/unit/controllers/v3/droplets_controller_spec.rb +++ b/spec/unit/controllers/v3/droplets_controller_spec.rb @@ -4,13 +4,13 @@ RSpec.describe DropletsController, type: :controller do describe '#create' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:package) do - VCAP::CloudController::PackageModel.make(app_guid: app_model.guid, - type: VCAP::CloudController::PackageModel::BITS_TYPE, - state: VCAP::CloudController::PackageModel::READY_STATE) + create(:package_model, app_guid: app_model.guid, + type: VCAP::CloudController::PackageModel::BITS_TYPE, + state: VCAP::CloudController::PackageModel::READY_STATE) end - let(:user) { set_current_user(user: VCAP::CloudController::User.make(guid: '1234'), email: 'dr@otter.com', user_name: 'dropper') } + let(:user) { set_current_user(user: create(:user, guid: '1234'), email: 'dr@otter.com', user_name: 'dropper') } let(:space) { app_model.space } before do @@ -21,13 +21,13 @@ end describe '#copy' do - let(:source_space) { VCAP::CloudController::Space.make } - let(:target_space) { VCAP::CloudController::Space.make } - let(:target_app) { VCAP::CloudController::AppModel.make(space_guid: target_space.guid) } - let(:source_app_guid) { VCAP::CloudController::AppModel.make(space_guid: source_space.guid).guid } + let(:source_space) { create(:space) } + let(:target_space) { create(:space) } + let(:target_app) { create(:app_model, space_guid: target_space.guid) } + let(:source_app_guid) { create(:app_model, space_guid: source_space.guid).guid } let(:target_app_guid) { target_app.guid } let(:state) { 'STAGED' } - let!(:source_droplet) { VCAP::CloudController::DropletModel.make(state: state, app_guid: source_app_guid) } + let!(:source_droplet) { create(:droplet_model, state: state, app_guid: source_app_guid) } let(:source_droplet_guid) { source_droplet.guid } let(:request_body) do { @@ -36,7 +36,7 @@ } } end - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [source_space, target_space]) @@ -145,8 +145,8 @@ end describe '#show' do - let(:droplet) { VCAP::CloudController::DropletModel.make } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:droplet) { create(:droplet_model) } + let(:user) { set_current_user(create(:user)) } let(:space) { droplet.space } before do @@ -173,7 +173,7 @@ context 'permissions' do context 'when the user does not have the read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'returns a 403 NotAuthorized error' do @@ -203,8 +203,8 @@ end describe '#destroy' do - let(:droplet) { VCAP::CloudController::DropletModel.make } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:droplet) { create(:droplet_model) } + let(:user) { set_current_user(create(:user)) } let(:space) { droplet.space } before do @@ -263,7 +263,7 @@ context 'permissions' do context 'when the user does not have write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'returns 403' do @@ -304,13 +304,13 @@ end describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:app) { VCAP::CloudController::AppModel.make } + let(:user) { set_current_user(create(:user)) } + let(:app) { create(:app_model) } let!(:space) { app.space } - let!(:user_droplet_1) { VCAP::CloudController::DropletModel.make(app_guid: app.guid) } - let!(:user_droplet_2) { VCAP::CloudController::DropletModel.make(app_guid: app.guid) } - let!(:staging_droplet) { VCAP::CloudController::DropletModel.make(app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGING_STATE) } - let!(:admin_droplet) { VCAP::CloudController::DropletModel.make } + let!(:user_droplet_1) { create(:droplet_model, app_guid: app.guid) } + let!(:user_droplet_2) { create(:droplet_model, app_guid: app.guid) } + let!(:staging_droplet) { create(:droplet_model, app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGING_STATE) } + let!(:admin_droplet) { create(:droplet_model) } before do allow_user_read_access_for(user, spaces: [space]) @@ -318,10 +318,10 @@ context 'accessed as an app subresource' do it 'returns droplets for the app' do - app = VCAP::CloudController::AppModel.make(space:) - droplet_1 = VCAP::CloudController::DropletModel.make(app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) - droplet_2 = VCAP::CloudController::DropletModel.make(app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) - VCAP::CloudController::DropletModel.make + app = create(:app_model, space:) + droplet_1 = create(:droplet_model, app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) + droplet_2 = create(:droplet_model, app_guid: app.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) + create(:droplet_model) get :index, params: { app_guid: app.guid } @@ -360,8 +360,8 @@ end context 'accessed as a package subresource' do - let(:package) { VCAP::CloudController::PackageModel.make(app_guid: app.guid) } - let!(:droplet_1) { VCAP::CloudController::DropletModel.make(package_guid: package.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:package) { create(:package_model, app_guid: app.guid) } + let!(:droplet_1) { create(:droplet_model, package_guid: package.guid, state: VCAP::CloudController::DropletModel::STAGED_STATE) } it 'returns droplets for the package' do get :index, params: { package_guid: package.guid } @@ -442,7 +442,7 @@ context 'permissions' do context 'when the user does not have read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) disallow_user_global_read_access(user) end @@ -471,8 +471,8 @@ end describe '#update' do - let(:droplet) { VCAP::CloudController::DropletModel.make } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:droplet) { create(:droplet_model) } + let(:user) { set_current_user(create(:user)) } let(:space) { droplet.space } before do @@ -498,7 +498,7 @@ context 'permissions' do context 'when the user does not have write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'returns 403' do diff --git a/spec/unit/controllers/v3/feature_flags_controller_spec.rb b/spec/unit/controllers/v3/feature_flags_controller_spec.rb index 83089012949..4c44bc5bb4e 100644 --- a/spec/unit/controllers/v3/feature_flags_controller_spec.rb +++ b/spec/unit/controllers/v3/feature_flags_controller_spec.rb @@ -4,7 +4,7 @@ RSpec.describe FeatureFlagsController, type: :controller do describe '#index' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:flag_defaults) { VCAP::CloudController::FeatureFlag::DEFAULT_FLAGS } let(:flag_names_sorted) { flag_defaults.keys.sort.map(&:to_s) } @@ -49,7 +49,7 @@ context 'when there are overrides from the database' do let!(:updated_feature_flag) do - VCAP::CloudController::FeatureFlag.make(name: feature_flag_key, enabled: true, error_message: 'some_custom_message') + create(:feature_flag, name: feature_flag_key, enabled: true, error_message: 'some_custom_message') end it 'returns the flags with their overridden for enabled where needed' do @@ -83,7 +83,7 @@ end describe '#show' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do stub_const('VCAP::CloudController::FeatureFlag::DEFAULT_FLAGS', { @@ -103,7 +103,7 @@ end context 'when there are overrides' do - before { VCAP::CloudController::FeatureFlag.make(name: 'flag1', enabled: true, error_message: nil) } + before { create(:feature_flag, name: 'flag1', enabled: true, error_message: nil) } it 'returns the overridden value' do get :show, params: { name: 'flag1' } @@ -125,7 +125,7 @@ end describe '#update' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:feature_flag_name) { 'flag1' } before do diff --git a/spec/unit/controllers/v3/isolation_segments_controller_spec.rb b/spec/unit/controllers/v3/isolation_segments_controller_spec.rb index 5157df9ca29..4ca55339516 100644 --- a/spec/unit/controllers/v3/isolation_segments_controller_spec.rb +++ b/spec/unit/controllers/v3/isolation_segments_controller_spec.rb @@ -4,12 +4,12 @@ ## NOTICE: Prefer request specs over controller specs as per ADR #0003 ## RSpec.describe IsolationSegmentsController, type: :controller do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:org3) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org1) } + let(:user) { set_current_user(create(:user)) } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:org3) { create(:organization) } + let(:space) { create(:space, organization: org1) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } @@ -89,9 +89,9 @@ end describe '#relationships_spaces' do - let(:space1) { VCAP::CloudController::Space.make(organization: org1) } - let(:space2) { VCAP::CloudController::Space.make(organization: org2) } - let(:space3) { VCAP::CloudController::Space.make(organization: org1) } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } + let(:space3) { create(:space, organization: org1) } context 'when the segment has not been associated with spaces' do context 'when the user does not have read access for isolation segment' do @@ -148,9 +148,9 @@ end describe '#assign_allowed_organizations' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } let(:request_body) do { @@ -260,9 +260,9 @@ end describe '#unassign_allowed_organization' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:org) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:org) { create(:organization) } + let(:org_2) { create(:organization) } context 'when the user is an admin' do before do @@ -357,7 +357,7 @@ context 'when the requested name is a duplicate' do it 'returns a 422' do - VCAP::CloudController::IsolationSegmentModel.make(name: 'some-name') + create(:isolation_segment_model, name: 'some-name') post :create, params: request_body expect(response).to have_http_status :unprocessable_content @@ -378,7 +378,7 @@ end describe '#show' do - let!(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'some-name') } + let!(:isolation_segment) { create(:isolation_segment_model, name: 'some-name') } context 'when the user has global read access' do before do @@ -447,7 +447,7 @@ end describe '#index' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } before do set_current_user_as_role(user: user, role: 'space_auditor', space: space, org: space.organization) @@ -503,8 +503,8 @@ end context 'when valid' do - let!(:isolation_segment_a) { VCAP::CloudController::IsolationSegmentModel.make(name: 'a-segment') } - let!(:isolation_segment_b) { VCAP::CloudController::IsolationSegmentModel.make(name: 'b-segment') } + let!(:isolation_segment_a) { create(:isolation_segment_model, name: 'a-segment') } + let!(:isolation_segment_b) { create(:isolation_segment_model, name: 'b-segment') } it 'returns a 200 and a list of the existing isolation segments' do get :index, params: { order_by: 'name' }, as: :json @@ -519,7 +519,7 @@ end describe '#update' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make(name: 'orig-name') } + let(:isolation_segment_model) { create(:isolation_segment_model, name: 'orig-name') } let(:new_name) { 'new-name' } let(:request_body) { { name: new_name } } @@ -539,7 +539,7 @@ end context 'with a non-unique name' do - let(:another_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'i_am_unique') } + let(:another_segment) { create(:isolation_segment_model, name: 'i_am_unique') } let(:request_body) { { name: another_segment.name } } it 'returns a 422' do @@ -550,7 +550,7 @@ end context 'with an empty name' do - let(:another_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'name') } + let(:another_segment) { create(:isolation_segment_model, name: 'name') } let(:request_body) { { name: '' } } it 'returns a 422' do @@ -592,8 +592,8 @@ end describe '#destroy' do - let(:isolation_segment_model1) { VCAP::CloudController::IsolationSegmentModel.make } - let(:isolation_segment_model2) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model1) { create(:isolation_segment_model) } + let(:isolation_segment_model2) { create(:isolation_segment_model) } context 'when the user is admin' do before do @@ -627,7 +627,7 @@ end context 'when isolation segment has metadata' do - let!(:label) { VCAP::CloudController::IsolationSegmentAnnotationModel.make(key_name: 'string', value: 'string2', resource_guid: isolation_segment_model1.guid) } + let!(:label) { create(:isolation_segment_annotation_model, key_name: 'string', value: 'string2', resource_guid: isolation_segment_model1.guid) } it 'returns a 204 and deletes only the specified isolation segment' do delete :destroy, params: { guid: isolation_segment_model1.guid }, as: :json diff --git a/spec/unit/controllers/v3/jobs_controller_spec.rb b/spec/unit/controllers/v3/jobs_controller_spec.rb index a777461a831..f4816749478 100644 --- a/spec/unit/controllers/v3/jobs_controller_spec.rb +++ b/spec/unit/controllers/v3/jobs_controller_spec.rb @@ -4,8 +4,8 @@ RSpec.describe V3::JobsController, type: :controller do describe '#show' do - let!(:job) { VCAP::CloudController::PollableJobModel.make(resource_type: 'app') } - let(:user) { VCAP::CloudController::User.make } + let!(:job) { create(:pollable_job_model, resource_type: 'app') } + let(:user) { create(:user) } before do set_current_user(user, scopes: ['cloud_controller.read']) diff --git a/spec/unit/controllers/v3/organizations_controller_spec.rb b/spec/unit/controllers/v3/organizations_controller_spec.rb index 94a025704e3..85d784d0cd3 100644 --- a/spec/unit/controllers/v3/organizations_controller_spec.rb +++ b/spec/unit/controllers/v3/organizations_controller_spec.rb @@ -5,7 +5,7 @@ RSpec.describe OrganizationsV3Controller, type: :controller do describe '#create' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:uaa_client) { instance_double(VCAP::CloudController::UaaClient) } before do @@ -53,7 +53,7 @@ context 'when "user_org_creation" feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'user_org_creation', enabled: true) + create(:feature_flag, name: 'user_org_creation', enabled: true) end it 'lets ALL users create orgs' do @@ -92,7 +92,7 @@ let(:name) { 'not-unique' } before do - VCAP::CloudController::Organization.make name: + create(:organization, name:) end it 'responds with 422' do @@ -126,13 +126,13 @@ end describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } - let!(:member_org) { VCAP::CloudController::Organization.make(name: 'Marmot') } - let!(:manager_org) { VCAP::CloudController::Organization.make(name: 'Rat') } - let!(:billing_manager_org) { VCAP::CloudController::Organization.make(name: 'Beaver') } - let!(:auditor_org) { VCAP::CloudController::Organization.make(name: 'Capybara') } - let!(:other_org) { VCAP::CloudController::Organization.make(name: 'Groundhog') } + let!(:member_org) { create(:organization, name: 'Marmot') } + let!(:manager_org) { create(:organization, name: 'Rat') } + let!(:billing_manager_org) { create(:organization, name: 'Beaver') } + let!(:auditor_org) { create(:organization, name: 'Capybara') } + let!(:other_org) { create(:organization, name: 'Groundhog') } before do member_org.add_user(user) @@ -220,13 +220,13 @@ context 'when accessed as an isolation segment subresource' do let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:org3) { VCAP::CloudController::Organization.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:org3) { create(:organization) } before do - VCAP::CloudController::Organization.make + create(:organization) assigner.assign(isolation_segment_model, [org1, org2]) org1.add_user(user) org2.add_user(user) @@ -286,7 +286,7 @@ end context 'when the isolation segment organizations contains organizations the user cannot see' do - let(:org4) { VCAP::CloudController::Organization.make } + let(:org4) { create(:organization) } before do assigner.assign(isolation_segment_model, [org4]) @@ -304,9 +304,9 @@ end describe '#show_default_isolation_segment' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make(name: 'Water') } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'default_seg') } + let(:user) { create(:user) } + let(:org) { create(:organization, name: 'Water') } + let(:isolation_segment) { create(:isolation_segment_model, name: 'default_seg') } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } let(:unassigner) { VCAP::CloudController::IsolationSegmentUnassign.new } @@ -384,9 +384,9 @@ end describe '#update_default_isolation_segment' do - let(:user) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make(name: 'Water') } - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make(name: 'default_seg') } + let(:user) { create(:user) } + let(:org) { create(:organization, name: 'Water') } + let(:isolation_segment) { create(:isolation_segment_model, name: 'default_seg') } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } let(:unassigner) { VCAP::CloudController::IsolationSegmentUnassign.new } let(:request_body) do @@ -436,7 +436,7 @@ end context 'when the requested isolation segment has not been entitled to the org' do - let(:org2) { VCAP::CloudController::Organization.make } + let(:org2) { create(:organization) } before do allow_user_read_access_for(user, orgs: [org2]) @@ -545,8 +545,8 @@ end context 'when the org is suspended' do - let(:org) { VCAP::CloudController::Organization.make(name: 'Water') } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization, name: 'Water') } + let(:space) { create(:space, organization: org) } before do org.update(status: VCAP::CloudController::Organization::SUSPENDED) @@ -572,7 +572,7 @@ end describe '#update' do - let(:org) { VCAP::CloudController::Organization.make(name: 'Water') } + let(:org) { create(:organization, name: 'Water') } let(:labels) do { fruit: 'pineapple', @@ -585,8 +585,8 @@ beet: 'golden' } end - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:user) { VCAP::CloudController::User.make } + let(:space) { create(:space, organization: org) } + let(:user) { create(:user) } let(:request_body) do { name: 'Fire', diff --git a/spec/unit/controllers/v3/packages_controller_spec.rb b/spec/unit/controllers/v3/packages_controller_spec.rb index 2537f217969..fa656c80b84 100644 --- a/spec/unit/controllers/v3/packages_controller_spec.rb +++ b/spec/unit/controllers/v3/packages_controller_spec.rb @@ -5,12 +5,12 @@ RSpec.describe PackagesController, type: :controller do describe '#upload' do - let(:package) { VCAP::CloudController::PackageModel.make } + let(:package) { create(:package_model) } let(:space) { package.space } let(:org) { space.organization } let(:params) { { 'bits_path' => 'path/to/bits' } } let(:form_headers) { { 'CONTENT_TYPE' => 'application/x-www-form-urlencoded' } } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do @request.env.merge!(form_headers) @@ -107,7 +107,7 @@ context 'when app_bits_upload is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'app_bits_upload', enabled: false, error_message: nil) + create(:feature_flag, name: 'app_bits_upload', enabled: false, error_message: nil) end context 'non-admin user' do @@ -239,10 +239,10 @@ end describe '#download' do - let(:package) { VCAP::CloudController::PackageModel.make(state: 'READY') } + let(:package) { create(:package_model, state: 'READY') } let(:space) { package.space } let(:org) { space.organization } - let(:user) { set_current_user(VCAP::CloudController::User.make, email: 'utako') } + let(:user) { set_current_user(create(:user), email: 'utako') } before do blob = instance_double(CloudController::Blobstore::FogBlob, public_download_url: 'http://package.example.com') @@ -299,7 +299,7 @@ context 'permissions' do context 'user does not have read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.write']) + set_current_user(create(:user), scopes: ['cloud_controller.write']) end it 'returns an Unauthorized error' do @@ -339,9 +339,9 @@ end describe '#show' do - let(:package) { VCAP::CloudController::PackageModel.make } + let(:package) { create(:package_model) } let(:space) { package.space } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -394,12 +394,12 @@ end describe '#update' do - let!(:org) { VCAP::CloudController::Organization.make(name: "Harold's Farm") } - let!(:space) { VCAP::CloudController::Space.make(name: 'roosters', organization: org) } - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'needed to put the package in the space', space: space) } - let(:package) { VCAP::CloudController::PackageModel.make(app: app_model) } + let!(:org) { create(:organization, name: "Harold's Farm") } + let!(:space) { create(:space, name: 'roosters', organization: org) } + let(:app_model) { create(:app_model, name: 'needed to put the package in the space', space: space) } + let(:package) { create(:package_model, app: app_model) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } let(:labels) do { fruit: 'pears', @@ -653,7 +653,7 @@ end context 'permissions' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } context 'when the user cannot read the app' do before do @@ -686,8 +686,8 @@ end describe '#destroy' do - let(:package) { VCAP::CloudController::PackageModel.make } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:package) { create(:package_model) } + let(:user) { set_current_user(create(:user)) } let(:space) { package.space } let(:package_delete_stub) { instance_double(VCAP::CloudController::PackageDelete) } @@ -783,16 +783,16 @@ end describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:user) { set_current_user(create(:user)) } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } - let(:space1) { VCAP::CloudController::Space.make } - let(:space2) { VCAP::CloudController::Space.make } - let(:space3) { VCAP::CloudController::Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:user_spaces) { [space, space1, space2, space3] } - let!(:user_package_1) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let!(:user_package_2) { VCAP::CloudController::PackageModel.make(app_guid: app_model.guid) } - let!(:admin_package) { VCAP::CloudController::PackageModel.make } + let!(:user_package_1) { create(:package_model, app_guid: app_model.guid) } + let!(:user_package_2) { create(:package_model, app_guid: app_model.guid) } + let!(:admin_package) { create(:package_model) } before do allow_user_read_access_for(user, spaces: user_spaces) @@ -817,10 +817,10 @@ context 'when accessed as an app subresource' do it 'uses the app as a filter' do - app = VCAP::CloudController::AppModel.make(space:) - package_1 = VCAP::CloudController::PackageModel.make(app_guid: app.guid) - package_2 = VCAP::CloudController::PackageModel.make(app_guid: app.guid) - VCAP::CloudController::PackageModel.make + app = create(:app_model, space:) + package_1 = create(:package_model, app_guid: app.guid) + package_2 = create(:package_model, app_guid: app.guid) + create(:package_model) get :index, params: { app_guid: app.guid } @@ -830,7 +830,7 @@ end it "doesn't allow filtering on space_guids in a nested query" do - app = VCAP::CloudController::AppModel.make(space: space, guid: 'speshal-app-guid') + app = create(:app_model, space: space, guid: 'speshal-app-guid') get :index, params: { app_guid: app.guid, page: 1, per_page: 10, states: 'AWAITING_UPLOAD', space_guids: user_spaces.map(&:guid).join(',') } @@ -840,10 +840,10 @@ end it 'uses the app and pagination as query parameters' do - app = VCAP::CloudController::AppModel.make(space: space, guid: 'speshal-app-guid') - package_1 = VCAP::CloudController::PackageModel.make(app_guid: app.guid, guid: 'package-1') - package_2 = VCAP::CloudController::PackageModel.make(app_guid: app.guid, guid: 'package-2') - VCAP::CloudController::PackageModel.make + app = create(:app_model, space: space, guid: 'speshal-app-guid') + package_1 = create(:package_model, app_guid: app.guid, guid: 'package-1') + package_2 = create(:package_model, app_guid: app.guid, guid: 'package-2') + create(:package_model) get :index, params: { app_guids: app.guid, page: 1, per_page: 10, states: 'AWAITING_UPLOAD' } @@ -946,7 +946,7 @@ context 'when the user does not have the read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'returns a 403 NotAuthorized error' do @@ -961,7 +961,7 @@ describe '#create' do context 'when creating a new package' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:app_guid) { app_model.guid } let(:space) { app_model.space } let(:org) { space.organization } @@ -971,7 +971,7 @@ relationships: { app: { data: { guid: app_guid } } } } end - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -1034,7 +1034,7 @@ end context 'when the existing app is a Docker app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } it 'returns 422' do post :create, params: request_body, as: :json @@ -1088,7 +1088,7 @@ end context 'docker' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } let(:image) { 'registry/image:latest' } let(:docker_username) { 'naruto' } let(:docker_password) { 'oturan' } @@ -1119,7 +1119,7 @@ end context 'when the existing app is a buildpack app' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } it 'returns 422' do post :create, params: request_body, as: :json @@ -1203,10 +1203,10 @@ end context 'when copying an existing package' do - let(:source_app_model) { VCAP::CloudController::AppModel.make } - let(:original_package) { VCAP::CloudController::PackageModel.make(type: 'bits', app_guid: source_app_model.guid) } - let(:target_app_model) { VCAP::CloudController::AppModel.make } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:source_app_model) { create(:app_model) } + let(:original_package) { create(:package_model, type: 'bits', app_guid: source_app_model.guid) } + let(:target_app_model) { create(:app_model) } + let(:user) { set_current_user(create(:user)) } let(:source_space) { source_app_model.space } let(:destination_space) { target_app_model.space } let(:relationship_request_body) { { relationships: { app: { data: { guid: target_app_model.guid } } } } } @@ -1233,7 +1233,7 @@ context 'permissions' do context 'when the user does not have write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'returns a 403 NotAuthorized error' do diff --git a/spec/unit/controllers/v3/processes_controller_spec.rb b/spec/unit/controllers/v3/processes_controller_spec.rb index 00238cbf417..09e8071231b 100644 --- a/spec/unit/controllers/v3/processes_controller_spec.rb +++ b/spec/unit/controllers/v3/processes_controller_spec.rb @@ -3,11 +3,11 @@ ## NOTICE: Prefer request specs over controller specs as per ADR #0003 ## RSpec.describe ProcessesController, type: :controller do - let(:space) { VCAP::CloudController::Space.make } - let(:app) { VCAP::CloudController::AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -36,8 +36,8 @@ let(:params) { { 'page' => page, 'per_page' => per_page, app_guid: app.guid } } it 'paginates the response' do - VCAP::CloudController::ProcessModel.make(:process, app:) - VCAP::CloudController::ProcessModel.make(:process, app:) + create(:process_model, :process, app:) + create(:process_model, :process, app:) get(:index, params:) @@ -73,7 +73,7 @@ context 'when the user does not have read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.write']) + set_current_user(create(:user), scopes: ['cloud_controller.write']) end it 'returns 403 NotAuthorized' do @@ -85,9 +85,9 @@ end context 'admin types' do - let!(:process1) { VCAP::CloudController::ProcessModel.make(app: app, type: 'salt') } - let!(:process2) { VCAP::CloudController::ProcessModel.make(app: app, type: 'peppa') } - let!(:process3) { VCAP::CloudController::ProcessModel.make } + let!(:process1) { create(:process_model, app: app, type: 'salt') } + let!(:process2) { create(:process_model, app: app, type: 'peppa') } + let!(:process3) { create(:process_model) } context 'when the user has global read access' do before { allow_user_global_read_access(user) } @@ -153,8 +153,8 @@ end describe '#show' do - let(:process_type) { VCAP::CloudController::ProcessModel.make(app:) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:process_type) { create(:process_model, app:) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -169,9 +169,9 @@ end context 'accessed as an app sub resource' do - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let!(:process_type) { VCAP::CloudController::ProcessModel.make(:process, app:) } - let!(:process_type2) { VCAP::CloudController::ProcessModel.make(:process, app:) } + let(:app) { create(:app_model, space:) } + let!(:process_type) { create(:process_model, :process, app:) } + let!(:process_type2) { create(:process_model, :process, app:) } it 'returns a 200 and the process' do get :show, params: { type: process_type.type, app_guid: app.guid } @@ -182,8 +182,8 @@ context 'when the requested process does not belong to the provided app guid' do it 'returns a 404' do - other_app = VCAP::CloudController::AppModel.make - other_process = VCAP::CloudController::ProcessModel.make(app: other_app, type: 'potato') + other_app = create(:app_model) + other_process = create(:process_model, app: other_app, type: 'potato') get :show, params: { type: other_process.type, app_guid: app.guid } @@ -257,14 +257,14 @@ end describe '#update' do - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:process_type) { VCAP::CloudController::ProcessModel.make(:process, app:) } + let(:app) { create(:app_model, space:) } + let(:process_type) { create(:process_model, :process, app:) } let(:request_body) do { 'command' => 'new command' } end - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -282,9 +282,9 @@ end context 'accessed as an app sub resource' do - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let!(:process_type) { VCAP::CloudController::ProcessModel.make(:process, app:) } - let!(:process_type2) { VCAP::CloudController::ProcessModel.make(:process, app:) } + let(:app) { create(:app_model, space:) } + let!(:process_type) { create(:process_model, :process, app:) } + let!(:process_type2) { create(:process_model, :process, app:) } it 'updates the process and returns the correct things' do expect(process_type.command).not_to eq('new command') @@ -298,8 +298,8 @@ context 'when the requested process does not belong to the provided app guid' do it 'returns a 404' do - other_app = VCAP::CloudController::AppModel.make - other_process = VCAP::CloudController::ProcessModel.make(app: other_app, type: 'potato') + other_app = create(:app_model) + other_process = create(:process_model, app: other_app, type: 'potato') patch :update, params: { app_guid: app.guid, type: other_process.type }.merge(request_body), as: :json @@ -371,11 +371,11 @@ context 'when the app is being deployed' do before do - VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app) + create(:deployment_model, state: 'DEPLOYING', app: app) end it 'succeeds if the process is not a web process' do - process = VCAP::CloudController::ProcessModel.make(:process, app: app, type: 'worker') + process = create(:process_model, :process, app: app, type: 'worker') patch :update, params: { process_guid: process.guid }.merge(request_body), as: :json @@ -383,7 +383,7 @@ end it 'raises 422 if the process is a web process' do - process = VCAP::CloudController::ProcessModel.make(:process, app: app, type: 'web') + process = create(:process_model, :process, app: app, type: 'web') patch :update, params: { process_guid: process.guid }.merge(request_body), as: :json @@ -394,10 +394,10 @@ end describe '#terminate' do - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:process_type) { VCAP::CloudController::ProcessModel.make(app:) } + let(:app) { create(:app_model, space:) } + let(:process_type) { create(:process_model, app:) } let(:index_stopper) { instance_double(VCAP::CloudController::IndexStopper) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } before do allow(index_stopper).to receive(:stop_index) @@ -516,9 +516,9 @@ describe '#scale' do let(:request_body) { { instances: 2, memory_in_mb: 100, disk_in_mb: 200 } } - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:process_type) { VCAP::CloudController::ProcessModel.make(app:) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:app) { create(:app_model, space:) } + let(:process_type) { create(:process_model, app:) } + let(:user) { set_current_user(create(:user)) } before do allow_user_read_access_for(user, spaces: [space]) @@ -631,7 +631,7 @@ end context 'when scaling is disabled' do - before { VCAP::CloudController::FeatureFlag.make(name: 'app_scaling', enabled: false, error_message: nil) } + before { create(:feature_flag, name: 'app_scaling', enabled: false, error_message: nil) } context 'non-admin user' do it 'raises 403' do @@ -678,11 +678,11 @@ context 'when the app is being deployed' do before do - VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app) + create(:deployment_model, state: 'DEPLOYING', app: app) end it 'succeeds if the process is not a web process' do - process = VCAP::CloudController::ProcessModel.make(:process, app: app, type: 'worker') + process = create(:process_model, :process, app: app, type: 'worker') put :scale, params: { process_guid: process.guid }.merge(request_body), as: :json @@ -690,7 +690,7 @@ end it 'raises 422 if the process is a web process' do - process = VCAP::CloudController::ProcessModel.make(:process, app: app, type: 'web') + process = create(:process_model, :process, app: app, type: 'web') put :scale, params: { process_guid: process.guid }.merge(request_body), as: :json @@ -741,11 +741,11 @@ end describe '#stats' do - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:process_type) { VCAP::CloudController::ProcessModel.make(:process, type: 'potato', app: app) } + let(:app) { create(:app_model, space:) } + let(:process_type) { create(:process_model, :process, type: 'potato', app: app) } let(:stats) { { 0 => { stats: { usage: {}, net_info: { ports: [] } } } } } let(:instances_reporters) { double(:instances_reporters) } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } let(:warnings) { [] } before do diff --git a/spec/unit/controllers/v3/resource_matches_controller_spec.rb b/spec/unit/controllers/v3/resource_matches_controller_spec.rb index a2df30fc97e..58d292cb3a3 100644 --- a/spec/unit/controllers/v3/resource_matches_controller_spec.rb +++ b/spec/unit/controllers/v3/resource_matches_controller_spec.rb @@ -7,7 +7,7 @@ describe '#create' do include_context 'resource pool' - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:req_body) do { resources: [ @@ -33,8 +33,8 @@ end describe 'permissions by role' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } role_to_expected_http_response = { 'admin' => 201, @@ -64,12 +64,12 @@ context 'when resource matching feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'app_bits_upload', enabled: false) + create(:feature_flag, name: 'app_bits_upload', enabled: false) end context 'when the user is not an admin' do before do - set_current_user(VCAP::CloudController::User.make) + set_current_user(create(:user)) end it 'raises FeatureDisabled' do @@ -94,7 +94,7 @@ context 'when resource matching feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'app_bits_upload', enabled: true) + create(:feature_flag, name: 'app_bits_upload', enabled: true) end context 'when no resources match' do diff --git a/spec/unit/controllers/v3/revisions_controller_spec.rb b/spec/unit/controllers/v3/revisions_controller_spec.rb index ecf62faf9d7..581dace83d4 100644 --- a/spec/unit/controllers/v3/revisions_controller_spec.rb +++ b/spec/unit/controllers/v3/revisions_controller_spec.rb @@ -5,11 +5,11 @@ RSpec.describe RevisionsController, type: :controller do describe '#show' do - let!(:droplet) { VCAP::CloudController::DropletModel.make(app: nil) } - let!(:app_model) { VCAP::CloudController::AppModel.make(droplet:) } + let!(:droplet) { create(:droplet_model, app: nil) } + let!(:app_model) { create(:app_model, droplet:) } let!(:space) { app_model.space } - let(:user) { VCAP::CloudController::User.make } - let!(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 808, droplet: droplet) } + let(:user) { create(:user) } + let!(:revision) { create(:revision_model, app: app_model, version: 808, droplet: droplet) } before do set_current_user(user) @@ -117,7 +117,7 @@ context 'permissions' do context 'when the user does not have cc read scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: []) + set_current_user(create(:user), scopes: []) end it 'raises an ApiError with a 403 code' do @@ -146,10 +146,10 @@ end describe '#update' do - let!(:droplet) { VCAP::CloudController::DropletModel.make } - let!(:app_model) { VCAP::CloudController::AppModel.make(droplet:) } + let!(:droplet) { create(:droplet_model) } + let!(:app_model) { create(:app_model, droplet:) } let!(:space) { app_model.space } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:labels) do { fruit: 'pears', @@ -162,7 +162,7 @@ beet: 'formanova' } end - let(:revision) { VCAP::CloudController::RevisionModel.make(app: app_model, version: 808, droplet_guid: droplet.guid) } + let(:revision) { create(:revision_model, app: app_model, version: 808, droplet_guid: droplet.guid) } let!(:update_message) do { metadata: { @@ -333,17 +333,16 @@ end describe '#show_environment_variables' do - let!(:droplet) { VCAP::CloudController::DropletModel.make } - let!(:app_model) { VCAP::CloudController::AppModel.make(droplet:) } + let!(:droplet) { create(:droplet_model) } + let!(:app_model) { create(:app_model, droplet:) } let!(:space) { app_model.space } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:revision) do - VCAP::CloudController::RevisionModel.make( - app: app_model, - version: 808, - droplet_guid: droplet.guid, - environment_variables: { 'key' => 'value' } - ) + create(:revision_model, + app: app_model, + version: 808, + droplet_guid: droplet.guid, + environment_variables: { 'key' => 'value' }) end before do diff --git a/spec/unit/controllers/v3/sidecars_controller_spec.rb b/spec/unit/controllers/v3/sidecars_controller_spec.rb index a9591af10aa..b90e5ee4401 100644 --- a/spec/unit/controllers/v3/sidecars_controller_spec.rb +++ b/spec/unit/controllers/v3/sidecars_controller_spec.rb @@ -4,10 +4,10 @@ ## NOTICE: Prefer request specs over controller specs as per ADR #0003 ## RSpec.describe SidecarsController, type: :controller do - let!(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:user) { VCAP::CloudController::User.make } - let!(:org) { VCAP::CloudController::Organization.make(name: "Lyle's Farm") } - let!(:space) { VCAP::CloudController::Space.make(name: 'Cat', organization: org) } + let!(:app_model) { create(:app_model, space:) } + let(:user) { create(:user) } + let!(:org) { create(:organization, name: "Lyle's Farm") } + let!(:space) { create(:space, name: 'Cat', organization: org) } before do set_current_user(user) @@ -15,7 +15,8 @@ describe 'index' do let!(:process1) do - VCAP::CloudController::ProcessModel.make( + create( + :process_model, :process, app: app_model, type: 'web' @@ -157,7 +158,7 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:new_user) { VCAP::CloudController::User.make } + let(:new_user) { create(:user) } before do set_current_user(new_user) @@ -176,7 +177,7 @@ describe 'when attempting to create a sidecar with duplicate name' do let(:sidecar_name) { 'my_sidecar' } - let!(:sidecar) { VCAP::CloudController::SidecarModel.make(name: 'my_sidecar', app: app_model) } + let!(:sidecar) { create(:sidecar_model, name: 'my_sidecar', app: app_model) } it 'returns 422' do post :create, params: sidecar_params, as: :json @@ -196,7 +197,7 @@ end describe '#update' do - let(:sidecar) { VCAP::CloudController::SidecarModel.make(app: app_model) } + let(:sidecar) { create(:sidecar_model, app: app_model) } let(:sidecar_params) do { guid: sidecar.guid, @@ -207,7 +208,7 @@ end describe 'permissions by role' do - let(:new_user) { VCAP::CloudController::User.make } + let(:new_user) { create(:user) } role_to_expected_http_response = { 'admin' => 200, @@ -239,7 +240,7 @@ end describe '#show' do - let(:sidecar) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar', command: 'smarch') } + let(:sidecar) { create(:sidecar_model, app: app_model, name: 'sidecar', command: 'smarch') } context 'the sidecar is not found' do it 'returns a 404' do @@ -268,7 +269,7 @@ end describe '#delete' do - let!(:sidecar) { VCAP::CloudController::SidecarModel.make(app: app_model, name: 'sidecar', command: 'smarch') } + let!(:sidecar) { create(:sidecar_model, app: app_model, name: 'sidecar', command: 'smarch') } context 'as a space developer' do before do diff --git a/spec/unit/controllers/v3/space_manifests_controller_spec.rb b/spec/unit/controllers/v3/space_manifests_controller_spec.rb index d4964572719..e15831ca1ee 100644 --- a/spec/unit/controllers/v3/space_manifests_controller_spec.rb +++ b/spec/unit/controllers/v3/space_manifests_controller_spec.rb @@ -5,10 +5,10 @@ RSpec.describe SpaceManifestsController, type: :controller do describe '#apply_manifest' do - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'blah') } + let(:app_model) { create(:app_model, name: 'blah') } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:app_apply_manifest_action) { instance_double(VCAP::CloudController::AppApplyManifest) } let(:request_body) { { 'applications' => [{ 'name' => app_model.name, 'instances' => 2 }] } } @@ -21,7 +21,7 @@ describe 'permissions' do context 'when the user cannot read from the space' do - let(:user_from_another_space) { VCAP::CloudController::User.make } + let(:user_from_another_space) { create(:user) } before do set_current_user(user_from_another_space) @@ -37,7 +37,7 @@ context 'when the user does not have .write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -208,7 +208,7 @@ def error_message(detail) end context 'when the request body includes a buildpack' do - let!(:php_buildpack) { VCAP::CloudController::Buildpack.make(name: 'php_buildpack') } + let!(:php_buildpack) { create(:buildpack, name: 'php_buildpack') } let(:request_body) do { 'applications' => [{ 'name' => 'blah', 'instances' => 4, 'buildpack' => 'php_buildpack' }] } @@ -248,7 +248,7 @@ def error_message(detail) end context 'for a docker app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, name: 'blah') } + let(:app_model) { create(:app_model, :docker, name: 'blah') } let(:request_body) do { 'applications' => [{ 'name' => app_model.name, 'buildpack' => 'php_buildpack' }] } @@ -271,7 +271,7 @@ def error_message(detail) end context 'when the request body includes buildpacks' do - let!(:php_buildpack) { VCAP::CloudController::Buildpack.make(name: 'php_buildpack') } + let!(:php_buildpack) { create(:buildpack, name: 'php_buildpack') } let(:request_body) do { 'applications' => [{ 'name' => 'blah', 'instances' => 4, 'buildpacks' => ['php_buildpack'] }] } @@ -292,7 +292,7 @@ def error_message(detail) end context 'for a docker app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, name: 'blah') } + let(:app_model) { create(:app_model, :docker, name: 'blah') } let(:request_body) do { 'applications' => [{ 'name' => app_model.name, 'buildpacks' => ['php_buildpack'] }] } @@ -344,11 +344,11 @@ def error_message(detail) end before do - VCAP::CloudController::FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end context 'for a docker app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:docker, name: 'blah') } + let(:app_model) { create(:app_model, :docker, name: 'blah') } it 'sets the docker image' do post :apply_manifest, params: { guid: space.guid }, body: request_body.to_yaml, as: :yaml @@ -366,7 +366,7 @@ def error_message(detail) end context 'for a buildpack app' do - let(:app_model) { VCAP::CloudController::AppModel.make(:buildppack, name: 'blah') } + let(:app_model) { create(:app_model, :buildpack, name: 'blah') } it 'returns an error' do post :apply_manifest, params: { guid: space.guid }, body: request_body.to_yaml, as: :yaml @@ -731,8 +731,8 @@ def error_message(detail) context 'when there are multiple apps' do context 'when the apps exist' do - let(:app1) { VCAP::CloudController::AppModel.make(name: 'honey', space: space) } - let(:app2) { VCAP::CloudController::AppModel.make(name: 'nut', space: space) } + let(:app1) { create(:app_model, name: 'honey', space: space) } + let(:app2) { create(:app_model, name: 'nut', space: space) } let(:request_body) do { 'applications' => [ { 'name' => app1.name, 'instances' => 2 }, diff --git a/spec/unit/controllers/v3/spaces_controller_spec.rb b/spec/unit/controllers/v3/spaces_controller_spec.rb index 5c83e206aa9..faac51ef5e5 100644 --- a/spec/unit/controllers/v3/spaces_controller_spec.rb +++ b/spec/unit/controllers/v3/spaces_controller_spec.rb @@ -5,10 +5,10 @@ RSpec.describe SpacesV3Controller, type: :controller do describe '#show' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } - let!(:org) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:space) { VCAP::CloudController::Space.make(name: 'Cat', organization: org) } + let!(:org) { create(:organization, name: 'Lyle\'s Farm') } + let!(:space) { create(:space, name: 'Cat', organization: org) } describe 'permissions by role' do before do @@ -50,13 +50,13 @@ end describe '#index' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } - let!(:org1) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:org2) { VCAP::CloudController::Organization.make(name: 'Greg\'s Ranch') } - let!(:org1_space) { VCAP::CloudController::Space.make(name: 'Alpaca', organization: org1) } - let!(:org1_other_space) { VCAP::CloudController::Space.make(name: 'Lamb', organization: org1) } - let!(:org2_space) { VCAP::CloudController::Space.make(name: 'Horse', organization: org2) } + let!(:org1) { create(:organization, name: 'Lyle\'s Farm') } + let!(:org2) { create(:organization, name: 'Greg\'s Ranch') } + let!(:org1_space) { create(:space, name: 'Alpaca', organization: org1) } + let!(:org1_other_space) { create(:space, name: 'Lamb', organization: org1) } + let!(:org2_space) { create(:space, name: 'Horse', organization: org2) } names_in_associated_org = %w[Alpaca Lamb] names_in_associated_space = %w[Alpaca] @@ -222,16 +222,14 @@ end before do - VCAP::CloudController::SpaceLabelModel.make( - key_name: 'jim', - value: 'stable', - resource_guid: org1_space.guid - ) - VCAP::CloudController::SpaceLabelModel.make( - key_name: 'hambone', - value: 'experimental', - resource_guid: org1_other_space.guid - ) + create(:space_label_model, + key_name: 'jim', + value: 'stable', + resource_guid: org1_space.guid) + create(:space_label_model, + key_name: 'hambone', + value: 'experimental', + resource_guid: org1_other_space.guid) end it 'returns the list of matching spaces' do @@ -271,32 +269,28 @@ describe 'order_by' do let!(:org1_space) do - VCAP::CloudController::Space.make( - name: 'Alpaca', - organization: org1, - created_at: Time.new(2017, 1, 3) - ) + create(:space, + name: 'Alpaca', + organization: org1, + created_at: Time.new(2017, 1, 3)) end let!(:org1_other_space) do - VCAP::CloudController::Space.make( - name: 'Lamb', - organization: org1, - created_at: Time.new(2017, 1, 2) - ) + create(:space, + name: 'Lamb', + organization: org1, + created_at: Time.new(2017, 1, 2)) end let!(:org1_third_space) do - VCAP::CloudController::Space.make( - name: 'Dog', - organization: org1, - created_at: Time.new(2017, 1, 4) - ) + create(:space, + name: 'Dog', + organization: org1, + created_at: Time.new(2017, 1, 4)) end let!(:org2_space) do - VCAP::CloudController::Space.make( - name: 'Horse', - organization: org2, - created_at: Time.new(2017, 1, 1) - ) + create(:space, + name: 'Horse', + organization: org2, + created_at: Time.new(2017, 1, 1)) end before do @@ -423,9 +417,9 @@ end describe '#create' do - let(:user) { VCAP::CloudController::User.make } - let(:user_without_role) { VCAP::CloudController::User.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:user) { create(:user) } + let(:user_without_role) { create(:user) } + let(:org) { create(:organization) } let(:name) { 'space1' } let(:org_guid) { org.guid } @@ -518,7 +512,7 @@ let(:name) { 'not-unique' } before do - VCAP::CloudController::Space.make name: name, organization: org + create(:space, name: name, organization: org) end it 'returns a 422 and a helpful error' do @@ -585,9 +579,9 @@ end describe '#patch' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let!(:org) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:space) { VCAP::CloudController::Space.make(name: 'Lamb', organization: org) } + let(:user) { set_current_user(create(:user)) } + let!(:org) { create(:organization, name: 'Lyle\'s Farm') } + let!(:space) { create(:space, name: 'Lamb', organization: org) } let(:labels) do { fruit: 'pineapple', @@ -819,15 +813,15 @@ end describe '#update_isolation_segment' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - - let!(:org1) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:org2) { VCAP::CloudController::Organization.make(name: 'Greg\'s Ranch') } - let!(:space1) { VCAP::CloudController::Space.make(name: 'Lamb', organization: org1) } - let!(:space2) { VCAP::CloudController::Space.make(name: 'Alpaca', organization: org1) } - let!(:space3) { VCAP::CloudController::Space.make(name: 'Horse', organization: org2) } - let!(:space4) { VCAP::CloudController::Space.make(name: 'Buffalo') } - let!(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:user) { set_current_user(create(:user)) } + + let!(:org1) { create(:organization, name: 'Lyle\'s Farm') } + let!(:org2) { create(:organization, name: 'Greg\'s Ranch') } + let!(:space1) { create(:space, name: 'Lamb', organization: org1) } + let!(:space2) { create(:space, name: 'Alpaca', organization: org1) } + let!(:space3) { create(:space, name: 'Horse', organization: org2) } + let!(:space4) { create(:space, name: 'Buffalo') } + let!(:isolation_segment_model) { create(:isolation_segment_model) } let!(:update_message) { { 'data' => { 'guid' => isolation_segment_model.guid } } } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } @@ -933,11 +927,11 @@ end describe '#show_isolation_segment' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } - let!(:org) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:space) { VCAP::CloudController::Space.make(name: 'Lamb', organization: org) } - let!(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let!(:org) { create(:organization, name: 'Lyle\'s Farm') } + let!(:space) { create(:space, name: 'Lamb', organization: org) } + let!(:isolation_segment_model) { create(:isolation_segment_model) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } context 'when the user does not have permissions to read from the space' do @@ -954,10 +948,10 @@ end describe '#show_usage_summary' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } - let!(:org) { VCAP::CloudController::Organization.make(name: 'Lyle\'s Farm') } - let!(:space) { VCAP::CloudController::Space.make(name: 'Chicken', organization: org) } + let!(:org) { create(:organization, name: 'Lyle\'s Farm') } + let!(:space) { create(:space, name: 'Chicken', organization: org) } context 'when the user has permissions to read from the space' do before { allow_user_read_access_for(user, orgs: [org], spaces: [space]) } diff --git a/spec/unit/controllers/v3/stacks_controller_spec.rb b/spec/unit/controllers/v3/stacks_controller_spec.rb index 3207abc02fe..75fdb9bb2f6 100644 --- a/spec/unit/controllers/v3/stacks_controller_spec.rb +++ b/spec/unit/controllers/v3/stacks_controller_spec.rb @@ -8,7 +8,7 @@ describe '#index' do before { VCAP::CloudController::Stack.dataset.destroy } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } describe 'permissions by role' do role_to_expected_http_response = { @@ -36,8 +36,8 @@ end context 'when the user is logged in' do - let!(:stack1) { VCAP::CloudController::Stack.make } - let!(:stack2) { VCAP::CloudController::Stack.make } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack) } before do set_current_user(user) @@ -70,7 +70,7 @@ end describe '#show' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } describe 'permissions by role' do role_to_expected_http_response = { @@ -103,7 +103,7 @@ end context 'when the stack exists' do - let!(:stack) { VCAP::CloudController::Stack.make } + let!(:stack) { create(:stack) } it 'renders a single stack details' do get :show, params: { guid: stack.guid } @@ -124,7 +124,7 @@ end describe '#create' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:req_body) do { name: 'the-name' } end @@ -180,13 +180,13 @@ end describe '#destroy' do - let(:user) { set_current_user(VCAP::CloudController::User.make) } - let(:stack) { VCAP::CloudController::Stack.make } + let(:user) { set_current_user(create(:user)) } + let(:stack) { create(:stack) } describe 'permissions' do context 'when the user does not have the write scope' do before do - set_current_user(VCAP::CloudController::User.make, scopes: ['cloud_controller.read']) + set_current_user(create(:user), scopes: ['cloud_controller.read']) end it 'raises an ApiError with a 403 code' do @@ -205,8 +205,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -232,8 +232,8 @@ role_to_expected_http_response.each do |role, expected_return_value| context "as an #{role}" do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } it "returns #{expected_return_value}" do set_current_user_as_role( @@ -305,10 +305,10 @@ end describe '#update' do - let!(:org) { VCAP::CloudController::Organization.make(name: "Harold's Farm") } - let!(:space) { VCAP::CloudController::Space.make(name: 'roosters', organization: org) } - let(:user) { VCAP::CloudController::User.make } - let(:stack) { VCAP::CloudController::Stack.make } + let!(:org) { create(:organization, name: "Harold's Farm") } + let!(:space) { create(:space, name: 'roosters', organization: org) } + let(:user) { create(:user) } + let(:stack) { create(:stack) } let(:labels) do { @@ -524,7 +524,7 @@ end context 'when changing state on the default stack' do - let!(:default_stack) { VCAP::CloudController::Stack.make(name: default_stack_name) } + let!(:default_stack) { create(:stack, name: default_stack_name) } it 'returns a warning header with the stack name' do patch :update, params: { guid: default_stack.guid, state: 'DEPRECATED' }, as: :json @@ -535,8 +535,8 @@ end context 'when changing state on a non-default stack' do - let!(:default_stack) { VCAP::CloudController::Stack.make(name: default_stack_name) } - let!(:other_stack) { VCAP::CloudController::Stack.make(name: 'other-stack') } + let!(:default_stack) { create(:stack, name: default_stack_name) } + let!(:other_stack) { create(:stack, name: 'other-stack') } it 'does not return a warning header' do patch :update, params: { guid: other_stack.guid, state: 'DEPRECATED' }, as: :json @@ -547,7 +547,7 @@ end context 'when updating metadata on the default stack without changing state' do - let!(:default_stack) { VCAP::CloudController::Stack.make(name: default_stack_name) } + let!(:default_stack) { create(:stack, name: default_stack_name) } it 'does not return a warning header' do patch :update, params: { guid: default_stack.guid, metadata: { labels: { foo: 'bar' } } }, as: :json diff --git a/spec/unit/controllers/v3/tasks_controller_spec.rb b/spec/unit/controllers/v3/tasks_controller_spec.rb index f2898362b1c..593597f2437 100644 --- a/spec/unit/controllers/v3/tasks_controller_spec.rb +++ b/spec/unit/controllers/v3/tasks_controller_spec.rb @@ -5,17 +5,16 @@ RSpec.describe TasksController, type: :controller do let(:client) { instance_double(VCAP::CloudController::Diego::BbsTaskClient, desire_task: nil) } let(:tasks_enabled) { true } - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:space) { app_model.space } let(:org) { space.organization } - let(:user) { set_current_user(VCAP::CloudController::User.make) } + let(:user) { set_current_user(create(:user)) } describe '#create' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - app_guid: app_model.guid, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, + app_guid: app_model.guid, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end let(:request_body) do @@ -29,7 +28,7 @@ before do allow_user_read_access_for(user, spaces: [space]) allow_user_write_access(user, space:) - VCAP::CloudController::FeatureFlag.make(name: 'task_creation', enabled: tasks_enabled, error_message: nil) + create(:feature_flag, name: 'task_creation', enabled: tasks_enabled, error_message: nil) app_model.droplet = droplet app_model.save @@ -312,8 +311,8 @@ context 'when a custom droplet guid is provided' do let(:custom_droplet) do - VCAP::CloudController::DropletModel.make(app_guid: app_model.guid, - state: VCAP::CloudController::DropletModel::STAGED_STATE) + create(:droplet_model, app_guid: app_model.guid, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end it 'successfully creates a task on the specifed droplet' do @@ -343,7 +342,7 @@ end context 'and the droplet does not belong to the app' do - let(:custom_droplet) { VCAP::CloudController::DropletModel.make(state: VCAP::CloudController::DropletModel::STAGED_STATE) } + let(:custom_droplet) { create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE) } it 'returns a 404' do post :create, params: { app_guid: app_model.guid }.merge( @@ -362,7 +361,7 @@ end describe '#show' do - let!(:task) { VCAP::CloudController::TaskModel.make name: 'mytask', app_guid: app_model.guid, memory_in_mb: 2048 } + let!(:task) { create(:task_model, name: 'mytask', app_guid: app_model.guid, memory_in_mb: 2048) } before do allow_user_read_access_for(user, spaces: [space]) @@ -434,9 +433,9 @@ end it 'returns tasks the user has read access' do - task_1 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - task_2 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - VCAP::CloudController::TaskModel.make + task_1 = create(:task_model, app_guid: app_model.guid) + task_2 = create(:task_model, app_guid: app_model.guid) + create(:task_model) get :index @@ -457,8 +456,8 @@ let(:params) { { 'page' => page, 'per_page' => per_page } } it 'paginates the response' do - VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) + create(:task_model, app_guid: app_model.guid) + create(:task_model, app_guid: app_model.guid) get(:index, params:) @@ -474,9 +473,9 @@ end it 'uses the app as a filter' do - task_1 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - task_2 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - VCAP::CloudController::TaskModel.make + task_1 = create(:task_model, app_guid: app_model.guid) + task_2 = create(:task_model, app_guid: app_model.guid) + create(:task_model) get :index, params: { app_guid: app_model.guid } @@ -497,7 +496,7 @@ end it 'excludes secrets' do - VCAP::CloudController::TaskModel.make(app: app_model) + create(:task_model, app: app_model) get :index, params: { app_guid: app_model.guid } @@ -548,9 +547,9 @@ end it 'returns a 200 and all tasks' do - task_1 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - task_2 = VCAP::CloudController::TaskModel.make(app_guid: app_model.guid) - task_3 = VCAP::CloudController::TaskModel.make + task_1 = create(:task_model, app_guid: app_model.guid) + task_2 = create(:task_model, app_guid: app_model.guid) + task_3 = create(:task_model) get :index @@ -586,7 +585,7 @@ end describe '#cancel' do - let!(:task) { VCAP::CloudController::TaskModel.make name: 'usher', app_guid: app_model.guid } + let!(:task) { create(:task_model, name: 'usher', app_guid: app_model.guid) } before do allow_user_read_access_for(user, spaces: [space]) @@ -658,7 +657,7 @@ end describe '#update' do - let(:task) { VCAP::CloudController::TaskModel.make(app: app_model) } + let(:task) { create(:task_model, app: app_model) } before do allow_user_read_access_for(user, spaces: [space]) diff --git a/spec/unit/decorators/field_service_instance_broker_decorator_spec.rb b/spec/unit/decorators/field_service_instance_broker_decorator_spec.rb index ce5d897b9af..827f127e882 100644 --- a/spec/unit/decorators/field_service_instance_broker_decorator_spec.rb +++ b/spec/unit/decorators/field_service_instance_broker_decorator_spec.rb @@ -5,16 +5,16 @@ module VCAP::CloudController RSpec.describe FieldServiceInstanceBrokerDecorator do describe '.decorate' do - let(:broker1) { ServiceBroker.make(created_at: Time.now.utc - 1.second) } + let(:broker1) { create(:service_broker, created_at: Time.now.utc - 1.second) } - let(:offering1) { Service.make(service_broker: broker1) } - let(:offering2) { Service.make } + let(:offering1) { create(:service, service_broker: broker1) } + let(:offering2) { create(:service) } - let(:plan1) { ServicePlan.make(service: offering1) } - let(:plan2) { ServicePlan.make(service: offering2) } + let(:plan1) { create(:service_plan, service: offering1) } + let(:plan2) { create(:service_plan, service: offering2) } - let(:service_instance_1) { ManagedServiceInstance.make(service_plan: plan1) } - let(:service_instance_2) { ManagedServiceInstance.make(service_plan: plan2) } + let(:service_instance_1) { create(:managed_service_instance, service_plan: plan1) } + let(:service_instance_2) { create(:managed_service_instance, service_plan: plan2) } it 'decorated the given hash with broker name from service instances' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } @@ -61,9 +61,9 @@ module VCAP::CloudController end context 'when instances are from the same broker' do - let(:offering3) { Service.make(service_broker: broker1) } - let(:plan3) { ServicePlan.make(service: offering3) } - let(:service_instance_3) { ManagedServiceInstance.make(service_plan: plan3) } + let(:offering3) { create(:service, service_broker: broker1) } + let(:plan3) { create(:service_plan, service: offering3) } + let(:service_instance_3) { create(:managed_service_instance, service_plan: plan3) } it 'does not duplicate the broker' do decorator = described_class.new({ 'service_plan.service_offering.service_broker': ['name'] }) @@ -73,7 +73,7 @@ module VCAP::CloudController end context 'for user provided service instances' do - let(:service_instance_3) { UserProvidedServiceInstance.make } + let(:service_instance_3) { create(:user_provided_service_instance) } it 'returns the unchanged hash' do undecorated_hash = { foo: 'bar' } diff --git a/spec/unit/decorators/field_service_instance_offering_decorator_spec.rb b/spec/unit/decorators/field_service_instance_offering_decorator_spec.rb index bd1b6069d52..9d727576af4 100644 --- a/spec/unit/decorators/field_service_instance_offering_decorator_spec.rb +++ b/spec/unit/decorators/field_service_instance_offering_decorator_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController RSpec.describe FieldServiceInstanceOfferingDecorator do describe '.decorate' do - let(:offering1) { Service.make(extra: '{"documentationUrl": "https://offering1.com"}', tags: %w[foo bar], created_at: Time.now.utc - 1.second) } - let(:offering2) { Service.make(extra: '{"documentationUrl": "https://offering2.com"}', tags: %w[baz]) } + let(:offering1) { create(:service, extra: '{"documentationUrl": "https://offering1.com"}', tags: %w[foo bar], created_at: Time.now.utc - 1.second) } + let(:offering2) { create(:service, extra: '{"documentationUrl": "https://offering2.com"}', tags: %w[baz]) } - let(:plan1) { ServicePlan.make(service: offering1) } - let(:plan2) { ServicePlan.make(service: offering2) } + let(:plan1) { create(:service_plan, service: offering1) } + let(:plan2) { create(:service_plan, service: offering2) } - let(:service_instance_1) { ManagedServiceInstance.make(service_plan: plan1) } - let(:service_instance_2) { ManagedServiceInstance.make(service_plan: plan2) } + let(:service_instance_1) { create(:managed_service_instance, service_plan: plan1) } + let(:service_instance_2) { create(:managed_service_instance, service_plan: plan2) } it 'can decorate with the service offering name' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } @@ -158,8 +158,8 @@ module VCAP::CloudController end context 'when instances are from the same offering' do - let(:plan3) { ServicePlan.make(service: offering1) } - let(:service_instance_3) { ManagedServiceInstance.make(service_plan: plan3) } + let(:plan3) { create(:service_plan, service: offering1) } + let(:service_instance_3) { create(:managed_service_instance, service_plan: plan3) } it 'does not duplicate the offering' do decorator = described_class.new({ 'service_plan.service_offering': ['name'] }) @@ -169,7 +169,7 @@ module VCAP::CloudController end context 'for user provided service instances' do - let(:service_instance_3) { UserProvidedServiceInstance.make } + let(:service_instance_3) { create(:user_provided_service_instance) } it 'returns the unchanged hash' do undecorated_hash = { foo: 'bar' } diff --git a/spec/unit/decorators/field_service_instance_organization_decorator_spec.rb b/spec/unit/decorators/field_service_instance_organization_decorator_spec.rb index 49b6fdf02eb..d6c1c50f9e8 100644 --- a/spec/unit/decorators/field_service_instance_organization_decorator_spec.rb +++ b/spec/unit/decorators/field_service_instance_organization_decorator_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController RSpec.describe FieldServiceInstanceOrganizationDecorator do describe '.decorate' do - let(:org1) { Organization.make(created_at: Time.now.utc - 1.second) } - let(:org2) { Organization.make } + let(:org1) { create(:organization, created_at: Time.now.utc - 1.second) } + let(:org2) { create(:organization) } - let(:space1) { Space.make(organization: org1) } - let(:space2) { Space.make(organization: org2) } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } - let(:service_instance_1) { ManagedServiceInstance.make(space: space1) } - let(:service_instance_2) { UserProvidedServiceInstance.make(space: space2) } + let(:service_instance_1) { create(:managed_service_instance, space: space1) } + let(:service_instance_2) { create(:user_provided_service_instance, space: space2) } before do allow(Permissions).to receive(:new).and_return(double(can_read_globally?: true)) @@ -63,8 +63,8 @@ module VCAP::CloudController end context 'when instances share an org' do - let(:space3) { Space.make(organization: org1) } - let(:service_instance_3) { ManagedServiceInstance.make(space: space3) } + let(:space3) { create(:space, organization: org1) } + let(:service_instance_3) { create(:managed_service_instance, space: space3) } it 'does not duplicate the org' do decorator = described_class.new({ 'space.organization': ['name'] }) diff --git a/spec/unit/decorators/field_service_instance_plan_decorator_spec.rb b/spec/unit/decorators/field_service_instance_plan_decorator_spec.rb index 6289fadb7c4..f5eed0b566b 100644 --- a/spec/unit/decorators/field_service_instance_plan_decorator_spec.rb +++ b/spec/unit/decorators/field_service_instance_plan_decorator_spec.rb @@ -5,11 +5,11 @@ module VCAP::CloudController RSpec.describe FieldServiceInstancePlanDecorator do describe '.decorate' do - let(:plan1) { ServicePlan.make(created_at: Time.now.utc - 1.second) } - let(:plan2) { ServicePlan.make } + let(:plan1) { create(:service_plan, created_at: Time.now.utc - 1.second) } + let(:plan2) { create(:service_plan) } - let(:service_instance_1) { ManagedServiceInstance.make(service_plan: plan1) } - let(:service_instance_2) { ManagedServiceInstance.make(service_plan: plan2) } + let(:service_instance_1) { create(:managed_service_instance, service_plan: plan1) } + let(:service_instance_2) { create(:managed_service_instance, service_plan: plan2) } it 'decorated the given hash with plan guid and name from service instances' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } @@ -70,7 +70,7 @@ module VCAP::CloudController end context 'when instances are from the same plan' do - let(:service_instance_3) { ManagedServiceInstance.make(service_plan: plan1) } + let(:service_instance_3) { create(:managed_service_instance, service_plan: plan1) } it 'does not duplicate the plan' do decorator = described_class.new({ service_plan: ['guid'] }) @@ -80,7 +80,7 @@ module VCAP::CloudController end context 'for user provided service instances' do - let(:service_instance_3) { UserProvidedServiceInstance.make } + let(:service_instance_3) { create(:user_provided_service_instance) } it 'returns the unchanged hash' do undecorated_hash = { foo: 'bar' } diff --git a/spec/unit/decorators/field_service_instance_space_decorator_spec.rb b/spec/unit/decorators/field_service_instance_space_decorator_spec.rb index c5995b2d93e..46c0472ac7b 100644 --- a/spec/unit/decorators/field_service_instance_space_decorator_spec.rb +++ b/spec/unit/decorators/field_service_instance_space_decorator_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController RSpec.describe FieldServiceInstanceSpaceDecorator do describe '.decorate' do - let(:org1) { Organization.make } - let(:org2) { Organization.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } - let(:space1) { Space.make(organization: org1, created_at: Time.now.utc - 1.second) } - let(:space2) { Space.make(organization: org2) } + let(:space1) { create(:space, organization: org1, created_at: Time.now.utc - 1.second) } + let(:space2) { create(:space, organization: org2) } - let(:service_instance_1) { ManagedServiceInstance.make(space: space1) } - let(:service_instance_2) { UserProvidedServiceInstance.make(space: space2) } + let(:service_instance_1) { create(:managed_service_instance, space: space1) } + let(:service_instance_2) { create(:user_provided_service_instance, space: space2) } before do allow(Permissions).to receive(:new).and_return(double(can_read_globally?: true)) @@ -141,7 +141,7 @@ module VCAP::CloudController context 'when instances share a space' do let(:decorator) { described_class.new({ space: ['guid'] }) } - let(:service_instance_3) { ManagedServiceInstance.make(space: space1) } + let(:service_instance_3) { create(:managed_service_instance, space: space1) } it 'does not duplicate the space' do hash = decorator.decorate({}, [service_instance_1, service_instance_3]) diff --git a/spec/unit/decorators/field_service_offering_service_broker_decorator_spec.rb b/spec/unit/decorators/field_service_offering_service_broker_decorator_spec.rb index ce4097c64d7..e41c26f8e73 100644 --- a/spec/unit/decorators/field_service_offering_service_broker_decorator_spec.rb +++ b/spec/unit/decorators/field_service_offering_service_broker_decorator_spec.rb @@ -5,10 +5,10 @@ module VCAP::CloudController RSpec.describe FieldServiceOfferingServiceBrokerDecorator do describe '.decorate' do - let(:broker1) { ServiceBroker.make(created_at: Time.now.utc - 1.second) } + let(:broker1) { create(:service_broker, created_at: Time.now.utc - 1.second) } - let(:offering1) { Service.make(service_broker: broker1) } - let(:offering2) { Service.make } + let(:offering1) { create(:service, service_broker: broker1) } + let(:offering2) { create(:service) } it 'decorated the given hash with broker name and guid' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } @@ -35,7 +35,7 @@ module VCAP::CloudController end context 'when offerings are from the same broker' do - let(:offering3) { Service.make(service_broker: offering1.service_broker) } + let(:offering3) { create(:service, service_broker: offering1.service_broker) } it 'does not duplicate the broker' do decorator = described_class.new({ service_broker: ['name'] }) diff --git a/spec/unit/decorators/field_service_plan_service_broker_decorator_spec.rb b/spec/unit/decorators/field_service_plan_service_broker_decorator_spec.rb index 79e1ea060b8..cb90a396bb1 100644 --- a/spec/unit/decorators/field_service_plan_service_broker_decorator_spec.rb +++ b/spec/unit/decorators/field_service_plan_service_broker_decorator_spec.rb @@ -5,13 +5,13 @@ module VCAP::CloudController RSpec.describe FieldServicePlanServiceBrokerDecorator do describe '.decorate' do - let(:broker1) { ServiceBroker.make(created_at: Time.now.utc - 1.second) } + let(:broker1) { create(:service_broker, created_at: Time.now.utc - 1.second) } - let(:offering1) { Service.make(service_broker: broker1) } - let(:offering2) { Service.make } + let(:offering1) { create(:service, service_broker: broker1) } + let(:offering2) { create(:service) } - let(:plan1) { ServicePlan.make(service: offering1) } - let(:plan2) { ServicePlan.make(service: offering2) } + let(:plan1) { create(:service_plan, service: offering1) } + let(:plan2) { create(:service_plan, service: offering2) } it 'decorated the given hash with broker name and guid' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } @@ -38,7 +38,7 @@ module VCAP::CloudController end context 'when plans are from the same broker' do - let(:plan3) { ServicePlan.make(service: offering1) } + let(:plan3) { create(:service_plan, service: offering1) } it 'does not duplicate the broker' do decorator = described_class.new({ 'service_offering.service_broker': ['name'] }) diff --git a/spec/unit/decorators/include_binding_app_decorator_spec.rb b/spec/unit/decorators/include_binding_app_decorator_spec.rb index e8dac7f8e03..59c0000e27d 100644 --- a/spec/unit/decorators/include_binding_app_decorator_spec.rb +++ b/spec/unit/decorators/include_binding_app_decorator_spec.rb @@ -8,12 +8,12 @@ module VCAP::CloudController context 'service bindings' do let!(:bindings) do - service_instance = ManagedServiceInstance.make - app = AppModel.make(space: service_instance.space, created_at: Time.now.utc - 1.second) + service_instance = create(:managed_service_instance) + app = create(:app_model, space: service_instance.space, created_at: Time.now.utc - 1.second) [ - ServiceBinding.make(service_instance:, app:), - ServiceBinding.make + create(:service_binding, service_instance:, app:), + create(:service_binding) ] end @@ -38,7 +38,7 @@ module VCAP::CloudController end context 'service keys' do - let(:keys) { [ServiceKey.make] } + let(:keys) { [create(:service_key)] } it 'does not query the database' do expect do diff --git a/spec/unit/decorators/include_binding_route_decorator_spec.rb b/spec/unit/decorators/include_binding_route_decorator_spec.rb index df2dc52c20f..ad4850f2b99 100644 --- a/spec/unit/decorators/include_binding_route_decorator_spec.rb +++ b/spec/unit/decorators/include_binding_route_decorator_spec.rb @@ -1,4 +1,4 @@ -require 'db_spec_helper' +require 'spec_helper' require 'decorators/include_binding_route_decorator' module VCAP @@ -7,12 +7,12 @@ module CloudController subject(:decorator) { described_class } let(:bindings) do - service_instance = ManagedServiceInstance.make(:routing) - route = Route.make(space: service_instance.space, created_at: Time.now.utc - 1.second) + service_instance = create(:managed_service_instance, :routing) + route = create(:route, space: service_instance.space, created_at: Time.now.utc - 1.second) [ - RouteBinding.make(service_instance:, route:), - RouteBinding.make + create(:route_binding, service_instance:, route:), + create(:route_binding) ] end @@ -38,10 +38,8 @@ module CloudController it 'does not include duplicates' do existing_route = bindings[0].route - bindings << RouteBinding.make( - route: existing_route, - service_instance: ManagedServiceInstance.make(:routing, space: existing_route.space) - ) + bindings << create(:route_binding, route: existing_route, + service_instance: create(:managed_service_instance, :routing, space: existing_route.space)) hash = subject.decorate({}, bindings) expect(hash[:included][:routes]).to have(2).items diff --git a/spec/unit/decorators/include_binding_service_instance_decorator_spec.rb b/spec/unit/decorators/include_binding_service_instance_decorator_spec.rb index 30c43de28ac..a3f04fd7dae 100644 --- a/spec/unit/decorators/include_binding_service_instance_decorator_spec.rb +++ b/spec/unit/decorators/include_binding_service_instance_decorator_spec.rb @@ -1,4 +1,4 @@ -require 'db_spec_helper' +require 'spec_helper' require 'decorators/include_binding_service_instance_decorator' module VCAP @@ -7,10 +7,12 @@ def self.can_be_decorated_with_include_binding_service_instance_decorator(klazz) RSpec.describe IncludeBindingServiceInstanceDecorator do subject(:decorator) { described_class } + let(:factory_name) { klazz.name.demodulize.underscore.to_sym } + let(:bindings) do [ - klazz.make(service_instance: ManagedServiceInstance.make(:routing, created_at: Time.now.utc - 1.second)), - klazz.make + create(factory_name, service_instance: create(:managed_service_instance, :routing, created_at: Time.now.utc - 1.second)), + create(factory_name) ] end @@ -34,7 +36,7 @@ def self.can_be_decorated_with_include_binding_service_instance_decorator(klazz) end it 'does not include duplicates' do - hash = subject.decorate({}, bindings << klazz.make(service_instance: bindings[0].service_instance)) + hash = subject.decorate({}, bindings << create(factory_name, service_instance: bindings[0].service_instance)) expect(hash[:included][:service_instances]).to have(2).items end diff --git a/spec/unit/decorators/include_organization_decorator_spec.rb b/spec/unit/decorators/include_organization_decorator_spec.rb index 4416b7e386e..635085bd2f0 100644 --- a/spec/unit/decorators/include_organization_decorator_spec.rb +++ b/spec/unit/decorators/include_organization_decorator_spec.rb @@ -3,13 +3,13 @@ module VCAP::CloudController RSpec.describe IncludeOrganizationDecorator do subject(:decorator) { IncludeOrganizationDecorator } - let(:organization1) { Organization.make(name: 'first-organization', created_at: Time.now.utc - 1.second) } - let(:organization2) { Organization.make(name: 'second-organization') } + let(:organization1) { create(:organization, name: 'first-organization', created_at: Time.now.utc - 1.second) } + let(:organization2) { create(:organization, name: 'second-organization') } - let(:space1) { Space.make(name: 'first-space', organization: organization1) } - let(:space2) { Space.make(name: 'second-space', organization: organization2) } + let(:space1) { create(:space, name: 'first-space', organization: organization1) } + let(:space2) { create(:space, name: 'second-space', organization: organization2) } - let(:apps) { [AppModel.make(space: space1), AppModel.make(space: space2), AppModel.make(space: space1)] } + let(:apps) { [create(:app_model, space: space1), create(:app_model, space: space2), create(:app_model, space: space1)] } it 'decorates the given hash with organizations from apps in the correct order' do wreathless_hash = { foo: 'bar' } diff --git a/spec/unit/decorators/include_role_organization_decorator_spec.rb b/spec/unit/decorators/include_role_organization_decorator_spec.rb index 81fe567cf07..e2d73435ff6 100644 --- a/spec/unit/decorators/include_role_organization_decorator_spec.rb +++ b/spec/unit/decorators/include_role_organization_decorator_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe IncludeRoleOrganizationDecorator do subject(:decorator) { IncludeRoleOrganizationDecorator } - let(:organization1) { Organization.make(name: 'first-organization', created_at: Time.now.utc - 1.second) } - let(:organization2) { Organization.make(name: 'second-organization') } + let(:organization1) { create(:organization, name: 'first-organization', created_at: Time.now.utc - 1.second) } + let(:organization2) { create(:organization, name: 'second-organization') } - let(:org_user) { OrganizationUser.make(organization: organization1) } - let(:org_auditor) { OrganizationAuditor.make(organization: organization2) } - let(:space_manager) { SpaceManager.make } + let(:org_user) { create(:organization_user, organization: organization1) } + let(:org_auditor) { create(:organization_auditor, organization: organization2) } + let(:space_manager) { create(:space_manager) } # roles is an array of VCAP::CloudController::Role objects let(:roles) { Role.where(guid: [org_user, org_auditor, space_manager].map(&:guid)).all } diff --git a/spec/unit/decorators/include_role_space_decorator_spec.rb b/spec/unit/decorators/include_role_space_decorator_spec.rb index 8712a2548f3..cdadb73373e 100644 --- a/spec/unit/decorators/include_role_space_decorator_spec.rb +++ b/spec/unit/decorators/include_role_space_decorator_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe IncludeRoleSpaceDecorator do subject(:decorator) { IncludeRoleSpaceDecorator } - let(:space1) { Space.make(name: 'first-space', created_at: Time.now.utc - 1.second) } - let(:space2) { Space.make(name: 'second-space') } + let(:space1) { create(:space, name: 'first-space', created_at: Time.now.utc - 1.second) } + let(:space2) { create(:space, name: 'second-space') } - let(:space_manager) { SpaceManager.make(space: space1) } - let(:space_auditor) { SpaceAuditor.make(space: space2) } - let(:org_manager) { OrganizationManager.make } + let(:space_manager) { create(:space_manager, space: space1) } + let(:space_auditor) { create(:space_auditor, space: space2) } + let(:org_manager) { create(:organization_manager) } # roles is an array of VCAP::CloudController::Role objects let(:roles) { Role.where(guid: [space_manager, space_auditor, org_manager].map(&:guid)).all } diff --git a/spec/unit/decorators/include_role_user_decorator_spec.rb b/spec/unit/decorators/include_role_user_decorator_spec.rb index 0790ec9aa71..65b3afda566 100644 --- a/spec/unit/decorators/include_role_user_decorator_spec.rb +++ b/spec/unit/decorators/include_role_user_decorator_spec.rb @@ -5,13 +5,13 @@ module VCAP::CloudController RSpec.describe IncludeRoleUserDecorator do subject(:decorator) { IncludeRoleUserDecorator } - let(:user1) { User.make(guid: 'user-1-guid', created_at: Time.now.utc - 1.second) } - let(:user2) { User.make(guid: 'user-2-guid') } + let(:user1) { create(:user, guid: 'user-1-guid', created_at: Time.now.utc - 1.second) } + let(:user2) { create(:user, guid: 'user-2-guid') } let(:roles) do [ - SpaceDeveloper.make(user: user1), - OrganizationManager.make(user: user2) + create(:space_developer, user: user1), + create(:organization_manager, user: user2) ] end diff --git a/spec/unit/decorators/include_route_domain_decorator_spec.rb b/spec/unit/decorators/include_route_domain_decorator_spec.rb index fe4bf6971d4..a01f118a7f8 100644 --- a/spec/unit/decorators/include_route_domain_decorator_spec.rb +++ b/spec/unit/decorators/include_route_domain_decorator_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe IncludeRouteDomainDecorator do subject(:decorator) { IncludeRouteDomainDecorator } - let(:domain1) { SharedDomain.make(name: 'z-first-domain.example.com') } - let(:domain2) { SharedDomain.make(name: 'a-second-domain.example.com') } - let(:routes) { [Route.make(domain: domain1), Route.make(domain: domain2), Route.make(domain: domain1)] } + let(:domain1) { create(:shared_domain, name: 'z-first-domain.example.com') } + let(:domain2) { create(:shared_domain, name: 'a-second-domain.example.com') } + let(:routes) { [create(:route, domain: domain1), create(:route, domain: domain2), create(:route, domain: domain1)] } it 'decorates the given hash with domains from routes in asciibetical order' do undecorated_hash = { i_am: 'tim' } diff --git a/spec/unit/decorators/include_service_plan_service_offering_decorator_spec.rb b/spec/unit/decorators/include_service_plan_service_offering_decorator_spec.rb index 00a190acd45..897a3136043 100644 --- a/spec/unit/decorators/include_service_plan_service_offering_decorator_spec.rb +++ b/spec/unit/decorators/include_service_plan_service_offering_decorator_spec.rb @@ -4,12 +4,12 @@ module VCAP::CloudController RSpec.describe IncludeServicePlanServiceOfferingDecorator do describe '.decorate' do - let(:offering_1) { Service.make(created_at: Time.now.utc - 1.second) } - let(:offering_2) { Service.make } + let(:offering_1) { create(:service, created_at: Time.now.utc - 1.second) } + let(:offering_2) { create(:service) } - let(:plan_1) { ServicePlan.make(service: offering_1) } - let(:plan_2) { ServicePlan.make(service: offering_2) } - let(:plan_3) { ServicePlan.make(service: offering_2) } + let(:plan_1) { create(:service_plan, service: offering_1) } + let(:plan_2) { create(:service_plan, service: offering_2) } + let(:plan_3) { create(:service_plan, service: offering_2) } it 'decorates the given hash with service offerings from service plans in the correct order' do undecorated_hash = { foo: 'bar', included: { monkeys: %w[zach greg] } } diff --git a/spec/unit/decorators/include_service_plan_space_organization_decorator_spec.rb b/spec/unit/decorators/include_service_plan_space_organization_decorator_spec.rb index 253c7cfcc1a..a1e93d9afac 100644 --- a/spec/unit/decorators/include_service_plan_space_organization_decorator_spec.rb +++ b/spec/unit/decorators/include_service_plan_space_organization_decorator_spec.rb @@ -4,17 +4,17 @@ module VCAP::CloudController RSpec.describe IncludeServicePlanSpaceOrganizationDecorator do describe '.decorate' do - let(:org1) { Organization.make(created_at: Time.now.utc - 1.second) } - let(:org2) { Organization.make } + let(:org1) { create(:organization, created_at: Time.now.utc - 1.second) } + let(:org2) { create(:organization) } - let(:space1) { Space.make(organization: org1, created_at: Time.now.utc - 1.second) } - let(:space2) { Space.make(organization: org2) } + let(:space1) { create(:space, organization: org1, created_at: Time.now.utc - 1.second) } + let(:space2) { create(:space, organization: org2) } let(:space_scoped_plan_1) { generate_space_scoped_plan(space1) } let(:space_scoped_plan_2) { generate_space_scoped_plan(space2) } context 'global plan' do - let(:plans) { [ServicePlan.make(public: true)] } + let(:plans) { [create(:service_plan, public: true)] } it 'does not add space or orgs' do hash = described_class.decorate({}, plans) @@ -58,7 +58,7 @@ module VCAP::CloudController end context 'when plans share an org' do - let(:space3) { Space.make(organization: org2) } + let(:space3) { create(:space, organization: org2) } let(:space_scoped_plan_same_org) { generate_space_scoped_plan(space3) } it 'does not duplicate the org' do @@ -80,8 +80,8 @@ module VCAP::CloudController end def generate_space_scoped_plan(space) - broker = VCAP::CloudController::ServiceBroker.make(space:) - offering = VCAP::CloudController::Service.make(service_broker: broker) - VCAP::CloudController::ServicePlan.make(service: offering) + broker = create(:service_broker, space:) + offering = create(:service, service_broker: broker) + create(:service_plan, service: offering) end end diff --git a/spec/unit/decorators/include_space_decorator_spec.rb b/spec/unit/decorators/include_space_decorator_spec.rb index c0441760ecc..383d7b4b070 100644 --- a/spec/unit/decorators/include_space_decorator_spec.rb +++ b/spec/unit/decorators/include_space_decorator_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe IncludeSpaceDecorator do subject(:decorator) { IncludeSpaceDecorator } - let(:space1) { Space.make(name: 'first-space', created_at: Time.now.utc - 1.second) } - let(:space2) { Space.make(name: 'second-space') } - let(:apps) { [AppModel.make(space: space1), AppModel.make(space: space2), AppModel.make(space: space1)] } + let(:space1) { create(:space, name: 'first-space', created_at: Time.now.utc - 1.second) } + let(:space2) { create(:space, name: 'second-space') } + let(:apps) { [create(:app_model, space: space1), create(:app_model, space: space2), create(:app_model, space: space1)] } before do allow(Permissions).to receive(:new).and_return(double(can_read_globally?: true)) diff --git a/spec/unit/decorators/include_space_organization_decorator_spec.rb b/spec/unit/decorators/include_space_organization_decorator_spec.rb index f2f6e504189..bfba719fd62 100644 --- a/spec/unit/decorators/include_space_organization_decorator_spec.rb +++ b/spec/unit/decorators/include_space_organization_decorator_spec.rb @@ -3,10 +3,10 @@ module VCAP::CloudController RSpec.describe IncludeSpaceOrganizationDecorator do subject(:decorator) { IncludeSpaceOrganizationDecorator } - let(:organization1) { Organization.make(name: 'first-organization', created_at: Time.now.utc - 1.second) } - let(:organization2) { Organization.make(name: 'second-organization') } - let(:space1) { Space.make(name: 'first-space', organization: organization1) } - let(:space2) { Space.make(name: 'second-space', organization: organization2) } + let(:organization1) { create(:organization, name: 'first-organization', created_at: Time.now.utc - 1.second) } + let(:organization2) { create(:organization, name: 'second-organization') } + let(:space1) { create(:space, name: 'first-space', organization: organization1) } + let(:space2) { create(:space, name: 'second-space', organization: organization2) } let(:spaces) { [space1, space2] } it 'decorates the given hash with organizations from spaces in the correct order' do diff --git a/spec/unit/fetchers/app_builds_list_fetcher_spec.rb b/spec/unit/fetchers/app_builds_list_fetcher_spec.rb index 7434857892f..af55edc2d25 100644 --- a/spec/unit/fetchers/app_builds_list_fetcher_spec.rb +++ b/spec/unit/fetchers/app_builds_list_fetcher_spec.rb @@ -5,24 +5,24 @@ module VCAP::CloudController RSpec.describe AppBuildsListFetcher do let(:subject) { AppBuildsListFetcher.fetch_all(app_guid, message) } - let(:space1) { Space.make } - let(:space2) { Space.make } - let(:space3) { Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:org_1_guid) { space1.organization.guid } let(:org_2_guid) { space2.organization.guid } let(:org_3_guid) { space3.organization.guid } - let(:app_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app1') } - let(:app2_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app2') } - let(:app3_in_space2) { AppModel.make(space_guid: space2.guid, guid: 'app3') } - let(:app4_in_space3) { AppModel.make(space_guid: space3.guid, guid: 'app4') } + let(:app_in_space1) { create(:app_model, space: space1, guid: 'app1') } + let(:app2_in_space1) { create(:app_model, space: space1, guid: 'app2') } + let(:app3_in_space2) { create(:app_model, space: space2, guid: 'app3') } + let(:app4_in_space3) { create(:app_model, space: space3, guid: 'app4') } - let!(:staged_build_for_app1_space1) { BuildModel.make(app_guid: app_in_space1.guid, state: BuildModel::STAGED_STATE) } - let!(:failed_build_for_app1_space1) { BuildModel.make(app_guid: app_in_space1.guid, state: BuildModel::FAILED_STATE) } + let!(:staged_build_for_app1_space1) { create(:build_model, app: app_in_space1, state: BuildModel::STAGED_STATE) } + let!(:failed_build_for_app1_space1) { create(:build_model, app: app_in_space1, state: BuildModel::FAILED_STATE) } - let!(:staged_build_for_app2_space1) { BuildModel.make(app_guid: app2_in_space1.guid, state: BuildModel::STAGED_STATE) } + let!(:staged_build_for_app2_space1) { create(:build_model, app: app2_in_space1, state: BuildModel::STAGED_STATE) } - let!(:staging_build_for_app3_space2) { BuildModel.make(app_guid: app3_in_space2.guid, state: BuildModel::STAGING_STATE) } - let!(:staging_build_for_app4_space3) { BuildModel.make(app_guid: app4_in_space3.guid, state: BuildModel::STAGING_STATE) } + let!(:staging_build_for_app3_space2) { create(:build_model, app: app3_in_space2, state: BuildModel::STAGING_STATE) } + let!(:staging_build_for_app4_space3) { create(:build_model, app: app4_in_space3, state: BuildModel::STAGING_STATE) } # let(:fetcher) { AppBuildsListFetcher.new(app_guid, message) } let(:pagination_options) { PaginationOptions.new({}) } diff --git a/spec/unit/fetchers/app_fetcher_spec.rb b/spec/unit/fetchers/app_fetcher_spec.rb index 1f7ca122e18..8368af93f5c 100644 --- a/spec/unit/fetchers/app_fetcher_spec.rb +++ b/spec/unit/fetchers/app_fetcher_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe AppFetcher do describe '#fetch' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:space) { app.space } it 'returns the desired app and space' do diff --git a/spec/unit/fetchers/app_list_fetcher_spec.rb b/spec/unit/fetchers/app_list_fetcher_spec.rb index 62be83c9695..e9a86d8bee4 100644 --- a/spec/unit/fetchers/app_list_fetcher_spec.rb +++ b/spec/unit/fetchers/app_list_fetcher_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController RSpec.describe AppListFetcher do subject { AppListFetcher.fetch_all(message) } - let!(:stack) { Stack.make } - let(:space) { Space.make(guid: 'main-space') } - let!(:app) { AppModel.make(space_guid: space.guid, name: 'app') } - let!(:sad_app) { AppModel.make(space_guid: space.guid) } + let!(:stack) { create(:stack) } + let(:space) { create(:space, guid: 'main-space') } + let!(:app) { create(:app_model, space: space, name: 'app') } + let!(:sad_app) { create(:app_model, space: space) } let(:org) { space.organization } let(:fetcher) { AppListFetcher } let(:space_guids) { [space.guid] } @@ -15,14 +15,13 @@ module VCAP::CloudController let(:filters) { {} } let(:message) { AppsListMessage.from_params(filters) } let!(:lifecycle_data_for_app) do - BuildpackLifecycleDataModel.make( - app: app, - stack: stack.name, - buildpacks: [Buildpack.make.name] - ) + create(:buildpack_lifecycle_data_model, + app: app, + stack: stack.name, + buildpacks: [create(:buildpack).name]) end let!(:lifecycle_data_for_sad_app) do - BuildpackLifecycleDataModel.make(app: sad_app, stack: nil) + create(:buildpack_lifecycle_data_model, app: sad_app, stack: nil) end describe '#fetch_all' do @@ -36,7 +35,7 @@ module VCAP::CloudController end it 'includes all the apps' do - app = AppModel.make + app = create(:app_model) expect(subject.all).to include(app, sad_app) end end @@ -69,7 +68,7 @@ module VCAP::CloudController context 'when the app space_guids are provided' do let(:filters) { { space_guids: [space.guid] } } - let(:sad_app) { AppModel.make } + let(:sad_app) { create(:app_model) } it 'returns all of the desired apps' do expect(apps.all).to contain_exactly(app) @@ -78,9 +77,9 @@ module VCAP::CloudController context 'when the organization guids are provided' do let(:filters) { { organization_guids: [org.guid] } } - let(:sad_org) { Organization.make } - let(:sad_space) { Space.make(organization_guid: sad_org.guid) } - let(:sad_app) { AppModel.make(space_guid: sad_space.guid) } + let(:sad_org) { create(:organization) } + let(:sad_space) { create(:space, organization: sad_org) } + let(:sad_app) { create(:app_model, space: sad_space) } let(:space_guids) { [space.guid, sad_space.guid] } it 'returns all of the desired apps' do @@ -115,10 +114,10 @@ module VCAP::CloudController context 'when a label_selector is provided' do let(:filters) { { 'label_selector' => 'dog in (chihuahua,scooby-doo)' } } let!(:app_label) do - VCAP::CloudController::AppLabelModel.make(resource_guid: app.guid, key_name: 'dog', value: 'scooby-doo') + create(:app_label_model, resource_guid: app.guid, key_name: 'dog', value: 'scooby-doo') end let!(:sad_app_label) do - VCAP::CloudController::AppLabelModel.make(resource_guid: sad_app.guid, key_name: 'dog', value: 'poodle') + create(:app_label_model, resource_guid: sad_app.guid, key_name: 'dog', value: 'poodle') end it 'returns all of the desired apps' do @@ -126,9 +125,9 @@ module VCAP::CloudController end context 'and other filters are present' do - let!(:happiest_app) { AppModel.make(space_guid: space.guid, name: 'bob') } + let!(:happiest_app) { create(:app_model, space: space, name: 'bob') } let!(:happiest_app_label) do - VCAP::CloudController::AppLabelModel.make(resource_guid: happiest_app.guid, key_name: 'dog', value: 'scooby-doo') + create(:app_label_model, resource_guid: happiest_app.guid, key_name: 'dog', value: 'scooby-doo') end let(:filters) { { 'names' => 'bob', 'label_selector' => 'dog in (chihuahua,scooby-doo)' } } @@ -138,13 +137,13 @@ module VCAP::CloudController end context 'labels and spaces' do - let!(:happy_space) { Space.make(organization: space.organization, guid: 'happy_space') } + let!(:happy_space) { create(:space, organization: space.organization, guid: 'happy_space') } let!(:space_guids) { [happy_space.guid] } - let!(:happiest_app) { AppModel.make(space_guid: happy_space.guid, name: 'bob2') } + let!(:happiest_app) { create(:app_model, space: happy_space, name: 'bob2') } let!(:happiest_app_label) do - VCAP::CloudController::AppLabelModel.make(resource_guid: happiest_app.guid, key_name: 'dog', value: 'scooby-doo') + create(:app_label_model, resource_guid: happiest_app.guid, key_name: 'dog', value: 'scooby-doo') end - let!(:mildly_happy_app) { AppModel.make(space_guid: happy_space.guid, name: 'bob3') } + let!(:mildly_happy_app) { create(:app_model, space: happy_space, name: 'bob3') } let(:filters) { { space_guids: [happy_space.guid], 'label_selector' => 'dog in (chihuahua,scooby-doo)' } } it 'returns the desired app' do @@ -168,8 +167,8 @@ module VCAP::CloudController end context 'when a lifecycle_type is provided' do - let!(:docker_app) { AppModel.make(:docker, name: 'docker-app', space_guid: space.guid) } - let!(:cnb_app) { AppModel.make(:cnb, name: 'cnb-app', space_guid: space.guid) } + let!(:docker_app) { create(:app_model, :docker, name: 'docker-app', space: space) } + let!(:cnb_app) { create(:app_model, :cnb, name: 'cnb-app', space: space) } before do docker_app.buildpack_lifecycle_data = nil @@ -207,10 +206,10 @@ module VCAP::CloudController AppModel.plugin :timestamps, update_on_create: true, allow_manual_update: true end - let!(:resource_1) { AppModel.make(name: '1', created_at: '2020-05-26T18:47:01Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:01Z') } } - let!(:resource_2) { AppModel.make(name: '2', created_at: '2020-05-26T18:47:02Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:02Z') } } - let!(:resource_3) { AppModel.make(name: '3', created_at: '2020-05-26T18:47:03Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:03Z') } } - let!(:resource_4) { AppModel.make(name: '4', created_at: '2020-05-26T18:47:04Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:04Z') } } + let!(:resource_1) { create(:app_model, name: '1', created_at: '2020-05-26T18:47:01Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:01Z') } } + let!(:resource_2) { create(:app_model, name: '2', created_at: '2020-05-26T18:47:02Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:02Z') } } + let!(:resource_3) { create(:app_model, name: '3', created_at: '2020-05-26T18:47:03Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:03Z') } } + let!(:resource_4) { create(:app_model, name: '4', created_at: '2020-05-26T18:47:04Z', space: space).tap { |r| r.update(updated_at: '2020-05-26T18:47:04Z') } } after do AppModel.plugin :timestamps, update_on_create: true, allow_manual_update: false diff --git a/spec/unit/fetchers/app_revisions_list_fetcher_spec.rb b/spec/unit/fetchers/app_revisions_list_fetcher_spec.rb index 3303884d292..740f0241036 100644 --- a/spec/unit/fetchers/app_revisions_list_fetcher_spec.rb +++ b/spec/unit/fetchers/app_revisions_list_fetcher_spec.rb @@ -4,13 +4,13 @@ module VCAP::CloudController RSpec.describe AppRevisionsListFetcher do let(:fetcher) { AppRevisionsListFetcher } - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } - let(:expired_droplet) { DropletModel.make(:droplet, app: app, state: DropletModel::EXPIRED_STATE) } - let(:staged_droplet) { DropletModel.make(:droplet, app: app, state: DropletModel::STAGED_STATE) } + let(:expired_droplet) { create(:droplet_model, app: app, state: DropletModel::EXPIRED_STATE, set_as_current_droplet: false) } + let(:staged_droplet) { create(:droplet_model, app: app, state: DropletModel::STAGED_STATE, set_as_current_droplet: false) } - let!(:revision1) { RevisionModel.make(version: 21, droplet_guid: staged_droplet.guid, app: app) } - let!(:revision2) { RevisionModel.make(version: 34, droplet_guid: expired_droplet.guid, app: app) } + let!(:revision1) { create(:revision_model, version: 21, droplet: staged_droplet, app: app) } + let!(:revision2) { create(:revision_model, version: 34, droplet: expired_droplet, app: app) } describe '#fetch' do let(:message) { AppRevisionsListMessage.from_params(filters) } @@ -45,8 +45,8 @@ module VCAP::CloudController context 'when a label_selector is provided' do let(:message) { AppRevisionsListMessage.from_params({ 'label_selector' => 'key=value' }) } - let!(:revision1label) { RevisionLabelModel.make(key_name: 'key', value: 'value', revision: revision1) } - let!(:revision2label) { RevisionLabelModel.make(key_name: 'key2', value: 'value2', revision: revision2) } + let!(:revision1label) { create(:revision_label_model, key_name: 'key', value: 'value', revision: revision1) } + let!(:revision2label) { create(:revision_label_model, key_name: 'key2', value: 'value2', revision: revision2) } it 'returns the correct set of revisions' do results = fetcher.fetch(app, message).all @@ -56,10 +56,10 @@ module VCAP::CloudController end describe '#fetch_deployed' do - let!(:revision3) { RevisionModel.make(version: 35, app: app) } + let!(:revision3) { create(:revision_model, version: 35, app: app) } - let!(:process1) { ProcessModel.make(app: app, revision: revision1, type: 'web', state: 'STARTED') } - let!(:process2) { ProcessModel.make(app: app, revision: revision2, type: 'web', state: 'STOPPED') } + let!(:process1) { create(:process, app: app, revision: revision1, type: 'web', state: 'STARTED') } + let!(:process2) { create(:process, app: app, revision: revision2, type: 'web', state: 'STOPPED') } subject { fetcher.fetch_deployed(app) } @@ -68,7 +68,7 @@ module VCAP::CloudController end it 'handles processes with no revisions' do - VCAP::CloudController::ProcessModel.make(app: app, type: 'web', state: 'STARTED') + create(:process, app: app, type: 'web', state: 'STARTED') expect(subject).to contain_exactly(revision1) end end diff --git a/spec/unit/fetchers/app_usage_event_list_fetcher_spec.rb b/spec/unit/fetchers/app_usage_event_list_fetcher_spec.rb index abc04268ef4..48d3b52ac0f 100644 --- a/spec/unit/fetchers/app_usage_event_list_fetcher_spec.rb +++ b/spec/unit/fetchers/app_usage_event_list_fetcher_spec.rb @@ -9,9 +9,9 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_all' do - let!(:app_usage_event) { VCAP::CloudController::AppUsageEvent.make } - let!(:app_usage_event_2) { VCAP::CloudController::AppUsageEvent.make } - let!(:app_usage_event_3) { VCAP::CloudController::AppUsageEvent.make } + let!(:app_usage_event) { create(:app_usage_event) } + let!(:app_usage_event_2) { create(:app_usage_event) } + let!(:app_usage_event_3) { create(:app_usage_event) } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) diff --git a/spec/unit/fetchers/assign_current_droplet_fetcher_spec.rb b/spec/unit/fetchers/assign_current_droplet_fetcher_spec.rb index 692d1514e03..4020018f03f 100644 --- a/spec/unit/fetchers/assign_current_droplet_fetcher_spec.rb +++ b/spec/unit/fetchers/assign_current_droplet_fetcher_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe AssignCurrentDropletFetcher do describe '#fetch' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:space) { app.space } - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } before do app.add_droplet(droplet) diff --git a/spec/unit/fetchers/base_list_fetcher_spec.rb b/spec/unit/fetchers/base_list_fetcher_spec.rb index ef5a44dd6e4..0d4cb87efce 100644 --- a/spec/unit/fetchers/base_list_fetcher_spec.rb +++ b/spec/unit/fetchers/base_list_fetcher_spec.rb @@ -10,17 +10,17 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_all' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:app_model) { AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) end context 'filtering guids' do - let!(:event_1) { Event.make(guid: '1') } - let!(:event_2) { Event.make(guid: '2') } + let!(:event_1) { create(:event, guid: '1') } + let!(:event_2) { create(:event, guid: '2') } let(:filters) do { guids: %w[1 3] } @@ -32,10 +32,10 @@ module VCAP::CloudController end context 'filtering timestamps on creation' do - let!(:event_1) { Event.make(guid: '1', created_at: '2020-05-26T18:47:01Z') } - let!(:event_2) { Event.make(guid: '2', created_at: '2020-05-26T18:47:02Z') } - let!(:event_3) { Event.make(guid: '3', created_at: '2020-05-26T18:47:03Z') } - let!(:event_4) { Event.make(guid: '4', created_at: '2020-05-26T18:47:04Z') } + let!(:event_1) { create(:event, guid: '1', created_at: '2020-05-26T18:47:01Z') } + let!(:event_2) { create(:event, guid: '2', created_at: '2020-05-26T18:47:02Z') } + let!(:event_3) { create(:event, guid: '3', created_at: '2020-05-26T18:47:03Z') } + let!(:event_4) { create(:event, guid: '4', created_at: '2020-05-26T18:47:04Z') } context 'requesting events less than a timestamp' do let(:filters) do @@ -47,7 +47,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_1, event_2) @@ -65,7 +65,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_1, event_2, event_3, event_between_3_and_4) @@ -83,7 +83,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_3, event_between_3_and_4, event_4) @@ -101,7 +101,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_4) @@ -119,7 +119,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_2, event_3, event_between_3_and_4) @@ -137,7 +137,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', created_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a created_at timestamp at a given timestamp' do expect(subject).to contain_exactly(event_3, event_between_3_and_4) @@ -146,7 +146,7 @@ module VCAP::CloudController end context 'requesting events equal to several timestamps' do - let!(:event_5) { Event.make(guid: '5', created_at: '2020-05-26T18:47:05Z') } + let!(:event_5) { create(:event, guid: '5', created_at: '2020-05-26T18:47:05Z') } let(:filters) do { created_ats: [event_2.created_at.iso8601, event_4.created_at.iso8601] } end @@ -156,7 +156,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_2_and_3) { Event.make(guid: '2.5', created_at: '2020-05-26T18:47:02.5Z') } + let!(:event_between_2_and_3) { create(:event, guid: '2.5', created_at: '2020-05-26T18:47:02.5Z') } it 'returns events with a created_at timestamp at a given timestamp' do expect(subject).to contain_exactly(event_2, event_between_2_and_3, event_4) @@ -170,10 +170,10 @@ module VCAP::CloudController Event.plugin :timestamps, update_on_create: false end - let!(:event_1) { Event.make(guid: '1', updated_at: '2020-05-26T18:47:01Z') } - let!(:event_2) { Event.make(guid: '2', updated_at: '2020-05-26T18:47:02Z') } - let!(:event_3) { Event.make(guid: '3', updated_at: '2020-05-26T18:47:03Z') } - let!(:event_4) { Event.make(guid: '4', updated_at: '2020-05-26T18:47:04Z') } + let!(:event_1) { create(:event, guid: '1', updated_at: '2020-05-26T18:47:01Z') } + let!(:event_2) { create(:event, guid: '2', updated_at: '2020-05-26T18:47:02Z') } + let!(:event_3) { create(:event, guid: '3', updated_at: '2020-05-26T18:47:03Z') } + let!(:event_4) { create(:event, guid: '4', updated_at: '2020-05-26T18:47:04Z') } after do Event.plugin :timestamps, update_on_create: true @@ -189,7 +189,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_1, event_2) @@ -207,7 +207,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_1, event_2, event_3, event_between_3_and_4) @@ -225,7 +225,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_3, event_between_3_and_4, event_4) @@ -243,7 +243,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_4) @@ -261,7 +261,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp before or at a given timestamp' do expect(subject).to contain_exactly(event_2, event_3, event_between_3_and_4) @@ -279,7 +279,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_3_and_4) { Event.make(guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } + let!(:event_between_3_and_4) { create(:event, guid: '3.5', updated_at: '2020-05-26T18:47:03.5Z') } it 'returns events with a updated_at timestamp at a given timestamp' do expect(subject).to contain_exactly(event_3, event_between_3_and_4) @@ -288,7 +288,7 @@ module VCAP::CloudController end context 'requesting events equal to several timestamps' do - let!(:event_5) { Event.make(guid: '5', updated_at: '2020-05-26T18:47:05Z') } + let!(:event_5) { create(:event, guid: '5', updated_at: '2020-05-26T18:47:05Z') } let(:filters) do { updated_ats: [event_2.updated_at.iso8601, event_4.updated_at.iso8601] } end @@ -298,7 +298,7 @@ module VCAP::CloudController end context 'when there are events with subsecond timestamps' do - let!(:event_between_2_and_3) { Event.make(guid: '2.5', updated_at: '2020-05-26T18:47:02.5Z') } + let!(:event_between_2_and_3) { create(:event, guid: '2.5', updated_at: '2020-05-26T18:47:02.5Z') } it 'returns events with a updated_at timestamp at a given timestamp' do expect(subject).to contain_exactly(event_2, event_between_2_and_3, event_4) diff --git a/spec/unit/fetchers/build_list_fetcher_spec.rb b/spec/unit/fetchers/build_list_fetcher_spec.rb index 8561b222d1e..24971f4ad22 100644 --- a/spec/unit/fetchers/build_list_fetcher_spec.rb +++ b/spec/unit/fetchers/build_list_fetcher_spec.rb @@ -4,28 +4,28 @@ module VCAP::CloudController RSpec.describe BuildListFetcher do - let(:space1) { Space.make } - let(:space2) { Space.make } - let(:space3) { Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:org_1_guid) { space1.organization.guid } let(:org_2_guid) { space2.organization.guid } let(:org_3_guid) { space3.organization.guid } - let(:app_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app1') } - let(:app2_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app2') } - let(:app3_in_space2) { AppModel.make(space_guid: space2.guid, guid: 'app3') } - let(:app4_in_space3) { AppModel.make(space_guid: space3.guid, guid: 'app4') } + let(:app_in_space1) { create(:app_model, space: space1, guid: 'app1') } + let(:app2_in_space1) { create(:app_model, space: space1, guid: 'app2') } + let(:app3_in_space2) { create(:app_model, space: space2, guid: 'app3') } + let(:app4_in_space3) { create(:app_model, space: space3, guid: 'app4') } - let(:package_for_app_1) { PackageModel.make(app: app_in_space1) } - let(:package2_in_space_1) { PackageModel.make(app: app_in_space1) } + let(:package_for_app_1) { create(:package_model, app: app_in_space1) } + let(:package2_in_space_1) { create(:package_model, app: app_in_space1) } - let!(:staged_build_for_app1_space1) { BuildModel.make(app_guid: app_in_space1.guid, package_guid: package_for_app_1.guid, state: BuildModel::STAGED_STATE) } - let!(:failed_build_for_app1_space1) { BuildModel.make(app_guid: app_in_space1.guid, package_guid: package2_in_space_1.guid, state: BuildModel::FAILED_STATE) } + let!(:staged_build_for_app1_space1) { create(:build_model, app: app_in_space1, package: package_for_app_1, state: BuildModel::STAGED_STATE) } + let!(:failed_build_for_app1_space1) { create(:build_model, app: app_in_space1, package: package2_in_space_1, state: BuildModel::FAILED_STATE) } - let!(:staged_build_for_app2_space1) { BuildModel.make(app_guid: app2_in_space1.guid, state: BuildModel::STAGED_STATE) } + let!(:staged_build_for_app2_space1) { create(:build_model, app: app2_in_space1, state: BuildModel::STAGED_STATE) } - let!(:staging_build_for_app3_space2) { BuildModel.make(app_guid: app3_in_space2.guid, state: BuildModel::STAGING_STATE) } - let!(:staging_build_for_app4_space3) { BuildModel.make(app_guid: app4_in_space3.guid, state: BuildModel::STAGING_STATE) } + let!(:staging_build_for_app3_space2) { create(:build_model, app: app3_in_space2, state: BuildModel::STAGING_STATE) } + let!(:staging_build_for_app4_space3) { create(:build_model, app: app4_in_space3, state: BuildModel::STAGING_STATE) } subject(:fetcher) { BuildListFetcher } let(:pagination_options) { PaginationOptions.new({}) } @@ -33,10 +33,9 @@ module VCAP::CloudController let(:filters) { {} } let!(:lifecycle_data_for_app) do - BuildpackLifecycleDataModel.make( - build: staging_build_for_app3_space2, - buildpacks: [Buildpack.make.name] - ) + create(:buildpack_lifecycle_data_model, + build: staging_build_for_app3_space2, + buildpacks: [create(:buildpack).name]) end describe '#fetch_all' do @@ -71,7 +70,7 @@ module VCAP::CloudController context 'filtering states' do let(:filters) { { states: [BuildModel::STAGED_STATE, BuildModel::FAILED_STATE] } } - let!(:failed_build_for_other_app) { BuildModel.make(state: BuildModel::FAILED_STATE) } + let!(:failed_build_for_other_app) { create(:build_model, state: BuildModel::FAILED_STATE) } it 'returns all of the builds with the requested states' do results = fetcher.fetch_all(message).all diff --git a/spec/unit/fetchers/buildpack_lifecycle_fetcher_spec.rb b/spec/unit/fetchers/buildpack_lifecycle_fetcher_spec.rb index cf259d68092..999e97385b1 100644 --- a/spec/unit/fetchers/buildpack_lifecycle_fetcher_spec.rb +++ b/spec/unit/fetchers/buildpack_lifecycle_fetcher_spec.rb @@ -6,12 +6,12 @@ module VCAP::CloudController let(:fetcher) { BuildpackLifecycleFetcher.new } describe '#fetch' do - let!(:stack) { Stack.make } - let!(:stack2) { Stack.make } + let!(:stack) { create(:stack) } + let!(:stack2) { create(:stack) } - let!(:buildpack) { Buildpack.make(name: 'buildpack-1', stack: stack.name) } - let!(:buildpack2) { Buildpack.make(name: 'buildpack-2', stack: stack.name) } - let!(:buildpack3) { Buildpack.make(name: 'buildpack-2', stack: stack2.name) } + let!(:buildpack) { create(:buildpack, name: 'buildpack-1', stack: stack.name) } + let!(:buildpack2) { create(:buildpack, name: 'buildpack-2', stack: stack.name) } + let!(:buildpack3) { create(:buildpack, name: 'buildpack-2', stack: stack2.name) } it 'returns the stack and buildpack for the given stack' do returned_hash = BuildpackLifecycleFetcher.fetch([buildpack2.name, buildpack.name, 'http://buildpack.example.com'], stack.name) @@ -24,8 +24,8 @@ module VCAP::CloudController context 'buildpacks with unknown stack exist' do context 'only buildpack with nil stack exists' do - let!(:stack3) { Stack.make } - let!(:buildpack4) { Buildpack.make(:nil_stack, name: 'buildpack-3') } + let!(:stack3) { create(:stack) } + let!(:buildpack4) { create(:buildpack, :nil_stack, name: 'buildpack-3') } it 'returns the stack and buildpack' do returned_hash = BuildpackLifecycleFetcher.fetch(['buildpack-3'], stack3.name) @@ -38,7 +38,7 @@ module VCAP::CloudController end context 'buildpack with nil stack and matching stack both exist' do - let!(:buildpack4) { Buildpack.make(:nil_stack, name: 'buildpack-2') } + let!(:buildpack4) { create(:buildpack, :nil_stack, name: 'buildpack-2') } it 'chooses the buildpack with non-nil stack' do returned_hash = BuildpackLifecycleFetcher.fetch([buildpack2.name, buildpack.name, 'http://buildpack.example.com'], stack.name) diff --git a/spec/unit/fetchers/buildpack_list_fetcher_spec.rb b/spec/unit/fetchers/buildpack_list_fetcher_spec.rb index c3891f6bc6f..e8a1635c73f 100644 --- a/spec/unit/fetchers/buildpack_list_fetcher_spec.rb +++ b/spec/unit/fetchers/buildpack_list_fetcher_spec.rb @@ -6,18 +6,18 @@ module VCAP::CloudController let(:fetcher) { BuildpackListFetcher } describe '#fetch_all' do - let!(:stack1) { Stack.make } - let!(:stack2) { Stack.make } - let!(:stack3) { Stack.make } - - let!(:buildpack1) { Buildpack.make(stack: stack1.name) } - let!(:buildpack2) { Buildpack.make(stack: stack2.name) } - let!(:buildpack3) { Buildpack.make(stack: stack3.name) } - let!(:buildpack4) { Buildpack.make(stack: stack1.name) } - let!(:buildpack5) { Buildpack.make(stack: stack1.name, lifecycle: 'cnb') } - let!(:buildpack6) { Buildpack.make(stack: stack2.name, lifecycle: 'cnb') } - let!(:buildpack7) { Buildpack.make(stack: nil, lifecycle: 'cnb') } - let!(:buildpack_without_stack) { Buildpack.make(stack: nil) } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack) } + let!(:stack3) { create(:stack) } + + let!(:buildpack1) { create(:buildpack, stack: stack1.name) } + let!(:buildpack2) { create(:buildpack, stack: stack2.name) } + let!(:buildpack3) { create(:buildpack, stack: stack3.name) } + let!(:buildpack4) { create(:buildpack, stack: stack1.name) } + let!(:buildpack5) { create(:buildpack, stack: stack1.name, lifecycle: 'cnb') } + let!(:buildpack6) { create(:buildpack, stack: stack2.name, lifecycle: 'cnb') } + let!(:buildpack7) { create(:buildpack, stack: nil, lifecycle: 'cnb') } + let!(:buildpack_without_stack) { create(:buildpack, stack: nil) } let(:message) { BuildpacksListMessage.from_params(filters) } @@ -50,7 +50,7 @@ module VCAP::CloudController 'label_selector' => 'key=value' } end - let!(:label) { BuildpackLabelModel.make(resource_guid: buildpack1.guid, key_name: 'key', value: 'value') } + let!(:label) { create(:buildpack_label_model, resource_guid: buildpack1.guid, key_name: 'key', value: 'value') } it 'returns all of the desired buildpacks' do expect(subject).to contain_exactly(buildpack1) diff --git a/spec/unit/fetchers/domain_fetcher_spec.rb b/spec/unit/fetchers/domain_fetcher_spec.rb index 2284e5f503d..f43b610e681 100644 --- a/spec/unit/fetchers/domain_fetcher_spec.rb +++ b/spec/unit/fetchers/domain_fetcher_spec.rb @@ -11,15 +11,15 @@ module VCAP::CloudController org3.add_private_domain(private_domain1) end - let!(:org1) { Organization.make(guid: 'org1') } - let!(:org2) { Organization.make(guid: 'org2') } - let!(:org3) { Organization.make(guid: 'org3') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:org2) { create(:organization, guid: 'org2') } + let!(:org3) { create(:organization, guid: 'org3') } # org1 will share private domain(s) with org3 - let!(:shared_domain1) { SharedDomain.make(guid: 'shared_domain1') } - let!(:shared_domain2) { SharedDomain.make(guid: 'shared_domain2') } - let!(:private_domain1) { PrivateDomain.make(guid: 'private_domain1', owning_organization: org1) } - let!(:private_domain2) { PrivateDomain.make(guid: 'private_domain2', owning_organization: org1) } - let!(:private_domain3) { PrivateDomain.make(guid: 'private_domain3', owning_organization: org3) } + let!(:shared_domain1) { create(:shared_domain, guid: 'shared_domain1') } + let!(:shared_domain2) { create(:shared_domain, guid: 'shared_domain2') } + let!(:private_domain1) { create(:private_domain, guid: 'private_domain1', owning_organization: org1) } + let!(:private_domain2) { create(:private_domain, guid: 'private_domain2', owning_organization: org1) } + let!(:private_domain3) { create(:private_domain, guid: 'private_domain3', owning_organization: org3) } context 'when there are no readable org guids' do it 'lists shared domains only' do @@ -75,8 +75,8 @@ module VCAP::CloudController end context 'when the domain is shared' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:shared_domain1) { SharedDomain.make(guid: 'shared_domain1') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:shared_domain1) { create(:shared_domain, guid: 'shared_domain1') } let!(:domain_guid_filter) { shared_domain1.guid } it 'returns only the shared domain for the given guid' do @@ -88,8 +88,8 @@ module VCAP::CloudController context 'when the domain is private' do context 'when the user can read from the owning org' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:private_domain) { PrivateDomain.make(guid: 'private_domain', owning_organization: org1) } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:private_domain) { create(:private_domain, guid: 'private_domain', owning_organization: org1) } let!(:domain_guid_filter) { private_domain.guid } it 'returns only the private domain' do @@ -100,8 +100,8 @@ module VCAP::CloudController end context 'when the user can read from a shared org' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:private_domain) { PrivateDomain.make(guid: 'private_domain') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:private_domain) { create(:private_domain, guid: 'private_domain') } let!(:domain_guid_filter) { private_domain.guid } before do @@ -116,9 +116,9 @@ module VCAP::CloudController end context 'when the user can not read from any associated org' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:org2) { Organization.make(guid: 'org2') } - let!(:private_domain) { PrivateDomain.make(guid: 'private_domain') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:org2) { create(:organization, guid: 'org2') } + let!(:private_domain) { create(:private_domain, guid: 'private_domain') } let!(:domain_guid_filter) { private_domain.guid } before do @@ -139,9 +139,9 @@ module VCAP::CloudController end context 'when the matching domain is shared' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:shared_domain1) { SharedDomain.make(guid: 'named-domain-1', name: 'named-domain-1.com') } - let!(:shared_domain2) { SharedDomain.make(guid: 'named-domain-2', name: 'named-domain-2.com') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:shared_domain1) { create(:shared_domain, guid: 'named-domain-1', name: 'named-domain-1.com') } + let!(:shared_domain2) { create(:shared_domain, guid: 'named-domain-2', name: 'named-domain-2.com') } let!(:domain_name_filter) { shared_domain2.name } it 'only returns the matching domain' do @@ -167,9 +167,9 @@ module VCAP::CloudController end context 'when the matching domain is shared' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:shared_domain1) { SharedDomain.make(guid: 'guid-1') } - let!(:shared_domain2) { SharedDomain.make(guid: 'guid-2') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:shared_domain1) { create(:shared_domain, guid: 'guid-1') } + let!(:shared_domain2) { create(:shared_domain, guid: 'guid-2') } let!(:domain_guid_filter) { shared_domain2.guid } it 'only returns the matching domain' do @@ -195,10 +195,10 @@ module VCAP::CloudController end context 'when the matching domain is shared' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:org2) { Organization.make(guid: 'org2') } - let!(:private_domain1) { PrivateDomain.make(owning_organization: org1, name: 'named-domain-1.com') } - let!(:private_domain2) { PrivateDomain.make(owning_organization: org2, name: 'named-domain-2.com') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:org2) { create(:organization, guid: 'org2') } + let!(:private_domain1) { create(:private_domain, owning_organization: org1, name: 'named-domain-1.com') } + let!(:private_domain2) { create(:private_domain, owning_organization: org2, name: 'named-domain-2.com') } let!(:organization_guid_filter) { org1.guid } it 'returns only privates_domain1' do @@ -219,15 +219,15 @@ module VCAP::CloudController end context 'when fetching domains by label selector' do - let!(:org1) { Organization.make(guid: 'org1') } - let!(:shared_domain1) { SharedDomain.make(guid: 'named-domain-1', name: 'named-domain-1.com') } - let!(:shared_domain2) { SharedDomain.make(guid: 'named-domain-2', name: 'named-domain-2.com') } + let!(:org1) { create(:organization, guid: 'org1') } + let!(:shared_domain1) { create(:shared_domain, guid: 'named-domain-1', name: 'named-domain-1.com') } + let!(:shared_domain2) { create(:shared_domain, guid: 'named-domain-2', name: 'named-domain-2.com') } let!(:domain_label) do - VCAP::CloudController::DomainLabelModel.make(resource_guid: shared_domain1.guid, key_name: 'dog', value: 'scooby-doo') + create(:domain_label_model, resource_guid: shared_domain1.guid, key_name: 'dog', value: 'scooby-doo') end let!(:sad_domain_label) do - VCAP::CloudController::DomainLabelModel.make(resource_guid: shared_domain2.guid, key_name: 'dog', value: 'poodle') + create(:domain_label_model, resource_guid: shared_domain2.guid, key_name: 'dog', value: 'poodle') end let(:results) { DomainFetcher.fetch(message, [org1.guid]).all } @@ -248,9 +248,9 @@ module VCAP::CloudController DomainsListMessage.from_params({ 'names' => 'dom.com', 'label_selector' => 'dog in (chihuahua,scooby-doo)' }) end - let!(:happiest_domain) { SharedDomain.make(name: 'dom.com') } + let!(:happiest_domain) { create(:shared_domain, name: 'dom.com') } let!(:happiest_domain_label) do - VCAP::CloudController::DomainLabelModel.make(resource_guid: happiest_domain.guid, key_name: 'dog', value: 'scooby-doo') + create(:domain_label_model, resource_guid: happiest_domain.guid, key_name: 'dog', value: 'scooby-doo') end it 'returns the desired app' do diff --git a/spec/unit/fetchers/droplet_fetcher_spec.rb b/spec/unit/fetchers/droplet_fetcher_spec.rb index a53478e3ee3..23a4e254290 100644 --- a/spec/unit/fetchers/droplet_fetcher_spec.rb +++ b/spec/unit/fetchers/droplet_fetcher_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe DropletFetcher do describe '#fetch' do - let!(:droplet) { DropletModel.make } + let!(:droplet) { create(:droplet_model) } let(:space) { droplet.space } subject(:droplet_delete_fetcher) { DropletFetcher.new } diff --git a/spec/unit/fetchers/droplet_list_fetcher_spec.rb b/spec/unit/fetchers/droplet_list_fetcher_spec.rb index 835845b15c2..5b67d3ede25 100644 --- a/spec/unit/fetchers/droplet_list_fetcher_spec.rb +++ b/spec/unit/fetchers/droplet_list_fetcher_spec.rb @@ -10,12 +10,12 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_all' do - let(:app1) { AppModel.make } - let!(:staged_droplet_for_app1) { DropletModel.make(app_guid: app1.guid, state: DropletModel::STAGED_STATE) } - let!(:failed_droplet_for_app1) { DropletModel.make(app_guid: app1.guid, state: DropletModel::FAILED_STATE) } + let(:app1) { create(:app_model) } + let!(:staged_droplet_for_app1) { create(:droplet_model, app: app1, state: DropletModel::STAGED_STATE) } + let!(:failed_droplet_for_app1) { create(:droplet_model, app: app1, state: DropletModel::FAILED_STATE) } - let(:app2) { AppModel.make } - let!(:staged_droplet_for_app2) { DropletModel.make(app_guid: app2.guid, state: DropletModel::STAGED_STATE) } + let(:app2) { create(:app_model) } + let!(:staged_droplet_for_app2) { create(:droplet_model, app: app2, state: DropletModel::STAGED_STATE) } it 'returns a Sequel::Dataset' do results = fetcher.fetch_all(message) @@ -47,7 +47,7 @@ module VCAP::CloudController context 'filtering states' do let(:filters) { { states: [DropletModel::STAGED_STATE, DropletModel::EXPIRED_STATE] } } - let!(:expired_droplet_for_other_app) { DropletModel.make(state: DropletModel::EXPIRED_STATE, app: nil) } + let!(:expired_droplet_for_other_app) { create(:droplet_model, state: DropletModel::EXPIRED_STATE, app: nil) } it 'returns all of the droplets with the requested states' do results = fetcher.fetch_all(message).all @@ -117,8 +117,8 @@ module VCAP::CloudController let(:message) do DropletsListMessage.from_params({ 'label_selector' => 'key=value' }) end - let!(:droplet1Label) { DropletLabelModel.make(key_name: 'key', value: 'value', droplet: staged_droplet_for_app1) } - let!(:droplet2Label) { DropletLabelModel.make(key_name: 'key2', value: 'value2', droplet: failed_droplet_for_app1) } + let!(:droplet1Label) { create(:droplet_label_model, key_name: 'key', value: 'value', droplet: staged_droplet_for_app1) } + let!(:droplet2Label) { create(:droplet_label_model, key_name: 'key2', value: 'value2', droplet: failed_droplet_for_app1) } it 'returns the correct set of droplets' do results = fetcher.fetch_all(message) @@ -129,17 +129,17 @@ module VCAP::CloudController describe '#fetch_for_spaces' do let(:space1) { app1.space } - let(:app1) { AppModel.make } - let!(:staged_droplet_for_app1) { DropletModel.make(app_guid: app1.guid, state: DropletModel::STAGED_STATE) } - let!(:failed_droplet_for_app1) { DropletModel.make(app_guid: app1.guid, state: DropletModel::FAILED_STATE) } + let(:app1) { create(:app_model) } + let!(:staged_droplet_for_app1) { create(:droplet_model, app: app1, state: DropletModel::STAGED_STATE) } + let!(:failed_droplet_for_app1) { create(:droplet_model, app: app1, state: DropletModel::FAILED_STATE) } - let(:app2) { AppModel.make } + let(:app2) { create(:app_model) } let(:space2) { app2.space } - let!(:staged_droplet_for_app2) { DropletModel.make(app_guid: app2.guid, state: DropletModel::STAGED_STATE) } + let!(:staged_droplet_for_app2) { create(:droplet_model, app: app2, state: DropletModel::STAGED_STATE) } - let(:app3) { AppModel.make } + let(:app3) { create(:app_model) } let(:space3) { app3.space } - let!(:expired_droplet_for_app3) { DropletModel.make(app_guid: app3.guid, state: DropletModel::EXPIRED_STATE) } + let!(:expired_droplet_for_app3) { create(:droplet_model, app: app3, state: DropletModel::EXPIRED_STATE) } let(:space_guids) { [space1.guid, space2.guid] } @@ -197,9 +197,9 @@ module VCAP::CloudController end describe '#fetch_for_app' do - let(:app) { AppModel.make } - let!(:staged_droplet) { DropletModel.make(app_guid: app.guid, state: DropletModel::STAGED_STATE) } - let!(:failed_droplet) { DropletModel.make(app_guid: app.guid, state: DropletModel::FAILED_STATE) } + let(:app) { create(:app_model) } + let!(:staged_droplet) { create(:droplet_model, app: app, state: DropletModel::STAGED_STATE) } + let!(:failed_droplet) { create(:droplet_model, app: app, state: DropletModel::FAILED_STATE) } let(:filters) { { app_guid: app.guid } } it 'returns a Sequel::Dataset' do @@ -229,7 +229,7 @@ module VCAP::CloudController context 'filtering states' do let(:filters) { { states: [DropletModel::FAILED_STATE], app_guid: app.guid } } - let!(:failed_droplet_not_on_app) { DropletModel.make(state: DropletModel::FAILED_STATE, app: nil) } + let!(:failed_droplet_not_on_app) { create(:droplet_model, state: DropletModel::FAILED_STATE, app: nil) } it 'returns all of the desired droplets with the requested droplet states' do _app, results = fetcher.fetch_for_app(message) @@ -265,9 +265,9 @@ module VCAP::CloudController end describe '#fetch_for_package' do - let(:package) { PackageModel.make } - let!(:staged_droplet) { DropletModel.make(package_guid: package.guid, state: DropletModel::STAGED_STATE, app: nil) } - let!(:failed_droplet) { DropletModel.make(package_guid: package.guid, state: DropletModel::FAILED_STATE, app: nil) } + let(:package) { create(:package_model) } + let!(:staged_droplet) { create(:droplet_model, package: package, state: DropletModel::STAGED_STATE, app: nil) } + let!(:failed_droplet) { create(:droplet_model, package: package, state: DropletModel::FAILED_STATE, app: nil) } let(:filters) { { package_guid: package.guid } } it 'returns a Sequel::Dataset' do @@ -297,7 +297,7 @@ module VCAP::CloudController context 'filtering states' do let(:filters) { { states: [DropletModel::FAILED_STATE], package_guid: package.guid } } - let!(:failed_droplet_not_on_package) { DropletModel.make(state: DropletModel::FAILED_STATE, app: nil) } + let!(:failed_droplet_not_on_package) { create(:droplet_model, state: DropletModel::FAILED_STATE, app: nil) } it 'returns all of the desired droplets with the requested droplet states' do _package, results = fetcher.fetch_for_package(message) diff --git a/spec/unit/fetchers/event_list_fetcher_spec.rb b/spec/unit/fetchers/event_list_fetcher_spec.rb index c599ae4c1ff..f4ce67cf362 100644 --- a/spec/unit/fetchers/event_list_fetcher_spec.rb +++ b/spec/unit/fetchers/event_list_fetcher_spec.rb @@ -10,18 +10,18 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_all' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:app_model) { AppModel.make(space:) } + let(:app_model) { create(:app_model, space:) } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) end context 'non-timestamp filtering' do - let!(:unscoped_event) { Event.make(actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } - let!(:org_scoped_event) { Event.make(created_at: Time.now + 100, organization_guid: org.guid) } - let!(:space_scoped_event) { Event.make(space_guid: space.guid, organization_guid: org.guid, actee: app_model.guid, type: 'audit.app.restart') } + let!(:unscoped_event) { create(:event, actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } + let!(:org_scoped_event) { create(:event, created_at: Time.now + 100, organization_guid: org.guid) } + let!(:space_scoped_event) { create(:event, space_guid: space.guid, organization_guid: org.guid, actee: app_model.guid, type: 'audit.app.restart') } it 'returns all of the events without any filters' do expect(subject).to contain_exactly(unscoped_event, org_scoped_event, space_scoped_event) diff --git a/spec/unit/fetchers/feature_flag_list_fetcher_spec.rb b/spec/unit/fetchers/feature_flag_list_fetcher_spec.rb index 3337cc9e1d8..bece3b1d421 100644 --- a/spec/unit/fetchers/feature_flag_list_fetcher_spec.rb +++ b/spec/unit/fetchers/feature_flag_list_fetcher_spec.rb @@ -12,10 +12,10 @@ module VCAP::CloudController VCAP::CloudController::FeatureFlag.plugin :timestamps, update_on_create: false end - let!(:resource_1) { VCAP::CloudController::FeatureFlag.make(name: 'set_roles_by_username', updated_at: '2020-05-26T18:47:01Z') } - let!(:resource_2) { VCAP::CloudController::FeatureFlag.make(name: 'task_creation', updated_at: '2020-05-26T18:47:02Z') } - let!(:resource_3) { VCAP::CloudController::FeatureFlag.make(name: 'user_org_creation', updated_at: '2020-05-26T18:47:03Z') } - let!(:resource_4) { VCAP::CloudController::FeatureFlag.make(name: 'unset_roles_by_username', updated_at: '2020-05-26T18:47:04Z') } + let!(:resource_1) { create(:feature_flag, name: 'set_roles_by_username', updated_at: '2020-05-26T18:47:01Z') } + let!(:resource_2) { create(:feature_flag, name: 'task_creation', updated_at: '2020-05-26T18:47:02Z') } + let!(:resource_3) { create(:feature_flag, name: 'user_org_creation', updated_at: '2020-05-26T18:47:03Z') } + let!(:resource_4) { create(:feature_flag, name: 'unset_roles_by_username', updated_at: '2020-05-26T18:47:04Z') } after do VCAP::CloudController::FeatureFlag.plugin :timestamps, update_on_create: true diff --git a/spec/unit/fetchers/global_usage_summary_fetcher_spec.rb b/spec/unit/fetchers/global_usage_summary_fetcher_spec.rb index f36f455609d..032d5ebf4d5 100644 --- a/spec/unit/fetchers/global_usage_summary_fetcher_spec.rb +++ b/spec/unit/fetchers/global_usage_summary_fetcher_spec.rb @@ -11,25 +11,25 @@ module VCAP::CloudController allow(CloudController::DependencyLocator).to receive(:instance).and_return(double(:api_client, routing_api_client:)) end - let!(:org) { Organization.make } - let!(:space) { Space.make(organization: org) } - let!(:completed_task) { TaskModel.make(state: TaskModel::SUCCEEDED_STATE, memory_in_mb: 100) } - let!(:running_task) { TaskModel.make(state: TaskModel::RUNNING_STATE, memory_in_mb: 100) } + let!(:org) { create(:organization) } + let!(:space) { create(:space, organization: org) } + let!(:completed_task) { create(:task_model, state: TaskModel::SUCCEEDED_STATE, memory_in_mb: 100) } + let!(:running_task) { create(:task_model, state: TaskModel::RUNNING_STATE, memory_in_mb: 100) } let!(:started_process1) { ProcessModelFactory.make(instances: 3, state: 'STARTED', memory: 100) } let!(:started_process2) { ProcessModelFactory.make(instances: 6, state: 'STARTED', memory: 100) } let!(:started_process3) { ProcessModelFactory.make(instances: 7, state: 'STARTED', memory: 100) } let!(:stopped_process) { ProcessModelFactory.make(instances: 2, state: 'STOPPED', memory: 100) } let!(:process2) { ProcessModelFactory.make(instances: 5, state: 'STARTED', memory: 100) } - let!(:service_instance1) { ServiceInstance.make(is_gateway_service: false) } - let!(:service_instance2) { ServiceInstance.make(is_gateway_service: true) } - let!(:service_instance3) { ServiceInstance.make(is_gateway_service: true) } - let!(:service_key1) { VCAP::CloudController::ServiceKey.make(service_instance: service_instance1) } - let!(:service_key2) { VCAP::CloudController::ServiceKey.make(service_instance: service_instance2) } - let!(:shared_domain_with_router_group) { SharedDomain.make(router_group_guid: 'rg-123') } - let!(:shared_domain_without_router_group) { SharedDomain.make(router_group_guid: nil) } - let!(:private_domain_without_router_group) { PrivateDomain.make(owning_organization: org) } - let!(:route1) { Route.make(host: '', domain: shared_domain_with_router_group, port: 8080) } - let!(:route2) { Route.make(host: '', domain: private_domain_without_router_group, space: space) } + let!(:service_instance1) { create(:service_instance, is_gateway_service: false) } + let!(:service_instance2) { create(:service_instance, is_gateway_service: true) } + let!(:service_instance3) { create(:service_instance, is_gateway_service: true) } + let!(:service_key1) { create(:service_key, service_instance: service_instance1) } + let!(:service_key2) { create(:service_key, service_instance: service_instance2) } + let!(:shared_domain_with_router_group) { create(:shared_domain, router_group_guid: 'rg-123') } + let!(:shared_domain_without_router_group) { create(:shared_domain, router_group_guid: nil) } + let!(:private_domain_without_router_group) { create(:private_domain, owning_organization: org) } + let!(:route1) { create(:route, host: '', domain: shared_domain_with_router_group, port: 8080) } + let!(:route2) { create(:route, host: '', domain: private_domain_without_router_group, space: space) } it 'returns a summary' do summary = fetcher.summary diff --git a/spec/unit/fetchers/isolation_segment_list_fetcher_spec.rb b/spec/unit/fetchers/isolation_segment_list_fetcher_spec.rb index 758979be668..9b6f7579fc3 100644 --- a/spec/unit/fetchers/isolation_segment_list_fetcher_spec.rb +++ b/spec/unit/fetchers/isolation_segment_list_fetcher_spec.rb @@ -9,13 +9,13 @@ module VCAP::CloudController let(:message) { IsolationSegmentsListMessage.from_params(filters) } subject { IsolationSegmentListFetcher.fetch_all(message) } - let!(:isolation_segment_model_1) { VCAP::CloudController::IsolationSegmentModel.make } - let!(:isolation_segment_model_2) { VCAP::CloudController::IsolationSegmentModel.make(name: 'frank') } - let!(:isolation_segment_model_3) { VCAP::CloudController::IsolationSegmentModel.make } + let!(:isolation_segment_model_1) { create(:isolation_segment_model) } + let!(:isolation_segment_model_2) { create(:isolation_segment_model, name: 'frank') } + let!(:isolation_segment_model_3) { create(:isolation_segment_model) } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:org3) { VCAP::CloudController::Organization.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:org3) { create(:organization) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } @@ -67,7 +67,7 @@ module VCAP::CloudController context 'filtering label selectors' do let(:filters) { { 'label_selector' => 'key=value' } } - let!(:label) { IsolationSegmentLabelModel.make(resource_guid: isolation_segment_model_3.guid, key_name: 'key', value: 'value') } + let!(:label) { create(:isolation_segment_label_model, resource_guid: isolation_segment_model_3.guid, key_name: 'key', value: 'value') } it 'returns the correct set of isosegs' do isolation_segment_models = subject.all diff --git a/spec/unit/fetchers/isolation_segment_organizations_fetcher_spec.rb b/spec/unit/fetchers/isolation_segment_organizations_fetcher_spec.rb index f498ddf086f..c4650edce6e 100644 --- a/spec/unit/fetchers/isolation_segment_organizations_fetcher_spec.rb +++ b/spec/unit/fetchers/isolation_segment_organizations_fetcher_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController RSpec.describe IsolationSegmentOrganizationsFetcher do subject(:fetcher) { IsolationSegmentOrganizationsFetcher.new(isolation_segment_model) } - let!(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let!(:isolation_segment_model) { create(:isolation_segment_model) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:org3) { VCAP::CloudController::Organization.make } - let(:org4) { VCAP::CloudController::Organization.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:org3) { create(:organization) } + let(:org4) { create(:organization) } before do assigner.assign(isolation_segment_model, [org1, org2, org3]) diff --git a/spec/unit/fetchers/isolation_segment_spaces_fetcher_spec.rb b/spec/unit/fetchers/isolation_segment_spaces_fetcher_spec.rb index b945c7a22db..93655ca1a10 100644 --- a/spec/unit/fetchers/isolation_segment_spaces_fetcher_spec.rb +++ b/spec/unit/fetchers/isolation_segment_spaces_fetcher_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController RSpec.describe IsolationSegmentSpacesFetcher do subject(:fetcher) { IsolationSegmentSpacesFetcher.new(isolation_segment_model) } - let!(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let!(:isolation_segment_model) { create(:isolation_segment_model) } - let(:org1) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } - let(:space1) { VCAP::CloudController::Space.make(organization: org1) } - let(:space2) { VCAP::CloudController::Space.make(organization: org2) } - let(:space3) { VCAP::CloudController::Space.make(organization: org2) } + let(:space1) { create(:space, organization: org1) } + let(:space2) { create(:space, organization: org2) } + let(:space3) { create(:space, organization: org2) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } diff --git a/spec/unit/fetchers/label_selector_query_generator_spec.rb b/spec/unit/fetchers/label_selector_query_generator_spec.rb index 75e59cefd16..81b8d02c9fc 100644 --- a/spec/unit/fetchers/label_selector_query_generator_spec.rb +++ b/spec/unit/fetchers/label_selector_query_generator_spec.rb @@ -5,15 +5,15 @@ module VCAP::CloudController subject(:label_selector_parser) { LabelSelectorQueryGenerator } describe '.add_selector_queries' do - let!(:app1) { AppModel.make } - let!(:app1_label) { AppLabelModel.make(resource_guid: app1.guid, key_name: 'foo', value: 'bar') } + let!(:app1) { create(:app_model) } + let!(:app1_label) { create(:app_label_model, resource_guid: app1.guid, key_name: 'foo', value: 'bar') } - let!(:app2) { AppModel.make } - let!(:app2_label) { AppLabelModel.make(resource_guid: app2.guid, key_name: 'foo', value: 'funky') } + let!(:app2) { create(:app_model) } + let!(:app2_label) { create(:app_label_model, resource_guid: app2.guid, key_name: 'foo', value: 'funky') } - let!(:app3) { AppModel.make } - let!(:app3_label) { AppLabelModel.make(resource_guid: app3.guid, key_name: 'foo', value: 'town') } - let!(:app3_exclusive_label) { AppLabelModel.make(resource_guid: app3.guid, key_name: 'easter', value: 'bunny') } + let!(:app3) { create(:app_model) } + let!(:app3_label) { create(:app_label_model, resource_guid: app3.guid, key_name: 'foo', value: 'town') } + let!(:app3_exclusive_label) { create(:app_label_model, resource_guid: app3.guid, key_name: 'easter', value: 'bunny') } let(:requirements) do [VCAP::CloudController::LabelSelectorRequirement.new(key: 'foo', operator: operator, values: values)] diff --git a/spec/unit/fetchers/log_access_fetcher_spec.rb b/spec/unit/fetchers/log_access_fetcher_spec.rb index f6a03805e26..2fb4cfbefdb 100644 --- a/spec/unit/fetchers/log_access_fetcher_spec.rb +++ b/spec/unit/fetchers/log_access_fetcher_spec.rb @@ -3,16 +3,16 @@ module VCAP::CloudController RSpec.describe LogAccessFetcher do - let(:space) { Space.make } - let(:process) { AppModel.make(space_guid: space.guid) } - let(:sad_process) { AppModel.make } + let(:space) { create(:space) } + let(:process) { create(:app_model, space: space) } + let(:sad_process) { create(:app_model) } let(:org) { space.organization } let(:fetcher) { LogAccessFetcher.new } let(:space_guids) { [space.guid] } describe '#app_exists?' do context 'for a v3 app guid' do - let(:app_model) { AppModel.make } + let(:app_model) { create(:app_model) } it 'returns true' do expect(fetcher.app_exists?(app_model.guid)).to be(true) @@ -20,7 +20,7 @@ module VCAP::CloudController end context 'for a v2 app guid' do - let(:app_v2) { ProcessModel.make } + let(:app_v2) { create(:process) } it 'returns true' do expect(fetcher.app_exists?(app_v2.guid)).to be(true) diff --git a/spec/unit/fetchers/null_filter_query_generator_spec.rb b/spec/unit/fetchers/null_filter_query_generator_spec.rb index 880fb20e4aa..41be5ad1a02 100644 --- a/spec/unit/fetchers/null_filter_query_generator_spec.rb +++ b/spec/unit/fetchers/null_filter_query_generator_spec.rb @@ -5,14 +5,14 @@ module VCAP::CloudController subject(:filter_generator) { NullFilterQueryGenerator } describe '.add_filter' do - let!(:stack1) { Stack.make } - let!(:stack2) { Stack.make } - let!(:stack3) { Stack.make } - - let!(:buildpack_with_stack1) { Buildpack.make(stack: stack1.name) } - let!(:buildpack_with_stack2) { Buildpack.make(stack: stack2.name) } - let!(:buildpack_with_stack3) { Buildpack.make(stack: stack3.name) } - let!(:buildpack_with_null_stack) { Buildpack.make(stack: nil) } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack) } + let!(:stack3) { create(:stack) } + + let!(:buildpack_with_stack1) { create(:buildpack, stack: stack1.name) } + let!(:buildpack_with_stack2) { create(:buildpack, stack: stack2.name) } + let!(:buildpack_with_stack3) { create(:buildpack, stack: stack3.name) } + let!(:buildpack_with_null_stack) { create(:buildpack, stack: nil) } context 'when no empty values included in filter' do let(:filter_values) { [stack1.name, stack2.name] } diff --git a/spec/unit/fetchers/org_list_fetcher_spec.rb b/spec/unit/fetchers/org_list_fetcher_spec.rb index 673de292a53..135090acb83 100644 --- a/spec/unit/fetchers/org_list_fetcher_spec.rb +++ b/spec/unit/fetchers/org_list_fetcher_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe OrgListFetcher do - let!(:org1) { Organization.make(name: 'Marmot') } - let!(:org2) { Organization.make(name: 'Rat') } - let!(:org3) { Organization.make(name: 'Beaver') } - let!(:org4) { Organization.make(name: 'Capybara') } - let!(:org5) { Organization.make(name: 'Groundhog') } + let!(:org1) { create(:organization, name: 'Marmot') } + let!(:org2) { create(:organization, name: 'Rat') } + let!(:org3) { create(:organization, name: 'Beaver') } + let!(:org4) { create(:organization, name: 'Capybara') } + let!(:org5) { create(:organization, name: 'Groundhog') } let(:some_org_guids) { [org1.guid, org3.guid, org4.guid] } let(:fetcher) { OrgListFetcher } @@ -121,8 +121,8 @@ module VCAP::CloudController let(:message) do OrgsListMessage.from_params({ 'label_selector' => 'key=value' }) end - let!(:org1label) { OrganizationLabelModel.make(key_name: 'key', value: 'value', organization: org1) } - let!(:org2label) { OrganizationLabelModel.make(key_name: 'key2', value: 'value2', organization: org2) } + let!(:org1label) { create(:organization_label_model, key_name: 'key', value: 'value', organization: org1) } + let!(:org2label) { create(:organization_label_model, key_name: 'key2', value: 'value2', organization: org2) } it 'returns the correct set of orgs' do results = fetcher.fetch_all(message:).all @@ -133,7 +133,7 @@ module VCAP::CloudController end describe '#fetch_for_isolation_segment' do - let(:isolation_segment) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } let(:message) { OrgsListMessage.from_params isolation_segment_guid: isolation_segment.guid } let(:readable_org_guids) { [org1.guid, org2.guid] } @@ -167,7 +167,7 @@ module VCAP::CloudController end describe '#fetch_all_for_isoation_segments' do - let(:isolation_segment) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } let(:message) { OrgsListMessage.from_params isolation_segment_guid: isolation_segment.guid } diff --git a/spec/unit/fetchers/organization_quota_list_fetcher_spec.rb b/spec/unit/fetchers/organization_quota_list_fetcher_spec.rb index 903b9b35ab2..bff5ac85078 100644 --- a/spec/unit/fetchers/organization_quota_list_fetcher_spec.rb +++ b/spec/unit/fetchers/organization_quota_list_fetcher_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController RSpec.describe OrganizationQuotaListFetcher do let(:default_quota) { VCAP::CloudController::QuotaDefinition.default } - let!(:quota1) { QuotaDefinition.make(name: 'Mercury', guid: 'quota1-guid') } - let!(:quota2) { QuotaDefinition.make(name: 'Venus', guid: 'quota2-guid') } - let!(:quota3) { QuotaDefinition.make(name: 'Jupiter', guid: 'quota3-guid') } + let!(:quota1) { create(:quota_definition, name: 'Mercury', guid: 'quota1-guid') } + let!(:quota2) { create(:quota_definition, name: 'Venus', guid: 'quota2-guid') } + let!(:quota3) { create(:quota_definition, name: 'Jupiter', guid: 'quota3-guid') } - let(:org1) { Organization.make(name: 'org1', quota_definition: quota1) } - let(:org2) { Organization.make(name: 'org2', quota_definition: quota3) } + let(:org1) { create(:organization, name: 'org1', quota_definition: quota1) } + let(:org2) { create(:organization, name: 'org2', quota_definition: quota3) } let(:visible_org_guids_query) { Organization.where(id: visible_org_ids).select(:guid) } let(:visible_org_ids) { [org1.id, org2.id] } diff --git a/spec/unit/fetchers/organization_user_roles_fetcher_spec.rb b/spec/unit/fetchers/organization_user_roles_fetcher_spec.rb index 246bf770d10..284d99e9758 100644 --- a/spec/unit/fetchers/organization_user_roles_fetcher_spec.rb +++ b/spec/unit/fetchers/organization_user_roles_fetcher_spec.rb @@ -4,13 +4,13 @@ module VCAP::CloudController RSpec.describe OrganizationUserRolesFetcher do describe '#fetch' do - let(:org) { Organization.make } - let(:everything_user) { User.make } - let(:manager) { User.make } - let(:auditor) { User.make } - let(:biller) { User.make } - let(:user) { User.make } - let!(:not_a_user) { User.make } + let(:org) { create(:organization) } + let(:everything_user) { create(:user) } + let(:manager) { create(:user) } + let(:auditor) { create(:user) } + let(:biller) { create(:user) } + let(:user) { create(:user) } + let!(:not_a_user) { create(:user) } let(:admin) { false } before do diff --git a/spec/unit/fetchers/package_fetcher_spec.rb b/spec/unit/fetchers/package_fetcher_spec.rb index 7ce1dcdc5dc..49457edde73 100644 --- a/spec/unit/fetchers/package_fetcher_spec.rb +++ b/spec/unit/fetchers/package_fetcher_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe PackageFetcher do describe '#fetch' do - let(:package) { PackageModel.make } + let(:package) { create(:package_model) } let(:space) { package.space } it 'returns the desired package and space' do diff --git a/spec/unit/fetchers/package_list_fetcher_spec.rb b/spec/unit/fetchers/package_list_fetcher_spec.rb index c4be7d23291..8273301416f 100644 --- a/spec/unit/fetchers/package_list_fetcher_spec.rb +++ b/spec/unit/fetchers/package_list_fetcher_spec.rb @@ -3,23 +3,23 @@ module VCAP::CloudController RSpec.describe PackageListFetcher do - let(:space1) { Space.make } - let(:space2) { Space.make } - let(:space3) { Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:org_1_guid) { space1.organization.guid } let(:org_2_guid) { space2.organization.guid } let(:org_3_guid) { space3.organization.guid } - let(:app_in_space1) { AppModel.make(space_guid: space1.guid) } - let(:app2_in_space1) { AppModel.make(space_guid: space1.guid) } - let(:app3_in_space2) { AppModel.make(space_guid: space2.guid) } - let(:app4_in_space3) { AppModel.make(space_guid: space3.guid) } + let(:app_in_space1) { create(:app_model, space: space1) } + let(:app2_in_space1) { create(:app_model, space: space1) } + let(:app3_in_space2) { create(:app_model, space: space2) } + let(:app4_in_space3) { create(:app_model, space: space3) } - let!(:package_in_space1) { PackageModel.make(app_guid: app_in_space1.guid, type: PackageModel::BITS_TYPE, state: PackageModel::FAILED_STATE) } - let!(:package2_in_space1) { PackageModel.make(app_guid: app_in_space1.guid, type: PackageModel::DOCKER_TYPE, state: PackageModel::READY_STATE) } - let!(:package_in_space3) { PackageModel.make(app_guid: app4_in_space3.guid, type: PackageModel::DOCKER_TYPE, state: PackageModel::FAILED_STATE) } + let!(:package_in_space1) { create(:package_model, app: app_in_space1, type: PackageModel::BITS_TYPE, state: PackageModel::FAILED_STATE) } + let!(:package2_in_space1) { create(:package_model, app: app_in_space1, type: PackageModel::DOCKER_TYPE, state: PackageModel::READY_STATE) } + let!(:package_in_space3) { create(:package_model, app: app4_in_space3, type: PackageModel::DOCKER_TYPE, state: PackageModel::FAILED_STATE) } - let!(:package_for_app2) { PackageModel.make(app_guid: app2_in_space1.guid, type: PackageModel::DOCKER_TYPE, state: PackageModel::CREATED_STATE) } - let!(:package_for_app3) { PackageModel.make(app_guid: app3_in_space2.guid, type: PackageModel::BITS_TYPE) } + let!(:package_for_app2) { create(:package_model, app: app2_in_space1, type: PackageModel::DOCKER_TYPE, state: PackageModel::CREATED_STATE) } + let!(:package_for_app3) { create(:package_model, app: app3_in_space2, type: PackageModel::BITS_TYPE) } subject(:fetcher) { PackageListFetcher } let(:message) { PackagesListMessage.from_params(filters) } @@ -92,7 +92,7 @@ module VCAP::CloudController context 'filtering label selectors' do let(:filters) { { 'label_selector' => 'key=value' } } - let!(:label) { PackageLabelModel.make(resource_guid: package_for_app3.guid, key_name: 'key', value: 'value') } + let!(:label) { create(:package_label_model, resource_guid: package_for_app3.guid, key_name: 'key', value: 'value') } it 'returns the correct set of packages' do expect(results.all).to contain_exactly(package_for_app3) @@ -101,7 +101,7 @@ module VCAP::CloudController context 'filtering org guids & label selectors' do let(:filters) { { 'label_selector' => 'key=value', organization_guids: [org_2_guid, org_3_guid] } } - let!(:label) { PackageLabelModel.make(resource_guid: package_for_app3.guid, key_name: 'key', value: 'value') } + let!(:label) { create(:package_label_model, resource_guid: package_for_app3.guid, key_name: 'key', value: 'value') } it 'returns the correct set of packages' do expect(results.all).to contain_exactly(package_for_app3) diff --git a/spec/unit/fetchers/process_fetcher_spec.rb b/spec/unit/fetchers/process_fetcher_spec.rb index a56751bb232..da606a00136 100644 --- a/spec/unit/fetchers/process_fetcher_spec.rb +++ b/spec/unit/fetchers/process_fetcher_spec.rb @@ -6,9 +6,9 @@ module VCAP::CloudController subject(:fetcher) { ProcessFetcher } describe '.fetch' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:space) { app.space } - let!(:process) { ProcessModel.make(app:) } + let!(:process) { create(:process, app:) } it 'returns the process and space' do actual_process, actual_space = fetcher.fetch(process_guid: process.guid) @@ -26,9 +26,9 @@ module VCAP::CloudController end describe 'fetch_for_app_by_type' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:space) { app.space } - let!(:process) { ProcessModel.make(app:) } + let!(:process) { create(:process, app:) } it 'returns the process, app, space' do actual_process, actual_app, actual_space = fetcher.fetch_for_app_by_type(process_type: process.type, app_guid: app.guid) @@ -47,10 +47,10 @@ module VCAP::CloudController end context 'when there are multiple matching processes by type' do - let!(:process_2) { ProcessModel.make(app: app, guid: 'process_2', created_at: process.created_at) } - let!(:process_3) { ProcessModel.make(app: app, guid: 'process_3', created_at: process.created_at + 2) } - let!(:process_4) { ProcessModel.make(app: app, guid: 'process_4', created_at: process.created_at + 3) } - let!(:process_5) { ProcessModel.make(app: app, guid: 'process_5', created_at: process.created_at + 2) } + let!(:process_2) { create(:process, app: app, guid: 'process_2', created_at: process.created_at) } + let!(:process_3) { create(:process, app: app, guid: 'process_3', created_at: process.created_at + 2) } + let!(:process_4) { create(:process, app: app, guid: 'process_4', created_at: process.created_at + 3) } + let!(:process_5) { create(:process, app: app, guid: 'process_5', created_at: process.created_at + 2) } it 'returns the newest one' do actual_process, actual_app, actual_space = fetcher.fetch_for_app_by_type(process_type: process.type, app_guid: app.guid) @@ -61,8 +61,8 @@ module VCAP::CloudController end context 'when multiple matching processes were created simultaneously' do - let!(:process_2) { ProcessModel.make(app: app, guid: 'process_2', created_at: process.created_at) } - let!(:process_3) { ProcessModel.make(app: app, guid: 'process_3', created_at: process.created_at) } + let!(:process_2) { create(:process, app: app, guid: 'process_2', created_at: process.created_at) } + let!(:process_3) { create(:process, app: app, guid: 'process_3', created_at: process.created_at) } it 'returns the one with the higher id' do actual_process, actual_app, actual_space = fetcher.fetch_for_app_by_type(process_type: process.type, app_guid: app.guid) diff --git a/spec/unit/fetchers/process_list_fetcher_spec.rb b/spec/unit/fetchers/process_list_fetcher_spec.rb index de9402ccee6..b76ab2cf0a2 100644 --- a/spec/unit/fetchers/process_list_fetcher_spec.rb +++ b/spec/unit/fetchers/process_list_fetcher_spec.rb @@ -11,9 +11,9 @@ module VCAP::CloudController describe '#fetch_all' do subject { ProcessListFetcher.fetch_all(message, eager_loaded_associations:) } - let!(:web) { ProcessModel.make(type: 'web') } - let!(:web2) { ProcessModel.make(type: 'web') } - let!(:worker) { ProcessModel.make(type: 'worker') } + let!(:web) { create(:process, type: 'web') } + let!(:web2) { create(:process, type: 'web') } + let!(:worker) { create(:process, type: 'worker') } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) @@ -64,8 +64,8 @@ module VCAP::CloudController end context 'app guids' do - let!(:desired_process) { ProcessModel.make(app: desired_app) } - let(:desired_app) { AppModel.make } + let!(:desired_process) { create(:process, app: desired_app) } + let(:desired_app) { create(:app_model) } let(:filters) { { app_guids: [desired_app.guid] } } it 'only returns matching processes' do @@ -85,7 +85,7 @@ module VCAP::CloudController context 'label selectors' do let(:filters) { { 'label_selector' => 'key=value' } } - let!(:label) { ProcessLabelModel.make(resource_guid: web2.guid, key_name: 'key', value: 'value') } + let!(:label) { create(:process_label_model, resource_guid: web2.guid, key_name: 'key', value: 'value') } it 'returns the correct set of packages' do results = subject.all @@ -96,18 +96,18 @@ module VCAP::CloudController end describe '#fetch_for_spaces' do - let(:app1) { AppModel.make } + let(:app1) { create(:app_model) } let(:space1) { app1.space } - let!(:process_in_space1) { ProcessModel.make(app: app1, type: 'a') } - let!(:process2_in_space1) { ProcessModel.make(app: app1, type: 'b') } - let(:app2) { AppModel.make } + let!(:process_in_space1) { create(:process, app: app1, type: 'a') } + let!(:process2_in_space1) { create(:process, app: app1, type: 'b') } + let(:app2) { create(:app_model) } let(:space2) { app2.space } - let!(:process_in_space2) { ProcessModel.make(app: app2) } + let!(:process_in_space2) { create(:process, app: app2) } let(:space_guids) { [] } subject { ProcessListFetcher.fetch_for_spaces(message, space_guids:, eager_loaded_associations:) } - before { ProcessModel.make } + before { create(:process) } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) @@ -146,7 +146,7 @@ module VCAP::CloudController end describe '#fetch_for_app' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:filters) { { app_guid: app.guid } } subject { ProcessListFetcher.fetch_for_app(message, eager_loaded_associations:) } @@ -161,7 +161,7 @@ module VCAP::CloudController let(:eager_loaded_associations) { [:labels] } it 'eager loads the specified resources for the processes' do - ProcessModel.make(:process, app:) + create(:process, :process, app:) _, processes_dataset = subject results = processes_dataset.all @@ -172,9 +172,9 @@ module VCAP::CloudController end it 'returns the processes for the app' do - process1 = ProcessModel.make(:process, app:) - process2 = ProcessModel.make(:process, app:) - ProcessModel.make(:process) + process1 = create(:process, :process, app:) + process2 = create(:process, :process, app:) + create(:process, :process) _app, results = subject expect(results.all).to contain_exactly(process1, process2) diff --git a/spec/unit/fetchers/queries/app_query_spec.rb b/spec/unit/fetchers/queries/app_query_spec.rb index aa3c439213e..36c619633f6 100644 --- a/spec/unit/fetchers/queries/app_query_spec.rb +++ b/spec/unit/fetchers/queries/app_query_spec.rb @@ -7,8 +7,8 @@ module VCAP::RestAPI describe 'filtering by organization_guid' do it 'works for equals' do - expected_process = VCAP::CloudController::ProcessModel.make - VCAP::CloudController::ProcessModel.make + expected_process = create(:process_model).reload + create(:process_model) results = AppQuery.filtered_dataset_from_query_params( VCAP::CloudController::ProcessModel, @@ -21,9 +21,9 @@ module VCAP::RestAPI end it 'works for IN' do - expected_process1 = VCAP::CloudController::ProcessModel.make - expected_process2 = VCAP::CloudController::ProcessModel.make - VCAP::CloudController::ProcessModel.make + expected_process1 = create(:process_model).reload + expected_process2 = create(:process_model).reload + create(:process_model) org_guids = [expected_process1.organization.guid, expected_process2.organization.guid].join(',') @@ -40,8 +40,8 @@ module VCAP::RestAPI describe 'filtering by stack_guid' do it 'works for equals' do - expected_process = VCAP::CloudController::ProcessModel.make - VCAP::CloudController::ProcessModel.make + expected_process = create(:process_model) + create(:process_model) results = AppQuery.filtered_dataset_from_query_params( VCAP::CloudController::ProcessModel, @@ -54,9 +54,9 @@ module VCAP::RestAPI end it 'works for IN' do - expected_process1 = VCAP::CloudController::ProcessModel.make - expected_process2 = VCAP::CloudController::ProcessModel.make - VCAP::CloudController::ProcessModel.make + expected_process1 = create(:process_model) + expected_process2 = create(:process_model) + create(:process_model) stack_guids = [ VCAP::CloudController::Stack.find(name: expected_process1.app.lifecycle_data.stack).guid, @@ -76,9 +76,9 @@ module VCAP::RestAPI describe 'filtering by name' do it 'works for equals' do - expected_process = VCAP::CloudController::ProcessModel.make + expected_process = create(:process_model) expected_process.app.update(name: 'expected-name') - VCAP::CloudController::ProcessModel.make + create(:process_model) results = AppQuery.filtered_dataset_from_query_params( VCAP::CloudController::ProcessModel, @@ -91,11 +91,11 @@ module VCAP::RestAPI end it 'works for IN' do - expected_process1 = VCAP::CloudController::ProcessModel.make + expected_process1 = create(:process_model) expected_process1.app.update(name: 'expected-name1') - expected_process2 = VCAP::CloudController::ProcessModel.make + expected_process2 = create(:process_model) expected_process2.app.update(name: 'expected-name2') - VCAP::CloudController::ProcessModel.make + create(:process_model) results = AppQuery.filtered_dataset_from_query_params( VCAP::CloudController::ProcessModel, diff --git a/spec/unit/fetchers/queries/route_mapping_query_spec.rb b/spec/unit/fetchers/queries/route_mapping_query_spec.rb index 290aa85d88d..08f5b299556 100644 --- a/spec/unit/fetchers/queries/route_mapping_query_spec.rb +++ b/spec/unit/fetchers/queries/route_mapping_query_spec.rb @@ -9,9 +9,9 @@ module VCAP::RestAPI context 'equals operation (:)' do it 'works with a single app guid' do app_guid = 'some_app_guid' - app_model = VCAP::CloudController::AppModel.make(guid: app_guid) + app_model = create(:app_model, guid: app_guid) - route_mapping = VCAP::CloudController::RouteMappingModel.make(app: app_model, app_port: 1) + route_mapping = create(:route_mapping_model, app: app_model, app_port: 1) results = AppQuery.filtered_dataset_from_query_params( VCAP::CloudController::RouteMappingModel, @@ -38,11 +38,11 @@ module VCAP::RestAPI context 'IN operation' do it 'works for IN with a single app guid' do app_guid = 'some_app_guid' - app_model = VCAP::CloudController::AppModel.make(guid: app_guid) + app_model = create(:app_model, guid: app_guid) - route_mapping_1 = VCAP::CloudController::RouteMappingModel.make(app: app_model, app_port: 1) - route_mapping_2 = VCAP::CloudController::RouteMappingModel.make(app: app_model, app_port: 2) - VCAP::CloudController::RouteMappingModel.make(app_guid: 'different_app_guid') + route_mapping_1 = create(:route_mapping_model, app: app_model, app_port: 1) + route_mapping_2 = create(:route_mapping_model, app: app_model, app_port: 2) + create(:route_mapping_model, app: create(:app_model, guid: 'different_app_guid')) results = RouteMappingQuery.filtered_dataset_from_query_params( VCAP::CloudController::RouteMappingModel, @@ -56,15 +56,15 @@ module VCAP::RestAPI it 'works for IN with multiple app guids' do app_guid1 = 'some_app_guid1' - app_model1 = VCAP::CloudController::AppModel.make(guid: app_guid1) - route_mapping_1 = VCAP::CloudController::RouteMappingModel.make(app: app_model1, app_port: 1) - route_mapping_2 = VCAP::CloudController::RouteMappingModel.make(app: app_model1, app_port: 2) + app_model1 = create(:app_model, guid: app_guid1) + route_mapping_1 = create(:route_mapping_model, app: app_model1, app_port: 1) + route_mapping_2 = create(:route_mapping_model, app: app_model1, app_port: 2) app_guid2 = 'some_app_guid2' - app_model2 = VCAP::CloudController::AppModel.make(guid: app_guid2) - route_mapping_3 = VCAP::CloudController::RouteMappingModel.make(app: app_model2, app_port: 3) + app_model2 = create(:app_model, guid: app_guid2) + route_mapping_3 = create(:route_mapping_model, app: app_model2, app_port: 3) - VCAP::CloudController::RouteMappingModel.make(app_guid: 'different_app_guid') + create(:route_mapping_model, app: create(:app_model, guid: 'different_app_guid')) results = RouteMappingQuery.filtered_dataset_from_query_params( VCAP::CloudController::RouteMappingModel, diff --git a/spec/unit/fetchers/role_list_fetcher_spec.rb b/spec/unit/fetchers/role_list_fetcher_spec.rb index d9964dd888f..d4b6bdc8a08 100644 --- a/spec/unit/fetchers/role_list_fetcher_spec.rb +++ b/spec/unit/fetchers/role_list_fetcher_spec.rb @@ -6,17 +6,17 @@ module VCAP::CloudController describe '#fetch' do subject { RoleListFetcher.fetch(message, Role.dataset) } - let!(:user1) { User.make } - let!(:user2) { User.make } - let!(:org_1) { Organization.make } - let!(:org_2) { Organization.make } - let!(:space_1) { Space.make(organization: org_1) } - let!(:space_2) { Space.make(organization: org_2) } - let!(:space_1_role_1) { SpaceAuditor.make(user: user1, space: space_1) } - let!(:space_2_role_1) { SpaceAuditor.make(user: user1, space: space_2) } - let!(:org_1_role_1) { OrganizationUser.make(user: user1, organization: org_1) } - let!(:space_1_role_2) { SpaceManager.make(user: user2, space: space_1) } - let!(:org_1_role_2) { OrganizationUser.make(user: user2, organization: org_1) } + let!(:user1) { create(:user) } + let!(:user2) { create(:user) } + let!(:org_1) { create(:organization) } + let!(:org_2) { create(:organization) } + let!(:space_1) { create(:space, organization: org_1) } + let!(:space_2) { create(:space, organization: org_2) } + let!(:space_1_role_1) { create(:space_auditor, user: user1, space: space_1) } + let!(:space_2_role_1) { create(:space_auditor, user: user1, space: space_2) } + let!(:org_1_role_1) { create(:organization_user, user: user1, organization: org_1) } + let!(:space_1_role_2) { create(:space_manager, user: user2, space: space_1) } + let!(:org_1_role_2) { create(:organization_user, user: user2, organization: org_1) } let(:message) { RolesListMessage.from_params(filters) } diff --git a/spec/unit/fetchers/route_binding_list_fetcher_spec.rb b/spec/unit/fetchers/route_binding_list_fetcher_spec.rb index be607d2980b..0bee900f623 100644 --- a/spec/unit/fetchers/route_binding_list_fetcher_spec.rb +++ b/spec/unit/fetchers/route_binding_list_fetcher_spec.rb @@ -7,7 +7,7 @@ module CloudController let(:fetcher) { described_class } describe 'fetch_all' do - let!(:route_bindings) { Array.new(3) { RouteBinding.make } } + let!(:route_bindings) { create_list(:route_binding, 3) } it 'returns all route bindings' do fetched_route_bindings = fetcher.fetch_all( @@ -62,9 +62,9 @@ module CloudController context 'can be filtered by label selector' do before do - RouteBindingLabelModel.make(key_name: 'fruit', value: 'strawberry', route_binding: route_bindings[0]) - RouteBindingLabelModel.make(key_name: 'fruit', value: 'strawberry', route_binding: route_bindings[1]) - RouteBindingLabelModel.make(key_name: 'fruit', value: 'lemon', route_binding: route_bindings[2]) + create(:route_binding_label_model, key_name: 'fruit', value: 'strawberry', route_binding: route_bindings[0]) + create(:route_binding_label_model, key_name: 'fruit', value: 'strawberry', route_binding: route_bindings[1]) + create(:route_binding_label_model, key_name: 'fruit', value: 'lemon', route_binding: route_bindings[2]) end it 'returns instances with matching labels' do @@ -80,15 +80,15 @@ module CloudController end describe 'fetch_some' do - let(:target_space) { Space.make } + let(:target_space) { create(:space) } before do make_other_route_bindings end it 'returns route bindings related to a set of space guids' do - service_instance_in_target_space = UserProvidedServiceInstance.make(:routing, space: target_space) - route_bindings_in_target_space = Array.new(3) { RouteBinding.make(service_instance: service_instance_in_target_space) } + service_instance_in_target_space = create(:user_provided_service_instance, :routing, space: target_space) + route_bindings_in_target_space = create_list(:route_binding, 3, service_instance: service_instance_in_target_space) fetched_route_bindings = fetcher.fetch_some( ServiceRouteBindingsListMessage.from_params({}), @@ -100,8 +100,8 @@ module CloudController it 'can be filtered by service_instance_guids' do route_bindings_in_target_space = Array.new(3) do - service_instance_in_target_space = UserProvidedServiceInstance.make(:routing, space: target_space) - RouteBinding.make(service_instance: service_instance_in_target_space) + service_instance_in_target_space = create(:user_provided_service_instance, :routing, space: target_space) + create(:route_binding, service_instance: service_instance_in_target_space) end filtered_route_bindings = route_bindings_in_target_space[0..-2] @@ -117,8 +117,8 @@ module CloudController it 'can be filtered by service_instance_names' do route_bindings_in_target_space = Array.new(3) do - service_instance_in_target_space = UserProvidedServiceInstance.make(:routing, space: target_space) - RouteBinding.make(service_instance: service_instance_in_target_space) + service_instance_in_target_space = create(:user_provided_service_instance, :routing, space: target_space) + create(:route_binding, service_instance: service_instance_in_target_space) end filtered_route_bindings = route_bindings_in_target_space[0..-2] @@ -134,8 +134,8 @@ module CloudController it 'can be filtered by route_guids' do route_bindings_in_target_space = Array.new(3) do - service_instance_in_target_space = UserProvidedServiceInstance.make(:routing, space: target_space) - RouteBinding.make(service_instance: service_instance_in_target_space) + service_instance_in_target_space = create(:user_provided_service_instance, :routing, space: target_space) + create(:route_binding, service_instance: service_instance_in_target_space) end filtered_route_bindings = route_bindings_in_target_space[0..-2] @@ -150,7 +150,7 @@ module CloudController end it 'eager loads the specified resources' do - RouteBinding.make(service_instance: UserProvidedServiceInstance.make(:routing, space: target_space)) + create(:route_binding, service_instance: create(:user_provided_service_instance, :routing, space: target_space)) dataset = fetcher.fetch_some( ServiceRouteBindingsListMessage.from_params({}), @@ -163,7 +163,7 @@ module CloudController end def make_other_route_bindings - Array.new(3) { RouteBinding.make } + create_list(:route_binding, 3) end end diff --git a/spec/unit/fetchers/route_destinations_list_fetcher_spec.rb b/spec/unit/fetchers/route_destinations_list_fetcher_spec.rb index 986f791d669..fb32a52d69a 100644 --- a/spec/unit/fetchers/route_destinations_list_fetcher_spec.rb +++ b/spec/unit/fetchers/route_destinations_list_fetcher_spec.rb @@ -9,8 +9,8 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_for_route' do - let!(:route1) { Route.make } - let!(:route2) { Route.make } + let!(:route1) { create(:route) } + let!(:route2) { create(:route) } it 'returns a Sequel::Dataset' do results = fetcher.fetch_for_route(route: route1) @@ -18,10 +18,10 @@ module VCAP::CloudController end it 'returns only the destinations for the requested route' do - dest1_for_route1 = RouteMappingModel.make(route: route1) - dest2_for_route1 = RouteMappingModel.make(route: route1) + dest1_for_route1 = create(:route_mapping_model, route: route1) + dest2_for_route1 = create(:route_mapping_model, route: route1) - RouteMappingModel.make(route: route2) + create(:route_mapping_model, route: route2) results = fetcher.fetch_for_route(route: route1).all expect(results).to contain_exactly(dest1_for_route1, dest2_for_route1) @@ -29,9 +29,9 @@ module VCAP::CloudController context 'filter' do context 'app_guids' do - let(:space) { Space.make } - let!(:destination1) { RouteMappingModel.make(app: AppModel.make(space:), route: route1) } - let!(:destination2) { RouteMappingModel.make(app: AppModel.make(space:), route: route1) } + let(:space) { create(:space) } + let!(:destination1) { create(:route_mapping_model, app: create(:app_model, space:), route: route1) } + let!(:destination2) { create(:route_mapping_model, app: create(:app_model, space:), route: route1) } let(:filters) { { app_guids: [destination1.app.guid] } } it 'only returns destinations for the requested app guids' do @@ -42,10 +42,10 @@ module VCAP::CloudController end context 'guids' do - let(:space) { Space.make } - let!(:destination1) { RouteMappingModel.make(app: AppModel.make(space:), route: route1) } - let!(:destination2) { RouteMappingModel.make(app: AppModel.make(space:), route: route1) } - let!(:destination3) { RouteMappingModel.make(app: AppModel.make(space:), route: route1) } + let(:space) { create(:space) } + let!(:destination1) { create(:route_mapping_model, app: create(:app_model, space:), route: route1) } + let!(:destination2) { create(:route_mapping_model, app: create(:app_model, space:), route: route1) } + let!(:destination3) { create(:route_mapping_model, app: create(:app_model, space:), route: route1) } let(:filters) { { guids: [destination1.guid, destination2.guid] } } it 'only returns destinations for the requested destination guids' do diff --git a/spec/unit/fetchers/route_fetcher_spec.rb b/spec/unit/fetchers/route_fetcher_spec.rb index bfd751970de..d28a0c2dde2 100644 --- a/spec/unit/fetchers/route_fetcher_spec.rb +++ b/spec/unit/fetchers/route_fetcher_spec.rb @@ -9,13 +9,13 @@ module VCAP::CloudController Route.dataset.destroy end - let!(:space1) { Space.make } - let!(:space2) { Space.make } - let!(:domain1) { SharedDomain.make } - let!(:domain2) { SharedDomain.make } - let!(:route1) { Route.make(guid: 'route1_guid', host: 'host1', path: '/path1', space: space1, domain: domain1) } - let!(:route2) { Route.make(guid: 'route2_guid', host: 'host2', path: '/path2', space: space1, domain: domain1) } - let!(:route3) { Route.make(guid: 'route3_guid', host: 'host3', path: '/path1', space: space2, domain: domain2) } + let!(:space1) { create(:space) } + let!(:space2) { create(:space) } + let!(:domain1) { create(:shared_domain) } + let!(:domain2) { create(:shared_domain) } + let!(:route1) { create(:route, guid: 'route1_guid', host: 'host1', path: '/path1', space: space1, domain: domain1) } + let!(:route2) { create(:route, guid: 'route2_guid', host: 'host2', path: '/path2', space: space1, domain: domain1) } + let!(:route3) { create(:route, guid: 'route3_guid', host: 'host3', path: '/path1', space: space2, domain: domain2) } let(:message) do RoutesListMessage.from_params(routes_filter) @@ -29,8 +29,8 @@ module VCAP::CloudController end it 'does not duplicate routes when shared' do - space3 = Space.make - shared_route = Route.make(guid: 'shared_route_guid', host: 'host1', path: '/path_shared', space: space1, domain: domain1) + space3 = create(:space) + shared_route = create(:route, guid: 'shared_route_guid', host: 'host1', path: '/path_shared', space: space1, domain: domain1) shared_route.add_shared_space(space2) shared_route.add_shared_space(space3) expect(RouteFetcher.fetch(message, omniscient: true).all).to contain_exactly(route1, route2, route3, shared_route) @@ -42,8 +42,8 @@ module VCAP::CloudController end it 'fetches the instances shared to readable spaces' do - space3 = Space.make - shared_route = Route.make(space: space3) + space3 = create(:space) + shared_route = create(:route, space: space3) shared_route.add_shared_space(space2) dataset = RouteFetcher.fetch(message, readable_space_guids_dataset: Space.where(id: [space2.id]).select(:guid)) expect(dataset.all).to contain_exactly(route3, shared_route) @@ -117,8 +117,8 @@ module VCAP::CloudController let(:routes_filter) { { space_guids: space2.guid } } it 'only returns the matching route' do - space4 = Space.make - shared_route = Route.make(space: space4) + space4 = create(:space) + shared_route = create(:route, space: space4) shared_route.add_shared_space(space2) expect(results.map(&:guid)).to contain_exactly(shared_route.guid, route3.guid) end @@ -182,9 +182,9 @@ module VCAP::CloudController end context 'when there is a matching route' do - let(:domain_tcp) { VCAP::CloudController::SharedDomain.make(router_group_guid: router_group.guid, name: 'my.domain') } + let(:domain_tcp) { create(:shared_domain, router_group_guid: router_group.guid, name: 'my.domain') } let!(:route_with_ports) do - VCAP::CloudController::Route.make(host: '', space: space1, domain: domain_tcp, guid: 'route-with-port', port: 8888) + create(:route, host: '', space: space1, domain: domain_tcp, guid: 'route-with-port', port: 8888) end let(:routes_filter) { { ports: '8888' } } @@ -205,15 +205,15 @@ module VCAP::CloudController context 'when fetching routes by label selector' do let!(:route_label) do - VCAP::CloudController::RouteLabelModel.make(resource_guid: route1.guid, key_name: 'dog', value: 'scooby-doo') + create(:route_label_model, resource_guid: route1.guid, key_name: 'dog', value: 'scooby-doo') end let!(:sad_route_label) do - VCAP::CloudController::RouteLabelModel.make(resource_guid: route2.guid, key_name: 'dog', value: 'poodle') + create(:route_label_model, resource_guid: route2.guid, key_name: 'dog', value: 'poodle') end let!(:happiest_route_label) do - VCAP::CloudController::RouteLabelModel.make(resource_guid: route3.guid, key_name: 'dog', value: 'chihuahua') + create(:route_label_model, resource_guid: route3.guid, key_name: 'dog', value: 'chihuahua') end context 'only the label_selector is present' do @@ -240,10 +240,10 @@ module VCAP::CloudController end context 'when fetching routes for several apps' do - let(:app_model) { AppModel.make(space: space1) } - let(:app_model2) { AppModel.make(space: space1) } - let!(:destination1) { RouteMappingModel.make(app: app_model, route: route1, process_type: 'web') } - let!(:destination2) { RouteMappingModel.make(app: app_model2, route: route2, process_type: 'worker') } + let(:app_model) { create(:app_model, space: space1) } + let(:app_model2) { create(:app_model, space: space1) } + let!(:destination1) { create(:route_mapping_model, app: app_model, route: route1, process_type: 'web') } + let!(:destination2) { create(:route_mapping_model, app: app_model2, route: route2, process_type: 'worker') } let(:routes_filter) { { app_guids: [app_model.guid, app_model2.guid] } } it 'only returns routes that are mapped to the app' do @@ -252,9 +252,9 @@ module VCAP::CloudController end context 'when fetching routes for an app' do - let(:app_model) { AppModel.make(space: space1) } - let!(:destination1) { RouteMappingModel.make(app: app_model, route: route1, process_type: 'web') } - let!(:destination2) { RouteMappingModel.make(app: app_model, route: route2, process_type: 'worker') } + let(:app_model) { create(:app_model, space: space1) } + let!(:destination1) { create(:route_mapping_model, app: app_model, route: route1, process_type: 'web') } + let!(:destination2) { create(:route_mapping_model, app: app_model, route: route2, process_type: 'worker') } let(:routes_filter) { { app_guids: [app_model.guid] } } it 'only returns routes that are mapped to the app' do @@ -263,8 +263,8 @@ module VCAP::CloudController end context 'when fetching routes by service_instance_guid' do - let!(:service_instance) { ManagedServiceInstance.make(:routing, space: space2, name: 'service-instance') } - let!(:service_binding) { RouteBinding.make(service_instance: service_instance, route: route3) } + let!(:service_instance) { create(:managed_service_instance, :routing, space: space2, name: 'service-instance') } + let!(:service_binding) { create(:route_binding, service_instance: service_instance, route: route3) } context 'when there is a matching route' do let(:routes_filter) { { service_instance_guids: service_instance.guid } } @@ -285,11 +285,11 @@ module VCAP::CloudController end context 'when fetching routes by service_instance_guid and app_guid' do - let!(:service_instance) { ManagedServiceInstance.make(:routing, space: space2, name: 'service-instance') } - let!(:service_binding) { RouteBinding.make(service_instance: service_instance, route: route3) } + let!(:service_instance) { create(:managed_service_instance, :routing, space: space2, name: 'service-instance') } + let!(:service_binding) { create(:route_binding, service_instance: service_instance, route: route3) } - let!(:app_model) { AppModel.make(space: space2) } - let!(:route_mapping) { RouteMappingModel.make(app: app_model, route: route3) } + let!(:app_model) { create(:app_model, space: space2) } + let!(:route_mapping) { create(:route_mapping_model, app: app_model, route: route3) } context 'when there is a matching route' do let(:routes_filter) { { service_instance_guids: service_instance.guid, app_guids: app_model.guid } } diff --git a/spec/unit/fetchers/security_group_fetcher_spec.rb b/spec/unit/fetchers/security_group_fetcher_spec.rb index a22f512318d..be6227cb95d 100644 --- a/spec/unit/fetchers/security_group_fetcher_spec.rb +++ b/spec/unit/fetchers/security_group_fetcher_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController RSpec.describe SecurityGroupFetcher do let(:fetcher) { SecurityGroupFetcher } - let!(:security_group_1) { SecurityGroup.make } - let!(:security_group_2) { SecurityGroup.make } - let(:associated_space) { Space.make } + let!(:security_group_1) { create(:security_group) } + let!(:security_group_2) { create(:security_group) } + let(:associated_space) { create(:space) } let(:visible_security_groups) { nil } let(:security_group) { fetcher.fetch(security_group_1.guid, visible_security_groups) } diff --git a/spec/unit/fetchers/security_group_list_fetcher_spec.rb b/spec/unit/fetchers/security_group_list_fetcher_spec.rb index 26b9593fc41..04cf86d092c 100644 --- a/spec/unit/fetchers/security_group_list_fetcher_spec.rb +++ b/spec/unit/fetchers/security_group_list_fetcher_spec.rb @@ -8,11 +8,11 @@ module VCAP::CloudController let(:fetcher) { SecurityGroupListFetcher } let(:message) { SecurityGroupListMessage.from_params(filters) } let(:filters) { {} } - let!(:security_group_1) { SecurityGroup.make } - let!(:security_group_2) { SecurityGroup.make } - let!(:security_group_3) { SecurityGroup.make } + let!(:security_group_1) { create(:security_group) } + let!(:security_group_2) { create(:security_group) } + let!(:security_group_3) { create(:security_group) } let(:security_groups) {} - let(:associated_space) { Space.make } + let(:associated_space) { create(:space) } shared_examples 'eager loading' do it 'eager loads running and staging spaces' do diff --git a/spec/unit/fetchers/service_binding_create_fetcher_spec.rb b/spec/unit/fetchers/service_binding_create_fetcher_spec.rb index 1aafff502d3..4c345a12080 100644 --- a/spec/unit/fetchers/service_binding_create_fetcher_spec.rb +++ b/spec/unit/fetchers/service_binding_create_fetcher_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe ServiceBindingCreateFetcher do describe '#fetch' do - let(:app_model) { AppModel.make(name: 'my-app') } - let(:service_instance) { ServiceInstance.make(name: 'my-service', space_guid: app_model.space.guid) } + let(:app_model) { create(:app_model, name: 'my-app') } + let(:service_instance) { create(:service_instance, name: 'my-service', space_guid: app_model.space.guid) } it 'returns the app and service instance' do fetched_app, fetched_instance = ServiceBindingCreateFetcher.new.fetch(app_model.guid, service_instance.guid) diff --git a/spec/unit/fetchers/service_binding_list_fetcher_spec.rb b/spec/unit/fetchers/service_binding_list_fetcher_spec.rb index 228e1c2e859..153001b1c6c 100644 --- a/spec/unit/fetchers/service_binding_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_binding_list_fetcher_spec.rb @@ -6,8 +6,8 @@ module VCAP::CloudController let(:fetcher) { ServiceBindingListFetcher } describe '#fetch_service_instance_bindings_in_space' do - let(:space) { Space.make } - let(:service_instance) { ServiceInstance.make(space:) } + let(:space) { create(:space) } + let(:service_instance) { create(:service_instance, space:) } it 'returns a Sequel::Dataset' do results = ServiceBindingListFetcher.fetch_service_instance_bindings_in_space(service_instance.guid, space.guid) @@ -22,8 +22,8 @@ module VCAP::CloudController end context 'when a binding exists in a space' do - let!(:service_binding) { ServiceBinding.make(app: AppModel.make(space:), service_instance: service_instance) } - let!(:other_service_binding) { ServiceBinding.make } + let!(:service_binding) { create(:service_binding, app: create(:app_model, space:), service_instance: service_instance) } + let!(:other_service_binding) { create(:service_binding) } it 'returns the binding for the correct space' do results = ServiceBindingListFetcher.fetch_service_instance_bindings_in_space(service_instance.guid, space.guid) @@ -32,9 +32,9 @@ module VCAP::CloudController end context 'when multiple bindings exist in a space' do - let!(:service_binding1) { ServiceBinding.make(app: AppModel.make(space:), service_instance: service_instance) } - let!(:service_binding2) { ServiceBinding.make(app: AppModel.make(space:), service_instance: service_instance) } - let!(:other_service_binding) { ServiceBinding.make } + let!(:service_binding1) { create(:service_binding, app: create(:app_model, space:), service_instance: service_instance) } + let!(:service_binding2) { create(:service_binding, app: create(:app_model, space:), service_instance: service_instance) } + let!(:other_service_binding) { create(:service_binding) } it 'returns the bindings for the correct space' do results = ServiceBindingListFetcher.fetch_service_instance_bindings_in_space(service_instance.guid, space.guid) @@ -43,8 +43,8 @@ module VCAP::CloudController end context 'when multiple service instances exist' do - let!(:service_binding) { ServiceBinding.make(app: AppModel.make(space:), service_instance: service_instance) } - let!(:other_service_binding) { ServiceBinding.make(service_instance: ServiceInstance.make(space:)) } + let!(:service_binding) { create(:service_binding, app: create(:app_model, space:), service_instance: service_instance) } + let!(:other_service_binding) { create(:service_binding, service_instance: create(:service_instance, space:)) } it 'returns the binding for the correct service instance' do results = ServiceBindingListFetcher.fetch_service_instance_bindings_in_space(service_instance.guid, space.guid) diff --git a/spec/unit/fetchers/service_broker_list_fetcher_spec.rb b/spec/unit/fetchers/service_broker_list_fetcher_spec.rb index 38ae39fe8ec..9f25a1d3cd4 100644 --- a/spec/unit/fetchers/service_broker_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_broker_list_fetcher_spec.rb @@ -5,16 +5,16 @@ module VCAP::CloudController RSpec.describe ServiceBrokerListFetcher do describe '#fetch' do - let(:broker) { ServiceBroker.make } + let(:broker) { create(:service_broker) } - let(:space_1) { Space.make } - let(:space_scoped_broker_1) { ServiceBroker.make(space_guid: space_1.guid, name: 'broker-1') } + let(:space_1) { create(:space) } + let(:space_scoped_broker_1) { create(:service_broker, space: space_1, name: 'broker-1') } - let(:space_2) { Space.make } - let(:space_scoped_broker_2) { ServiceBroker.make(space_guid: space_2.guid, name: 'broker-2') } + let(:space_2) { create(:space) } + let(:space_scoped_broker_2) { create(:service_broker, space: space_2, name: 'broker-2') } - let(:space_3) { Space.make } - let(:space_scoped_broker_3) { ServiceBroker.make(space_guid: space_3.guid, name: 'broker-3') } + let(:space_3) { create(:space) } + let(:space_scoped_broker_3) { create(:service_broker, space: space_3, name: 'broker-3') } let(:fetcher) { described_class } let(:message) { ServiceBrokersListMessage.from_params(filters) } @@ -183,8 +183,8 @@ module VCAP::CloudController let(:filters) { { 'label_selector' => 'dog in (chihuahua,scooby-doo)' } } before do - ServiceBrokerLabelModel.make(service_broker: broker, key_name: 'dog', value: 'scooby-doo') - ServiceBrokerLabelModel.make(service_broker: space_scoped_broker_1, key_name: 'dog', value: 'poodle') + create(:service_broker_label_model, service_broker: broker, key_name: 'dog', value: 'scooby-doo') + create(:service_broker_label_model, service_broker: space_scoped_broker_1, key_name: 'dog', value: 'poodle') end it 'includes the relevant brokers' do diff --git a/spec/unit/fetchers/service_credential_binding_fetcher_spec.rb b/spec/unit/fetchers/service_credential_binding_fetcher_spec.rb index 4cf0cb6984d..3e055700dbf 100644 --- a/spec/unit/fetchers/service_credential_binding_fetcher_spec.rb +++ b/spec/unit/fetchers/service_credential_binding_fetcher_spec.rb @@ -7,7 +7,7 @@ module CloudController let(:fetcher) { ServiceCredentialBindingFetcher.new } describe 'not a real guid' do - let!(:existing_credential_binding) { ServiceBinding.make } + let!(:existing_credential_binding) { create(:service_binding) } it 'returns nothing' do credential_binding = fetcher.fetch('does-not-exist', readable_spaces_query: nil) @@ -16,10 +16,10 @@ module CloudController end describe 'service keys' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [space].map(&:id)) } - let(:service_instance) { ManagedServiceInstance.make(space:) } - let!(:service_key) { ServiceKey.make(service_instance:) } + let(:service_instance) { create(:managed_service_instance, space:) } + let!(:service_key) { create(:service_key, service_instance:) } describe 'when in the space' do it 'can be found' do @@ -35,7 +35,7 @@ module CloudController end describe 'when not in the space' do - let!(:other_space) { Space.make } + let!(:other_space) { create(:space) } let!(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [other_space].map(&:id)) } it 'can not be found' do @@ -48,10 +48,10 @@ module CloudController describe 'app bindings' do describe 'managed services' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [space].map(&:id)) } - let(:service_instance) { ManagedServiceInstance.make(space:) } - let!(:app_binding) { ServiceBinding.make(service_instance: service_instance, name: 'some-name') } + let(:service_instance) { create(:managed_service_instance, space:) } + let!(:app_binding) { create(:service_binding, service_instance: service_instance, name: 'some-name') } it 'can be found' do credential_binding = fetcher.fetch(app_binding.guid, readable_spaces_query:) @@ -67,7 +67,7 @@ module CloudController end describe 'when not in the space' do - let!(:other_space) { Space.make } + let!(:other_space) { create(:space) } let!(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [other_space].map(&:id)) } it 'can not be found' do @@ -79,10 +79,10 @@ module CloudController end describe 'user provided services' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [space].map(&:id)) } - let(:service_instance) { UserProvidedServiceInstance.make(space:) } - let!(:app_binding) { ServiceBinding.make(service_instance: service_instance, name: 'some-name') } + let(:service_instance) { create(:user_provided_service_instance, space:) } + let!(:app_binding) { create(:service_binding, service_instance: service_instance, name: 'some-name') } it 'can be found' do credential_binding = fetcher.fetch(app_binding.guid, readable_spaces_query:) @@ -98,7 +98,7 @@ module CloudController end describe 'when not in the space' do - let!(:other_space) { Space.make } + let!(:other_space) { create(:space) } let!(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [other_space].map(&:id)) } it 'can not be found' do @@ -110,10 +110,10 @@ module CloudController end describe 'with last operation' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [service_instance.space].map(&:id)) } let!(:app_binding) do - binding = ServiceBinding.make(service_instance:) + binding = create(:service_binding, service_instance:) binding.save_with_new_operation({ state: 'succeeded', type: 'create', description: 'radical avocado' }) binding end diff --git a/spec/unit/fetchers/service_credential_binding_list_fetcher_spec.rb b/spec/unit/fetchers/service_credential_binding_list_fetcher_spec.rb index 2cef4c48032..19457006b50 100644 --- a/spec/unit/fetchers/service_credential_binding_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_credential_binding_list_fetcher_spec.rb @@ -17,8 +17,8 @@ module CloudController end describe 'app and key bindings' do - let(:space) { VCAP::CloudController::Space.make } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:space) { create(:space) } + let(:instance) { create(:managed_service_instance, space:) } let(:key_details) do { @@ -33,8 +33,8 @@ module CloudController volume_mounts: %w[ccc ddd] } end - let!(:key_binding) { VCAP::CloudController::ServiceKey.make(service_instance: instance, **key_details) } - let!(:app_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: instance, name: Sham.name, **app_binding_details) } + let!(:key_binding) { create(:service_key, service_instance: instance, **key_details) } + let!(:app_binding) { create(:service_binding, service_instance: instance, name: Sham.name, **app_binding_details) } it 'eager loads the specified resources' do dataset = fetcher.fetch(readable_spaces_query: nil, message: message, eager_loaded_associations: [:labels_sti_eager_load]) @@ -61,11 +61,11 @@ module CloudController end context 'when limiting to a space' do - let(:other_space) { VCAP::CloudController::Space.make } - let(:other_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: other_space) } + let(:other_space) { create(:space) } + let(:other_instance) { create(:managed_service_instance, space: other_space) } let(:readable_spaces_query) { VCAP::CloudController::Space.where(id: [space].map(&:id)) } - let!(:key_other_binding) { VCAP::CloudController::ServiceKey.make(service_instance: other_instance) } - let!(:app_other_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: other_instance) } + let!(:key_other_binding) { create(:service_key, service_instance: other_instance) } + let!(:app_other_binding) { create(:service_binding, service_instance: other_instance) } it 'returns only the bindings within that space' do bindings = fetcher.fetch(readable_spaces_query:, message:).all @@ -76,9 +76,9 @@ module CloudController end describe 'filters' do - let(:another_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } - let!(:another_key) { VCAP::CloudController::ServiceKey.make(service_instance: another_instance) } - let!(:another_binding) { VCAP::CloudController::ServiceBinding.make(service_instance: another_instance, name: Sham.name) } + let(:another_instance) { create(:managed_service_instance, space:) } + let!(:another_key) { create(:service_key, service_instance: another_instance) } + let!(:another_binding) { create(:service_binding, service_instance: another_instance, name: Sham.name) } context 'service instance name' do let(:params) { { 'service_instance_names' => instance.name } } @@ -163,15 +163,15 @@ module CloudController context 'label selector' do before do - ServiceKeyLabelModel.make(key_name: 'fruit', value: 'strawberry', service_key: key_binding) - ServiceKeyLabelModel.make(key_name: 'tier', value: 'backend', service_key: key_binding) + create(:service_key_label_model, key_name: 'fruit', value: 'strawberry', service_key: key_binding) + create(:service_key_label_model, key_name: 'tier', value: 'backend', service_key: key_binding) - ServiceKeyLabelModel.make(key_name: 'fruit', value: 'lemon', service_key: another_key) + create(:service_key_label_model, key_name: 'fruit', value: 'lemon', service_key: another_key) - ServiceBindingLabelModel.make(key_name: 'tier', value: 'worker', service_binding: app_binding) + create(:service_binding_label_model, key_name: 'tier', value: 'worker', service_binding: app_binding) - ServiceBindingLabelModel.make(key_name: 'fruit', value: 'strawberry', service_binding: another_binding) - ServiceBindingLabelModel.make(key_name: 'tier', value: 'worker', service_binding: another_binding) + create(:service_binding_label_model, key_name: 'fruit', value: 'strawberry', service_binding: another_binding) + create(:service_binding_label_model, key_name: 'tier', value: 'worker', service_binding: another_binding) end let(:params) { { 'label_selector' => 'fruit=strawberry,tier in (backend,worker)' } } @@ -232,7 +232,7 @@ module CloudController end describe 'fetching app bindings' do - let!(:app_binding) { VCAP::CloudController::ServiceBinding.make } + let!(:app_binding) { create(:service_binding) } it 'allows the last operation to be accessed' do app_binding.save_with_new_operation( diff --git a/spec/unit/fetchers/service_instance_fetcher_spec.rb b/spec/unit/fetchers/service_instance_fetcher_spec.rb index 39d3c4635be..df172296c51 100644 --- a/spec/unit/fetchers/service_instance_fetcher_spec.rb +++ b/spec/unit/fetchers/service_instance_fetcher_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController RSpec.describe ServiceInstanceFetcher do describe '#fetch' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:service) { Service.make(:v2) } - let(:plan) { ServicePlan.make(service:) } - let(:service_instance) { ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:service) { create(:service, :v2) } + let(:plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } it 'returns the instance, the space, the plan, and the service' do fetcher = ServiceInstanceFetcher.new @@ -19,7 +19,7 @@ module VCAP::CloudController end context 'when the instance is user-provided' do - let(:service_instance) { UserProvidedServiceInstance.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:) } it 'returns just the instance and the space' do fetcher = ServiceInstanceFetcher.new diff --git a/spec/unit/fetchers/service_instance_list_fetcher_spec.rb b/spec/unit/fetchers/service_instance_list_fetcher_spec.rb index 7056c09be57..8816c84e860 100644 --- a/spec/unit/fetchers/service_instance_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_instance_list_fetcher_spec.rb @@ -9,14 +9,14 @@ module VCAP::CloudController let(:fetcher) { described_class } describe '#fetch' do - let(:space_1) { Space.make } - let(:space_2) { Space.make } - let(:space_3) { Space.make } - let!(:msi_1) { ManagedServiceInstance.make(space: space_1) } - let!(:msi_2) { ManagedServiceInstance.make(space: space_2) } - let!(:msi_3) { ManagedServiceInstance.make(space: space_3) } - let!(:upsi) { UserProvidedServiceInstance.make(space: space_1) } - let!(:ssi) { ManagedServiceInstance.make(space: space_3) } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } + let(:space_3) { create(:space) } + let!(:msi_1) { create(:managed_service_instance, space: space_1) } + let!(:msi_2) { create(:managed_service_instance, space: space_2) } + let!(:msi_3) { create(:managed_service_instance, space: space_3) } + let!(:upsi) { create(:user_provided_service_instance, space: space_1) } + let!(:ssi) { create(:managed_service_instance, space: space_3) } before do ssi.add_shared_space(space_2) @@ -84,7 +84,7 @@ module VCAP::CloudController let(:filters) { { 'label_selector' => 'key=value' } } before do - ServiceInstanceLabelModel.make(resource_guid: msi_2.guid, key_name: 'key', value: 'value') + create(:service_instance_label_model, resource_guid: msi_2.guid, key_name: 'key', value: 'value') end it 'returns instances with matching labels' do @@ -114,7 +114,7 @@ module VCAP::CloudController end context 'by service_plan_names' do - let!(:msi_4) { ManagedServiceInstance.make(space: space_1, service_plan: msi_1.service_plan) } + let!(:msi_4) { create(:managed_service_instance, space: space_1, service_plan: msi_1.service_plan) } let(:filters) { { service_plan_names: [msi_1.service_plan.name, msi_2.service_plan.name, 'non-existent'] } } it 'returns instances with matching service plan names' do @@ -124,7 +124,7 @@ module VCAP::CloudController end context 'by service_plan_guids' do - let!(:msi_4) { ManagedServiceInstance.make(space: space_1, service_plan: msi_1.service_plan) } + let!(:msi_4) { create(:managed_service_instance, space: space_1, service_plan: msi_1.service_plan) } let(:filters) { { service_plan_guids: [msi_1.service_plan.guid, msi_2.service_plan.guid, 'non-existent'] } } it 'returns instances with matching service plan guids' do diff --git a/spec/unit/fetchers/service_offering_fetcher_spec.rb b/spec/unit/fetchers/service_offering_fetcher_spec.rb index 799d0c9776f..bc4c05b760e 100644 --- a/spec/unit/fetchers/service_offering_fetcher_spec.rb +++ b/spec/unit/fetchers/service_offering_fetcher_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe ServiceOfferingFetcher do - let!(:offering_1) { Service.make } - let!(:offering_2) { Service.make } - let!(:offering_3) { Service.make } + let!(:offering_1) { create(:service) } + let!(:offering_2) { create(:service) } + let!(:offering_3) { create(:service) } context 'when the offering does not exist' do it 'returns nil' do diff --git a/spec/unit/fetchers/service_offering_list_fetcher_spec.rb b/spec/unit/fetchers/service_offering_list_fetcher_spec.rb index 6870940f3f7..83a4dbed769 100644 --- a/spec/unit/fetchers/service_offering_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_offering_list_fetcher_spec.rb @@ -19,14 +19,14 @@ module VCAP::CloudController end context 'service offering with both public and org restricted plans' do - let(:org) { Organization.make } + let(:org) { create(:organization) } let(:readable_orgs) { [org] } it 'shows unique results' do - service_offering = Service.make(label: "with-public-and-org-restricted-plans-#{Sham.name}") - ServicePlan.make(public: true, active: true, service: service_offering) - service_plan = ServicePlan.make(public: false, service: service_offering) - ServicePlanVisibility.make(organization: org, service_plan: service_plan) + service_offering = create(:service, label: "with-public-and-org-restricted-plans-#{Sham.name}") + create(:service_plan, public: true, active: true, service: service_offering) + service_plan = create(:service_plan, public: false, service: service_offering) + create(:service_plan_visibility, organization: org, service_plan: service_plan) service_offerings = fetcher.fetch(message, readable_orgs_query:).all expect(service_offerings).to contain_exactly(service_offering) @@ -40,18 +40,18 @@ module VCAP::CloudController let!(:private_offering_1) { make_private_offering } let!(:private_offering_2) { make_private_offering } - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } - let(:org_3) { Organization.make } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let(:org_3) { create(:organization) } let!(:org_restricted_offering_1) { make_org_restricted_offering(org_1) } let!(:org_restricted_offering_2) { make_org_restricted_offering(org_2) } let!(:org_restricted_offering_3) { make_org_restricted_offering(org_3) } let!(:org_restricted_offering_4) { make_org_restricted_offering(org_3) } let!(:org_restricted_offering_5) { make_org_restricted_offering(org_1, org_3) } - let(:space_1) { Space.make(organization: org_1) } - let(:space_2) { Space.make(organization: org_2) } - let(:space_3) { Space.make(organization: org_3) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } + let(:space_3) { create(:space, organization: org_3) } let!(:space_scoped_offering_1) { make_space_scoped_offering(space_1) } let!(:space_scoped_offering_2) { make_space_scoped_offering(space_2) } let!(:space_scoped_offering_3) { make_space_scoped_offering(space_3) } @@ -140,13 +140,13 @@ module VCAP::CloudController end describe 'filtering by organization_guids and space_guids' do - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } - let(:org_3) { Organization.make } - let(:space_1_1) { Space.make(organization: org_1) } - let!(:space_1_2) { Space.make(organization: org_1) } - let(:space_2) { Space.make(organization: org_2) } - let(:space_3) { Space.make(organization: org_3) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let(:org_3) { create(:organization) } + let(:space_1_1) { create(:space, organization: org_1) } + let!(:space_1_2) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } + let(:space_3) { create(:space, organization: org_3) } let!(:public_offering) { make_public_offering(number_of_plans: 2) } @@ -373,10 +373,10 @@ module VCAP::CloudController let(:service_offerings) { ServiceOfferingListFetcher.fetch(message, omniscient: true).all } describe 'the `available` filter' do - let!(:service_offering_available) { ServicePlan.make(public: true, active: true).service } + let!(:service_offering_available) { create(:service_plan, public: true, active: true).service } let!(:service_offering_unavailable) do - offering = Service.make(active: false) - ServicePlan.make(public: true, active: true, service: offering) + offering = create(:service, active: false) + create(:service_plan, public: true, active: true, service: offering) offering end @@ -398,10 +398,10 @@ module VCAP::CloudController end describe 'the `broker_catalog_ids` filter' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:service_offering_1) { create(:service_plan, public: true).service } + let!(:service_offering_2) { create(:service_plan, public: true).service } + let!(:service_offering_3) { create(:service_plan, public: true).service } + let!(:service_offering_4) { create(:service_plan, public: true).service } let(:message) do ServiceOfferingsListMessage.from_params({ broker_catalog_ids: [service_offering_1.unique_id, service_offering_4.unique_id].join(',') }.with_indifferent_access) @@ -416,19 +416,19 @@ module VCAP::CloudController end describe 'the `service_broker_guids` filter' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } let!(:service_offering_1) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end let!(:service_offering_2) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make.service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make.service } + let!(:service_offering_3) { create(:service_plan).service } + let!(:service_offering_4) { create(:service_plan).service } let(:service_broker_guids) { [service_broker.guid, service_offering_3.service_broker.guid] } let(:message) { ServiceOfferingsListMessage.from_params({ service_broker_guids: service_broker_guids.join(',') }.with_indifferent_access) } @@ -443,19 +443,19 @@ module VCAP::CloudController end describe 'the `service_broker_names` filter' do - let!(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let!(:service_broker) { create(:service_broker) } let!(:service_offering_1) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end let!(:service_offering_2) do - offering = VCAP::CloudController::Service.make(service_broker:) - VCAP::CloudController::ServicePlan.make(public: true, service: offering) + offering = create(:service, service_broker:) + create(:service_plan, public: true, service: offering) offering end - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make.service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make.service } + let!(:service_offering_3) { create(:service_plan).service } + let!(:service_offering_4) { create(:service_plan).service } let(:service_broker_names) { [service_broker.name, service_offering_4.service_broker.name] } let(:message) { ServiceOfferingsListMessage.from_params({ service_broker_names: service_broker_names.join(',') }.with_indifferent_access) } @@ -470,10 +470,10 @@ module VCAP::CloudController end describe 'the `names` filter' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true).service } - let!(:service_offering_4) { VCAP::CloudController::ServicePlan.make(public: true).service } + let!(:service_offering_1) { create(:service_plan, public: true).service } + let!(:service_offering_2) { create(:service_plan, public: true).service } + let!(:service_offering_3) { create(:service_plan, public: true).service } + let!(:service_offering_4) { create(:service_plan, public: true).service } let(:service_offering_names) { [service_offering_1.name, service_offering_3.name] } let(:message) { ServiceOfferingsListMessage.from_params({ names: service_offering_names.join(',') }.with_indifferent_access) } @@ -487,15 +487,15 @@ module VCAP::CloudController end describe 'the `label_selector` filter' do - let!(:service_offering_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } - let!(:service_offering_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } - let!(:service_offering_3) { VCAP::CloudController::ServicePlan.make(public: true, active: true).service } + let!(:service_offering_1) { create(:service_plan, public: true, active: true).service } + let!(:service_offering_2) { create(:service_plan, public: true, active: true).service } + let!(:service_offering_3) { create(:service_plan, public: true, active: true).service } let(:message) { ServiceOfferingsListMessage.from_params({ label_selector: 'flavor=orange' }.with_indifferent_access) } before do - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_1.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_2.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServiceOfferingLabelModel.make(resource_guid: service_offering_3.guid, key_name: 'flavor', value: 'apple') + create(:service_offering_label_model, resource_guid: service_offering_1.guid, key_name: 'flavor', value: 'orange') + create(:service_offering_label_model, resource_guid: service_offering_2.guid, key_name: 'flavor', value: 'orange') + create(:service_offering_label_model, resource_guid: service_offering_3.guid, key_name: 'flavor', value: 'apple') end it 'filters the matching service offerings' do @@ -517,27 +517,27 @@ module VCAP::CloudController end def make_public_offering(number_of_plans: 1) - service_offering = Service.make(label: "public-#{Sham.name}") - number_of_plans.times { ServicePlan.make(public: true, active: true, service: service_offering) } + service_offering = create(:service, label: "public-#{Sham.name}") + number_of_plans.times { create(:service_plan, public: true, active: true, service: service_offering) } service_offering end def make_private_offering - service_offering = Service.make(label: "private-#{Sham.name}") - ServicePlan.make(public: false, active: true, service: service_offering) + service_offering = create(:service, label: "private-#{Sham.name}") + create(:service_plan, public: false, active: true, service: service_offering) service_offering end def make_space_scoped_offering(space) - service_broker = ServiceBroker.make(space:) - Service.make(service_broker: service_broker, label: "space-scoped-#{Sham.name}") + service_broker = create(:service_broker, space:) + create(:service, service_broker: service_broker, label: "space-scoped-#{Sham.name}") end def make_org_restricted_offering(org1, org2=nil) - service_offering = Service.make(label: "org-restricted-#{Sham.name}") - service_plan = ServicePlan.make(public: false, service: service_offering) - ServicePlanVisibility.make(organization: org1, service_plan: service_plan) - ServicePlanVisibility.make(organization: org2, service_plan: service_plan) unless org2.nil? + service_offering = create(:service, label: "org-restricted-#{Sham.name}") + service_plan = create(:service_plan, public: false, service: service_offering) + create(:service_plan_visibility, organization: org1, service_plan: service_plan) + create(:service_plan_visibility, organization: org2, service_plan: service_plan) unless org2.nil? service_offering end end diff --git a/spec/unit/fetchers/service_plan_fetcher_spec.rb b/spec/unit/fetchers/service_plan_fetcher_spec.rb index e9db4df465f..0ac0ab0f09b 100644 --- a/spec/unit/fetchers/service_plan_fetcher_spec.rb +++ b/spec/unit/fetchers/service_plan_fetcher_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe ServicePlanFetcher do - let!(:plan_1) { ServicePlan.make } - let!(:plan_2) { ServicePlan.make } - let!(:plan_3) { ServicePlan.make } + let!(:plan_1) { create(:service_plan) } + let!(:plan_2) { create(:service_plan) } + let!(:plan_3) { create(:service_plan) } context 'when the plan does not exist' do it 'returns nil' do diff --git a/spec/unit/fetchers/service_plan_list_fetcher_spec.rb b/spec/unit/fetchers/service_plan_list_fetcher_spec.rb index 4e45898df31..c294f289640 100644 --- a/spec/unit/fetchers/service_plan_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_plan_list_fetcher_spec.rb @@ -38,18 +38,18 @@ module VCAP::CloudController let!(:private_plan_1) { make_private_plan } let!(:private_plan_2) { make_private_plan } - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } - let(:org_3) { Organization.make } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let(:org_3) { create(:organization) } let!(:org_restricted_plan_1) { make_org_restricted_plan(org_1) } let!(:org_restricted_plan_2) { make_org_restricted_plan(org_2) } let!(:org_restricted_plan_3) { make_org_restricted_plan(org_3) } let!(:org_restricted_plan_4) { make_org_restricted_plan(org_3) } let!(:org_restricted_plan_5) { make_org_restricted_plan(org_1, org_3) } - let(:space_1) { Space.make(organization: org_1) } - let(:space_2) { Space.make(organization: org_2) } - let(:space_3) { Space.make(organization: org_3) } + let(:space_1) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } + let(:space_3) { create(:space, organization: org_3) } let!(:space_scoped_plan_1) { make_space_scoped_plan(space_1) } let!(:space_scoped_plan_2) { make_space_scoped_plan(space_2) } let!(:space_scoped_plan_3) { make_space_scoped_plan(space_3) } @@ -134,13 +134,13 @@ module VCAP::CloudController end describe 'filtering by organization_guids and space_guids' do - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } - let(:org_3) { Organization.make } - let(:space_1_1) { Space.make(organization: org_1) } - let!(:space_1_2) { Space.make(organization: org_1) } - let(:space_2) { Space.make(organization: org_2) } - let(:space_3) { Space.make(organization: org_3) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } + let(:org_3) { create(:organization) } + let(:space_1_1) { create(:space, organization: org_1) } + let!(:space_1_2) { create(:space, organization: org_1) } + let(:space_2) { create(:space, organization: org_2) } + let(:space_3) { create(:space, organization: org_3) } let!(:public_plan) { make_public_plan } @@ -362,8 +362,8 @@ module VCAP::CloudController let(:message) { ServicePlansListMessage.from_params(params.with_indifferent_access) } describe 'available' do - let!(:available_plan) { ServicePlan.make(public: true, active: true) } - let!(:unavailable_plan) { ServicePlan.make(public: true, active: false) } + let!(:available_plan) { create(:service_plan, public: true, active: true) } + let!(:unavailable_plan) { create(:service_plan, public: true, active: false) } let(:params) { {} } it 'returns both when there is no filter' do @@ -388,12 +388,12 @@ module VCAP::CloudController end describe 'service_broker_guids' do - let(:service_broker) { ServiceBroker.make } - let(:service_offering) { Service.make(service_broker:) } - let!(:plan_1) { ServicePlan.make(service: service_offering) } - let!(:plan_2) { ServicePlan.make(service: service_offering) } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let(:service_broker) { create(:service_broker) } + let(:service_offering) { create(:service, service_broker:) } + let!(:plan_1) { create(:service_plan, service: service_offering) } + let!(:plan_2) { create(:service_plan, service: service_offering) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } let(:params) { { service_broker_guids: [service_broker.guid, plan_4.service.service_broker.guid].join(',') } } it 'can filter by service broker guids' do @@ -402,12 +402,12 @@ module VCAP::CloudController end describe 'service_broker_names' do - let(:service_broker) { ServiceBroker.make } - let(:service_offering) { Service.make(service_broker:) } - let!(:plan_1) { ServicePlan.make(service: service_offering) } - let!(:plan_2) { ServicePlan.make(service: service_offering) } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let(:service_broker) { create(:service_broker) } + let(:service_offering) { create(:service, service_broker:) } + let!(:plan_1) { create(:service_plan, service: service_offering) } + let!(:plan_2) { create(:service_plan, service: service_offering) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } let(:params) { { service_broker_names: [service_broker.name, plan_3.service.service_broker.name].join(',') } } it 'can filter by service broker names' do @@ -416,15 +416,15 @@ module VCAP::CloudController end describe 'service_instance_guids' do - let!(:plan_1) { ServicePlan.make } - let!(:plan_2) { ServicePlan.make } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let!(:plan_1) { create(:service_plan) } + let!(:plan_2) { create(:service_plan) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } - let!(:instance_1) { ManagedServiceInstance.make(service_plan: plan_1) } - let!(:instance_2) { ManagedServiceInstance.make(service_plan: plan_2) } - let!(:instance_3) { ManagedServiceInstance.make(service_plan: plan_3) } - let!(:instance_4) { ManagedServiceInstance.make(service_plan: plan_1) } + let!(:instance_1) { create(:managed_service_instance, service_plan: plan_1) } + let!(:instance_2) { create(:managed_service_instance, service_plan: plan_2) } + let!(:instance_3) { create(:managed_service_instance, service_plan: plan_3) } + let!(:instance_4) { create(:managed_service_instance, service_plan: plan_1) } let(:params) { { service_instance_guids: [instance_1.guid, instance_2.guid, instance_4.guid].join(',') } } @@ -438,11 +438,11 @@ module VCAP::CloudController end describe 'service_offering_guids' do - let(:service_offering) { Service.make } - let!(:plan_1) { ServicePlan.make(service: service_offering) } - let!(:plan_2) { ServicePlan.make(service: service_offering) } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let(:service_offering) { create(:service) } + let!(:plan_1) { create(:service_plan, service: service_offering) } + let!(:plan_2) { create(:service_plan, service: service_offering) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } let(:params) { { service_offering_guids: [service_offering.guid, plan_3.service.guid].join(',') } } it 'can filter by service offering guids' do @@ -451,11 +451,11 @@ module VCAP::CloudController end describe 'service_offering_names' do - let(:service_offering) { Service.make } - let!(:plan_1) { ServicePlan.make(service: service_offering) } - let!(:plan_2) { ServicePlan.make(service: service_offering) } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let(:service_offering) { create(:service) } + let!(:plan_1) { create(:service_plan, service: service_offering) } + let!(:plan_2) { create(:service_plan, service: service_offering) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } let(:params) { { service_offering_names: [service_offering.name, plan_3.service.name].join(',') } } it 'can filter by service offering names' do @@ -464,11 +464,11 @@ module VCAP::CloudController end describe 'broker_catalog_ids' do - let(:service_offering) { Service.make } - let!(:plan_1) { ServicePlan.make(service: service_offering) } - let!(:plan_2) { ServicePlan.make(service: service_offering) } - let!(:plan_3) { ServicePlan.make } - let!(:plan_4) { ServicePlan.make } + let(:service_offering) { create(:service) } + let!(:plan_1) { create(:service_plan, service: service_offering) } + let!(:plan_2) { create(:service_plan, service: service_offering) } + let!(:plan_3) { create(:service_plan) } + let!(:plan_4) { create(:service_plan) } let(:params) { { broker_catalog_ids: [plan_1.unique_id, plan_4.unique_id].join(',') } } it 'can filter by service broker guids' do @@ -477,9 +477,9 @@ module VCAP::CloudController end describe 'names' do - let!(:plan_one) { ServicePlan.make(name: 'one', public: true) } - let!(:plan_two) { ServicePlan.make(name: 'two', public: true) } - let!(:plan_three) { ServicePlan.make(name: 'three', public: true) } + let!(:plan_one) { create(:service_plan, name: 'one', public: true) } + let!(:plan_two) { create(:service_plan, name: 'two', public: true) } + let!(:plan_three) { create(:service_plan, name: 'three', public: true) } let(:params) { { names: 'one,three' } } it 'can filter by names' do @@ -488,15 +488,15 @@ module VCAP::CloudController end describe 'label_selector' do - let!(:service_plan_1) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } - let!(:service_plan_2) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } - let!(:service_plan_3) { VCAP::CloudController::ServicePlan.make(public: true, active: true) } + let!(:service_plan_1) { create(:service_plan, public: true, active: true) } + let!(:service_plan_2) { create(:service_plan, public: true, active: true) } + let!(:service_plan_3) { create(:service_plan, public: true, active: true) } let(:message) { ServicePlansListMessage.from_params({ label_selector: 'flavor=orange' }.with_indifferent_access) } before do - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_1.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_2.guid, key_name: 'flavor', value: 'orange') - VCAP::CloudController::ServicePlanLabelModel.make(resource_guid: service_plan_3.guid, key_name: 'flavor', value: 'apple') + create(:service_plan_label_model, resource_guid: service_plan_1.guid, key_name: 'flavor', value: 'orange') + create(:service_plan_label_model, resource_guid: service_plan_2.guid, key_name: 'flavor', value: 'orange') + create(:service_plan_label_model, resource_guid: service_plan_3.guid, key_name: 'flavor', value: 'apple') end it 'filters the matching service plans' do @@ -512,8 +512,8 @@ module VCAP::CloudController end context 'when org user' do - let(:org_1) { Organization.make } - let(:space_1) { Space.make(organization: org_1) } + let(:org_1) { create(:organization) } + let(:space_1) { create(:space, organization: org_1) } let(:readable_orgs) { [org_1] } let(:readable_spaces) { [space_1] } let(:service_plans) do @@ -536,23 +536,23 @@ module VCAP::CloudController end def make_public_plan - ServicePlan.make(public: true, active: true, name: "public-#{Sham.name}") + create(:service_plan, public: true, active: true, name: "public-#{Sham.name}") end def make_private_plan - ServicePlan.make(public: false, active: true, name: "private-#{Sham.name}") + create(:service_plan, public: false, active: true, name: "private-#{Sham.name}") end def make_space_scoped_plan(space) - service_broker = ServiceBroker.make(space:) - service_offering = Service.make(service_broker:) - ServicePlan.make(service: service_offering, name: "space-scoped-#{Sham.name}") + service_broker = create(:service_broker, space:) + service_offering = create(:service, service_broker:) + create(:service_plan, service: service_offering, name: "space-scoped-#{Sham.name}") end def make_org_restricted_plan(org1, org2=nil) - service_plan = ServicePlan.make(public: false, name: "org-restricted-#{Sham.name}") - ServicePlanVisibility.make(organization: org1, service_plan: service_plan) - ServicePlanVisibility.make(organization: org2, service_plan: service_plan) unless org2.nil? + service_plan = create(:service_plan, public: false, name: "org-restricted-#{Sham.name}") + create(:service_plan_visibility, organization: org1, service_plan: service_plan) + create(:service_plan_visibility, organization: org2, service_plan: service_plan) unless org2.nil? service_plan end end diff --git a/spec/unit/fetchers/service_plan_visibility_fetcher_spec.rb b/spec/unit/fetchers/service_plan_visibility_fetcher_spec.rb index 70d65dce966..2338a230579 100644 --- a/spec/unit/fetchers/service_plan_visibility_fetcher_spec.rb +++ b/spec/unit/fetchers/service_plan_visibility_fetcher_spec.rb @@ -14,19 +14,19 @@ module VCAP::CloudController let(:fetcher) { ServicePlanVisibilityFetcher.new(permission_querier) } - let!(:org1) { Organization.make } - let!(:org2) { Organization.make } + let!(:org1) { create(:organization) } + let!(:org2) { create(:organization) } let!(:plan_1) do - plan = ServicePlan.make(public: false) - ServicePlanVisibility.make(service_plan: plan, organization: org1) - ServicePlanVisibility.make(service_plan: plan, organization: org2) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, service_plan: plan, organization: org1) + create(:service_plan_visibility, service_plan: plan, organization: org2) plan end let!(:plan_2) do - plan = ServicePlan.make(public: false) - ServicePlanVisibility.make(service_plan: plan, organization: org2) + plan = create(:service_plan, public: false) + create(:service_plan_visibility, service_plan: plan, organization: org2) plan end @@ -105,8 +105,8 @@ module VCAP::CloudController describe 'variable number of plans' do context 'when many plans are specified and only one is visible' do - let!(:plan_alpha) { ServicePlan.make } - let!(:plan_beta) { ServicePlan.make } + let!(:plan_alpha) { create(:service_plan) } + let!(:plan_beta) { create(:service_plan) } context 'when only one org is readable' do let(:readable_org_guids) { [org2.guid] } @@ -238,8 +238,8 @@ module VCAP::CloudController describe 'variable number of plans' do context 'when many plans are specified and only one is visible' do - let!(:plan_alpha) { ServicePlan.make } - let!(:plan_beta) { ServicePlan.make } + let!(:plan_alpha) { create(:service_plan) } + let!(:plan_beta) { create(:service_plan) } context 'when only one org is readable' do let(:readable_org_guids) { [org2.guid] } diff --git a/spec/unit/fetchers/service_usage_event_list_fetcher_spec.rb b/spec/unit/fetchers/service_usage_event_list_fetcher_spec.rb index 9344be366d4..13c148898b4 100644 --- a/spec/unit/fetchers/service_usage_event_list_fetcher_spec.rb +++ b/spec/unit/fetchers/service_usage_event_list_fetcher_spec.rb @@ -9,9 +9,9 @@ module VCAP::CloudController let(:filters) { {} } describe '#fetch_all' do - let!(:service_usage_event) { VCAP::CloudController::ServiceUsageEvent.make } - let!(:service_usage_event_2) { VCAP::CloudController::ServiceUsageEvent.make } - let!(:service_usage_event_3) { VCAP::CloudController::ServiceUsageEvent.make } + let!(:service_usage_event) { create(:service_usage_event) } + let!(:service_usage_event_2) { create(:service_usage_event) } + let!(:service_usage_event_3) { create(:service_usage_event) } it 'returns a Sequel::Dataset' do expect(subject).to be_a(Sequel::Dataset) diff --git a/spec/unit/fetchers/sidecar_list_fetcher_spec.rb b/spec/unit/fetchers/sidecar_list_fetcher_spec.rb index 19d7bd4b146..bce66bf1948 100644 --- a/spec/unit/fetchers/sidecar_list_fetcher_spec.rb +++ b/spec/unit/fetchers/sidecar_list_fetcher_spec.rb @@ -8,12 +8,12 @@ module VCAP::CloudController let(:fetcher) { SidecarListFetcher } let(:filters) { {} } let(:message) { SidecarsListMessage.from_params(filters) } - let(:app_model) { AppModel.make } + let(:app_model) { create(:app_model) } describe '#fetch_for_app' do - let!(:sidecar1) { SidecarModel.make(app: app_model) } - let!(:sidecar2) { SidecarModel.make(app: app_model) } - let!(:sidecar3) { SidecarModel.make(app: AppModel.make) } + let!(:sidecar1) { create(:sidecar_model, app: app_model) } + let!(:sidecar2) { create(:sidecar_model, app: app_model) } + let!(:sidecar3) { create(:sidecar_model, app: create(:app_model)) } it 'successfully loads sidecars' do app, results = fetcher.fetch_for_app(message, app_model.guid) @@ -33,31 +33,29 @@ module VCAP::CloudController end describe '#fetch_for_process' do - let!(:sidecar1a) { SidecarModel.make(app: app_model) } - let!(:sidecar1b) { SidecarModel.make(app: app_model) } - let!(:sidecar2) { SidecarModel.make(app: app_model) } + let!(:sidecar1a) { create(:sidecar_model, app: app_model) } + let!(:sidecar1b) { create(:sidecar_model, app: app_model) } + let!(:sidecar2) { create(:sidecar_model, app: app_model) } let!(:web_process) do - ProcessModel.make( - :process, - app: app_model, - type: 'web', - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + type: 'web', + command: 'rackup') end let!(:worker_process) do - ProcessModel.make( - :process, - app: app_model, - type: 'worker', - command: 'rackup' - ) + create(:process, + :process, + app: app_model, + type: 'worker', + command: 'rackup') end before do - SidecarProcessTypeModel.make(sidecar: sidecar1a, type: 'web') - SidecarProcessTypeModel.make(sidecar: sidecar1b, type: 'web') - SidecarProcessTypeModel.make(sidecar: sidecar2, type: 'worker') + create(:sidecar_process_type_model, sidecar: sidecar1a, type: 'web') + create(:sidecar_process_type_model, sidecar: sidecar1b, type: 'web') + create(:sidecar_process_type_model, sidecar: sidecar2, type: 'worker') end it 'successfully loads web sidecars' do diff --git a/spec/unit/fetchers/space_fetcher_spec.rb b/spec/unit/fetchers/space_fetcher_spec.rb index 699cc2c75b2..bd502a926be 100644 --- a/spec/unit/fetchers/space_fetcher_spec.rb +++ b/spec/unit/fetchers/space_fetcher_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe SpaceFetcher do describe '#fetch' do - let(:space) { Space.make } + let(:space) { create(:space) } it 'returns the desired space' do returned_space = SpaceFetcher.new.fetch(space.guid) diff --git a/spec/unit/fetchers/space_list_fetcher_spec.rb b/spec/unit/fetchers/space_list_fetcher_spec.rb index 98a447b7d5f..0f52d24c237 100644 --- a/spec/unit/fetchers/space_list_fetcher_spec.rb +++ b/spec/unit/fetchers/space_list_fetcher_spec.rb @@ -3,13 +3,13 @@ module VCAP::CloudController RSpec.describe SpaceListFetcher do - let(:org1) { Organization.make(name: 'org1') } - let(:org2) { Organization.make(name: 'org2') } + let(:org1) { create(:organization, name: 'org1') } + let(:org2) { create(:organization, name: 'org2') } - let!(:space1) { Space.make(name: 'Lamb', organization: org1) } - let!(:space2) { Space.make(name: 'Alpaca', organization: org2) } - let!(:space3) { Space.make(name: 'Horse', organization: org1) } - let!(:space4) { Space.make(name: 'Buffalo', organization: org2) } + let!(:space1) { create(:space, name: 'Lamb', organization: org1) } + let!(:space2) { create(:space, name: 'Alpaca', organization: org2) } + let!(:space3) { create(:space, name: 'Horse', organization: org1) } + let!(:space4) { create(:space, name: 'Buffalo', organization: org2) } let(:message) { SpacesListMessage.from_params({}) } @@ -98,8 +98,8 @@ module VCAP::CloudController { organization_guids: [org2.guid], 'label_selector' => 'key2=value2' } ) end - let!(:space1label) { SpaceLabelModel.make(key_name: 'key', value: 'value', space: space1) } - let!(:space2label) { SpaceLabelModel.make(key_name: 'key2', value: 'value2', space: space2) } + let!(:space1label) { create(:space_label_model, key_name: 'key', value: 'value', space: space1) } + let!(:space2label) { create(:space_label_model, key_name: 'key2', value: 'value2', space: space2) } it 'returns the correct set of spaces' do results = fetcher.fetch_all(message:).all @@ -111,8 +111,8 @@ module VCAP::CloudController let(:message) do SpacesListMessage.from_params({ 'label_selector' => 'key=value' }) end - let!(:space1label) { SpaceLabelModel.make(key_name: 'key', value: 'value', space: space1) } - let!(:space2label) { SpaceLabelModel.make(key_name: 'key2', value: 'value2', space: space2) } + let!(:space1label) { create(:space_label_model, key_name: 'key', value: 'value', space: space1) } + let!(:space2label) { create(:space_label_model, key_name: 'key2', value: 'value2', space: space2) } it 'returns the correct set of spaces' do results = fetcher.fetch_all(message:).all diff --git a/spec/unit/fetchers/space_quota_list_fetcher_spec.rb b/spec/unit/fetchers/space_quota_list_fetcher_spec.rb index 37bc07277e9..1c9c232d831 100644 --- a/spec/unit/fetchers/space_quota_list_fetcher_spec.rb +++ b/spec/unit/fetchers/space_quota_list_fetcher_spec.rb @@ -4,16 +4,16 @@ module VCAP::CloudController RSpec.describe SpaceQuotaListFetcher do - let(:org1) { Organization.make(name: 'org1') } - let(:org3) { Organization.make(name: 'org3') } + let(:org1) { create(:organization, name: 'org1') } + let(:org3) { create(:organization, name: 'org3') } - let!(:quota1) { SpaceQuotaDefinition.make(name: 'quota1-name', guid: 'quota1-guid', organization: org1) } - let!(:quota2) { SpaceQuotaDefinition.make(name: 'quota2-name', guid: 'quota2-guid', organization: org1) } - let!(:quota3) { SpaceQuotaDefinition.make(name: 'quota3-name', guid: 'quota3-guid', organization: org3) } - let!(:quota_unreadable) { SpaceQuotaDefinition.make(name: 'quota_unreadable-name', guid: 'quota_unreadable-guid', organization: org1) } + let!(:quota1) { create(:space_quota_definition, name: 'quota1-name', guid: 'quota1-guid', organization: org1) } + let!(:quota2) { create(:space_quota_definition, name: 'quota2-name', guid: 'quota2-guid', organization: org1) } + let!(:quota3) { create(:space_quota_definition, name: 'quota3-name', guid: 'quota3-guid', organization: org3) } + let!(:quota_unreadable) { create(:space_quota_definition, name: 'quota_unreadable-name', guid: 'quota_unreadable-guid', organization: org1) } - let!(:space1) { Space.make(name: 'space1-name', organization: org1, space_quota_definition: quota1) } - let!(:space2) { Space.make(name: 'space2-name', organization: org1, space_quota_definition: quota2) } + let!(:space1) { create(:space, name: 'space1-name', organization: org1, space_quota_definition: quota1) } + let!(:space2) { create(:space, name: 'space2-name', organization: org1, space_quota_definition: quota2) } let(:readable_space_quota_guids) { [quota1.guid, quota2.guid, quota3.guid] } diff --git a/spec/unit/fetchers/space_user_roles_fetcher_spec.rb b/spec/unit/fetchers/space_user_roles_fetcher_spec.rb index 2a5d111a742..58eac67eaa1 100644 --- a/spec/unit/fetchers/space_user_roles_fetcher_spec.rb +++ b/spec/unit/fetchers/space_user_roles_fetcher_spec.rb @@ -4,13 +4,13 @@ module VCAP::CloudController RSpec.describe SpaceUserRolesFetcher do describe '#fetch' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:everything_user) { User.make } - let(:manager) { User.make } - let(:auditor) { User.make } - let(:developer) { User.make } - let(:not_a_user) { User.make } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:everything_user) { create(:user) } + let(:manager) { create(:user) } + let(:auditor) { create(:user) } + let(:developer) { create(:user) } + let(:not_a_user) { create(:user) } before do org.add_user(everything_user) diff --git a/spec/unit/fetchers/stack_list_fetcher_spec.rb b/spec/unit/fetchers/stack_list_fetcher_spec.rb index 847f1d07589..c1349356867 100644 --- a/spec/unit/fetchers/stack_list_fetcher_spec.rb +++ b/spec/unit/fetchers/stack_list_fetcher_spec.rb @@ -14,8 +14,8 @@ module VCAP::CloudController Stack.dataset.destroy end - let!(:stack1) { Stack.make } - let!(:stack2) { Stack.make(name: default_stack_name) } + let!(:stack1) { create(:stack) } + let!(:stack2) { create(:stack, name: default_stack_name) } let(:message) { StacksListMessage.from_params(filters) } @@ -60,8 +60,8 @@ module VCAP::CloudController context 'when a label_selector is provided' do let(:message) { StacksListMessage.from_params({ 'label_selector' => 'key=value' }) } - let!(:stack1label) { StackLabelModel.make(key_name: 'key', value: 'value', stack: stack1) } - let!(:stack2label) { StackLabelModel.make(key_name: 'key2', value: 'value2', stack: stack2) } + let!(:stack1label) { create(:stack_label_model, key_name: 'key', value: 'value', stack: stack1) } + let!(:stack2label) { create(:stack_label_model, key_name: 'key2', value: 'value2', stack: stack2) } it 'returns the correct set of stacks' do results = fetcher.fetch_all(message).all diff --git a/spec/unit/fetchers/task_create_fetcher_spec.rb b/spec/unit/fetchers/task_create_fetcher_spec.rb index 18d132ab0cd..465f058958d 100644 --- a/spec/unit/fetchers/task_create_fetcher_spec.rb +++ b/spec/unit/fetchers/task_create_fetcher_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe TaskCreateFetcher do let(:fetcher) { TaskCreateFetcher.new } - let(:app) { AppModel.make(space_guid: space.guid) } - let(:space) { Space.make } + let(:app) { create(:app_model, space: space) } + let(:space) { create(:space) } it 'fetches the associated app and space' do returned_app, returned_space = fetcher.fetch(app_guid: app.guid) @@ -14,13 +14,13 @@ module VCAP::CloudController context 'when a droplet_guid is specified' do it 'fetches the correct process' do - droplet = DropletModel.make(app_guid: app.guid) + droplet = create(:droplet_model, app: app) _returned_app, _returned_space, returned_droplet = fetcher.fetch(app_guid: app.guid, droplet_guid: droplet.guid) expect(returned_droplet.guid).to eq(droplet.guid) end it 'does not return the droplet if it belongs to another app' do - droplet = DropletModel.make + droplet = create(:droplet_model) _returned_app, _returned_space, returned_droplet = fetcher.fetch(app_guid: app.guid, droplet_guid: droplet.guid) expect(returned_droplet).to be_nil end diff --git a/spec/unit/fetchers/task_fetcher_spec.rb b/spec/unit/fetchers/task_fetcher_spec.rb index 78d4e8991f1..0cf3bc3cbdf 100644 --- a/spec/unit/fetchers/task_fetcher_spec.rb +++ b/spec/unit/fetchers/task_fetcher_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController RSpec.describe TaskFetcher do subject(:fetcher) { TaskFetcher.new } - let(:app) { AppModel.make(space_guid: space.guid) } - let(:space) { Space.make } - let(:task) { TaskModel.make(app_guid: app.guid) } + let(:app) { create(:app_model, space: space) } + let(:space) { create(:space) } + let(:task) { create(:task_model, app: app) } describe '#fetch_for_app' do it 'fetches the associated task, app, space' do diff --git a/spec/unit/fetchers/task_list_fetcher_spec.rb b/spec/unit/fetchers/task_list_fetcher_spec.rb index 481149a8a5a..8a7bd10026a 100644 --- a/spec/unit/fetchers/task_list_fetcher_spec.rb +++ b/spec/unit/fetchers/task_list_fetcher_spec.rb @@ -2,28 +2,28 @@ module VCAP::CloudController RSpec.describe TaskListFetcher do - let(:space1) { Space.make } - let(:app_in_space1) { AppModel.make(space_guid: space1.guid) } - let(:app2_in_space1) { AppModel.make(space_guid: space1.guid) } + let(:space1) { create(:space) } + let(:app_in_space1) { create(:app_model, space: space1) } + let(:app2_in_space1) { create(:app_model, space: space1) } - let!(:task_in_space1) { TaskModel.make(app_guid: app_in_space1.guid) } - let!(:task2_in_space1) { TaskModel.make(app_guid: app_in_space1.guid) } - let!(:task_for_app2) { TaskModel.make(app_guid: app2_in_space1.guid) } + let!(:task_in_space1) { create(:task_model, app: app_in_space1) } + let!(:task2_in_space1) { create(:task_model, app: app_in_space1) } + let!(:task_for_app2) { create(:task_model, app: app2_in_space1) } - let!(:label_for_task_in_space1) { TaskLabelModel.make(resource_guid: task_in_space1.guid, key_name: 'key', value: 'value') } - let!(:label_for_task_in_space1_jr) { TaskLabelModel.make(resource_guid: task_in_space1.guid, key_name: 'key2', value: 'slimjim') } + let!(:label_for_task_in_space1) { create(:task_label_model, resource_guid: task_in_space1.guid, key_name: 'key', value: 'value') } + let!(:label_for_task_in_space1_jr) { create(:task_label_model, resource_guid: task_in_space1.guid, key_name: 'key2', value: 'slimjim') } - let(:space2) { Space.make } - let(:app_in_space2) { AppModel.make(space_guid: space2.guid) } - let!(:task_in_space2) { TaskModel.make(app_guid: app_in_space2.guid) } - let!(:failed_task_in_space2) { TaskModel.make(app_guid: app_in_space2.guid, state: TaskModel::FAILED_STATE) } + let(:space2) { create(:space) } + let(:app_in_space2) { create(:app_model, space: space2) } + let!(:task_in_space2) { create(:task_model, app: app_in_space2) } + let!(:failed_task_in_space2) { create(:task_model, app: app_in_space2, state: TaskModel::FAILED_STATE) } - let!(:label_for_task_in_space2) { TaskLabelModel.make(resource_guid: task_in_space2.guid, key_name: 'key', value: 'value') } + let!(:label_for_task_in_space2) { create(:task_label_model, resource_guid: task_in_space2.guid, key_name: 'key', value: 'value') } - let(:org2) { Organization.make } - let(:space_in_org2) { Space.make(organization_guid: org2.guid) } - let(:app_in_org2) { AppModel.make(space_guid: space_in_org2.guid) } - let!(:task_in_org2) { TaskModel.make(app_guid: app_in_org2.guid) } + let(:org2) { create(:organization) } + let(:space_in_org2) { create(:space, organization: org2) } + let(:app_in_org2) { create(:app_model, space: space_in_org2) } + let!(:task_in_org2) { create(:task_model, app: app_in_org2) } let(:pagination_options) { PaginationOptions.new({}) } let(:message) { TasksListMessage.from_params(filters) } diff --git a/spec/unit/fetchers/user_list_fetcher_spec.rb b/spec/unit/fetchers/user_list_fetcher_spec.rb index 40fd68b7e48..99b6a4d2168 100644 --- a/spec/unit/fetchers/user_list_fetcher_spec.rb +++ b/spec/unit/fetchers/user_list_fetcher_spec.rb @@ -6,8 +6,8 @@ module VCAP::CloudController describe '#fetch_all' do subject { UserListFetcher.fetch_all(message, User.dataset) } - let!(:user1) { User.make } - let!(:user2) { User.make } + let!(:user1) { create(:user) } + let!(:user2) { create(:user) } let(:message) { UsersListMessage.from_params(filters) } context 'when no filters are specified' do @@ -55,13 +55,13 @@ module VCAP::CloudController end context 'when fetching users by label selector' do - let!(:org1) { Organization.make(guid: 'org1') } + let!(:org1) { create(:organization, guid: 'org1') } let!(:user_label) do - VCAP::CloudController::UserLabelModel.make(resource_guid: user1.guid, key_name: 'dog', value: 'scooby-doo') + create(:user_label_model, resource_guid: user1.guid, key_name: 'dog', value: 'scooby-doo') end let!(:sad_user_label) do - VCAP::CloudController::UserLabelModel.make(resource_guid: user2.guid, key_name: 'dog', value: 'poodle') + create(:user_label_model, resource_guid: user2.guid, key_name: 'dog', value: 'poodle') end let(:results) { UserListFetcher.fetch_all(message, User.dataset).all } @@ -78,13 +78,13 @@ module VCAP::CloudController end context 'and other filters are present' do - let!(:happiest_user) { User.make } + let!(:happiest_user) { create(:user) } let(:message) do UsersListMessage.from_params({ 'guids' => happiest_user.guid, 'label_selector' => 'dog in (chihuahua,scooby-doo)' }) end let!(:happiest_user_label) do - VCAP::CloudController::UserLabelModel.make(resource_guid: happiest_user.guid, key_name: 'dog', value: 'scooby-doo') + create(:user_label_model, resource_guid: happiest_user.guid, key_name: 'dog', value: 'scooby-doo') end it 'returns the desired app' do diff --git a/spec/unit/jobs/audit_event_job_spec.rb b/spec/unit/jobs/audit_event_job_spec.rb index f4862e937fb..797fe74418e 100644 --- a/spec/unit/jobs/audit_event_job_spec.rb +++ b/spec/unit/jobs/audit_event_job_spec.rb @@ -6,7 +6,7 @@ module Jobs let(:event_repository) { double(:event_repository) } let(:event_creation_method) { :record_service_creation_event } let(:event_type) { 'audit.service.create' } - let(:model) { Service.make } + let(:model) { create(:service) } let(:params) { {} } subject(:audit_event_job) do diff --git a/spec/unit/jobs/delete_action_job_spec.rb b/spec/unit/jobs/delete_action_job_spec.rb index 070c74c42f8..11debfd7766 100644 --- a/spec/unit/jobs/delete_action_job_spec.rb +++ b/spec/unit/jobs/delete_action_job_spec.rb @@ -16,9 +16,9 @@ module Jobs end RSpec.describe DeleteActionJob, job_context: :worker do - let(:user) { User.make(admin: true) } + let(:user) { create(:user, admin: true) } let(:delete_action) { instance_double(SpaceDelete, delete: []) } - let(:space) { Space.make(name: Sham.guid) } + let(:space) { create(:space, name: Sham.guid) } subject(:job) { DeleteActionJob.new(Space, space.guid, delete_action) } @@ -143,25 +143,25 @@ module Jobs context 'when the resource is deleted externally before destroy' do it_behaves_like 'a delete action handling external deletion' do - let(:resource) { PackageModel.make } + let(:resource) { create(:package_model) } let(:delete_action) { PackageDelete.new(nil) } let(:delete_job) { DeleteActionJob.new(PackageModel, resource.guid, delete_action) } end it_behaves_like 'a delete action handling external deletion' do - let(:resource) { Space.make } + let(:resource) { create(:space) } let(:delete_action) { SpaceDelete.new(nil, nil) } let(:delete_job) { DeleteActionJob.new(Space, resource.guid, delete_action) } end it_behaves_like 'a delete action handling external deletion' do - let(:resource) { Route.make } + let(:resource) { create(:route) } let(:delete_action) { RouteDeleteAction.new(nil) } let(:delete_job) { DeleteActionJob.new(Route, resource.guid, delete_action) } end it_behaves_like 'a delete action handling external deletion' do - let(:resource) { User.make } + let(:resource) { create(:user) } let(:delete_action) { UserDeleteAction.new } let(:delete_job) { DeleteActionJob.new(User, resource.guid, delete_action) } end diff --git a/spec/unit/jobs/deserialization_spec.rb b/spec/unit/jobs/deserialization_spec.rb index bfb9b3ba750..5cc0ab38d7f 100644 --- a/spec/unit/jobs/deserialization_spec.rb +++ b/spec/unit/jobs/deserialization_spec.rb @@ -4,15 +4,15 @@ module VCAP::CloudController module Jobs RSpec.describe Jobs do context 'CreateServiceInstanceJob' do - let(:user) { User.make(guid: 'user-guid') } + let(:user) { create(:user, guid: 'user-guid') } let(:audit_info) { UserAuditInfo.new(user_email: 'user@bommel.com', user_guid: user.guid, user_name: 'user-name') } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } - let(:service_offering) { VCAP::CloudController::Service.make } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan:, space:) } + let(:service_offering) { create(:service) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, service_plan:, space:) } let(:audit_hash) do { @@ -101,12 +101,12 @@ module Jobs end context 'SpaceApplyManifestActionJob serialization' do - let(:user) { User.make(guid: 'user-guid') } + let(:user) { create(:user, guid: 'user-guid') } let(:user_audit_info) { UserAuditInfo.new(user_email: 'user@bommel.com', user_guid: user.guid, user_name: 'user-name') } let(:apply_manifest_action) { AppApplyManifest.new(user_audit_info) } - let(:org) { Organization.make(guid: 'org-guid') } - let(:space) { Space.make(guid: 'space-guid', name: 'space-name', organization: org) } - let(:app) { AppModel.make(guid: 'app-guid', name: 'app-name', space: space) } + let(:org) { create(:organization, guid: 'org-guid') } + let(:space) { create(:space, guid: 'space-guid', name: 'space-name', organization: org) } + let(:app) { create(:app_model, guid: 'app-guid', name: 'app-name', space: space) } let(:app_manifest_message) do AppManifestMessage.create_from_yml({ name: app.name, instances: 4, routes: [{ route: 'app.bommel' }], buildpack: 'ruby', stack: 'cflinuxfs4' }) end diff --git a/spec/unit/jobs/pollable_job_wrapper_spec.rb b/spec/unit/jobs/pollable_job_wrapper_spec.rb index a4e7c50758a..14c1683f6c7 100644 --- a/spec/unit/jobs/pollable_job_wrapper_spec.rb +++ b/spec/unit/jobs/pollable_job_wrapper_spec.rb @@ -109,7 +109,7 @@ class BigException < StandardError end context 'reusing a pollable job' do - let!(:existing) { VCAP::CloudController::PollableJobModel.make } + let!(:existing) { create(:pollable_job_model) } let(:pollable_job) { PollableJobWrapper.new(job, existing_guid: existing.guid) } it 'updates the existing database record with the new delayed job guid' do @@ -179,7 +179,7 @@ class BigException < StandardError context 'when there is an associated job model' do it 'marks the job model failed and records errors' do enqueued_job = VCAP::CloudController::Jobs::Enqueuer.new.enqueue(pollable_job) - job_model = VCAP::CloudController::PollableJobModel.make(delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') + job_model = create(:pollable_job_model, delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') execute_all_jobs(expected_successes: 0, expected_failures: 1) @@ -205,7 +205,7 @@ class BigException < StandardError describe '#failure' do let(:delayed_job) { instance_double(Delayed::Backend::Sequel::Job, guid: 'job-guid') } let!(:pollable_job) do - VCAP::CloudController::PollableJobModel.make(delayed_job_guid: 'job-guid', state: VCAP::CloudController::PollableJobModel::PROCESSING_STATE) + create(:pollable_job_model, delayed_job_guid: 'job-guid', state: VCAP::CloudController::PollableJobModel::PROCESSING_STATE) end context 'when handler implements recover_from_failure' do @@ -281,7 +281,7 @@ class BigException < StandardError it 'records all warnings' do enqueued_job = VCAP::CloudController::Jobs::Enqueuer.new.enqueue(pollable_job) - job_model = VCAP::CloudController::PollableJobModel.make(delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') + job_model = create(:pollable_job_model, delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') execute_all_jobs(expected_successes: 1, expected_failures: 0) @@ -297,7 +297,7 @@ class BigException < StandardError it 'has empty list of warnings' do enqueued_job = VCAP::CloudController::Jobs::Enqueuer.new.enqueue(pollable_job) - job_model = VCAP::CloudController::PollableJobModel.make(delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') + job_model = create(:pollable_job_model, delayed_job_guid: enqueued_job.guid, state: 'PROCESSING') execute_all_jobs(expected_successes: 1, expected_failures: 0) diff --git a/spec/unit/jobs/runtime/app_usage_events_cleanup_spec.rb b/spec/unit/jobs/runtime/app_usage_events_cleanup_spec.rb index 8018ee0ee69..ea7f99647e5 100644 --- a/spec/unit/jobs/runtime/app_usage_events_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/app_usage_events_cleanup_spec.rb @@ -5,8 +5,8 @@ module Jobs::Runtime RSpec.describe AppUsageEventsCleanup, job_context: :worker do let(:cutoff_age_in_days) { 30 } let(:logger) { double(Steno::Logger, info: nil) } - let!(:event_before_threshold) { AppUsageEvent.make(created_at: (cutoff_age_in_days + 1).days.ago) } - let!(:event_after_threshold) { AppUsageEvent.make(created_at: (cutoff_age_in_days - 1).days.ago) } + let!(:event_before_threshold) { create(:app_usage_event, created_at: (cutoff_age_in_days + 1).days.ago) } + let!(:event_after_threshold) { create(:app_usage_event, created_at: (cutoff_age_in_days - 1).days.ago) } subject(:job) do AppUsageEventsCleanup.new(cutoff_age_in_days) diff --git a/spec/unit/jobs/runtime/buildpack_delete_spec.rb b/spec/unit/jobs/runtime/buildpack_delete_spec.rb index 94043476b08..cc0efc30204 100644 --- a/spec/unit/jobs/runtime/buildpack_delete_spec.rb +++ b/spec/unit/jobs/runtime/buildpack_delete_spec.rb @@ -7,7 +7,7 @@ module Jobs::Runtime let(:buildpack_guid) { buildpack.guid } let(:timeout) { 90_000 } - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } before do allow(BuildpackBitsDelete).to receive(:delete_when_safe) diff --git a/spec/unit/jobs/runtime/buildpack_installer_factory_spec.rb b/spec/unit/jobs/runtime/buildpack_installer_factory_spec.rb index 077f5bf30f6..1e98668c35a 100644 --- a/spec/unit/jobs/runtime/buildpack_installer_factory_spec.rb +++ b/spec/unit/jobs/runtime/buildpack_installer_factory_spec.rb @@ -74,8 +74,8 @@ module Jobs::Runtime context 'and when there is a single existing buildpack that matches by name' do context 'and when that buildpack record has a stack' do - let(:existing_stack) { Stack.make(name: 'existing stack') } - let!(:existing_buildpack) { Buildpack.make(name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } + let(:existing_stack) { create(:stack, name: 'existing stack') } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } context 'and the buildpack zip has the same stack' do let(:buildpack_fields) { [{ file: file, options: opts, stack: existing_stack.name, config_index: 0 }] } @@ -121,7 +121,7 @@ module Jobs::Runtime end context 'and that buildpack record has a nil stack' do - let!(:existing_buildpack) { Buildpack.make(name: name, stack: nil, key: 'new_key', guid: 'the-guid') } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: nil, key: 'new_key', guid: 'the-guid') } context 'and the buildpack zip also has a nil stack' do let(:buildpack_fields) { [{ file: file, options: opts, stack: nil, config_index: 0 }] } @@ -162,11 +162,11 @@ module Jobs::Runtime end context 'and when there are many existing buildpacks' do - let(:existing_stack) { Stack.make(name: 'existing stack') } - let!(:existing_buildpack) { Buildpack.make(name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } + let(:existing_stack) { create(:stack, name: 'existing stack') } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } - let(:another_existing_stack) { Stack.make(name: 'another existing stack') } - let!(:another_existing_buildpack) { Buildpack.make(name: name, stack: another_existing_stack.name, key: 'new_key', guid: 'another-guid') } + let(:another_existing_stack) { create(:stack, name: 'another existing stack') } + let!(:another_existing_buildpack) { create(:buildpack, name: name, stack: another_existing_stack.name, key: 'new_key', guid: 'another-guid') } context 'and one matches the manifest stack' do let(:buildpack_fields) { [{ file: file, options: opts, stack: existing_stack.name, config_index: 0 }] } @@ -229,7 +229,7 @@ module Jobs::Runtime end context 'and there is only one matching Buildpack' do - let!(:existing_buildpack) { Buildpack.make(name: name, stack: nil, key: 'new_key', guid: 'the-guid') } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: nil, key: 'new_key', guid: 'the-guid') } context 'and the Buildpack has a nil stack' do context 'and the buildpack is not locked' do @@ -250,7 +250,7 @@ module Jobs::Runtime end context 'and the buildpack is locked' do - let!(:existing_buildpack) { Buildpack.make(name: name, stack: nil, key: 'new_key', guid: 'the-guid', locked: true) } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: nil, key: 'new_key', guid: 'the-guid', locked: true) } it 'raises' do msg = "Attempt to install '#{name}' for multiple stacks failed. Buildpack '#{name}' cannot be locked during upgrade." @@ -262,8 +262,8 @@ module Jobs::Runtime end context 'and the Buildpack has a non-nil stack' do - let(:existing_stack) { Stack.make(name: 'existing stack') } - let!(:existing_buildpack) { Buildpack.make(name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } + let(:existing_stack) { create(:stack, name: 'existing stack') } + let!(:existing_buildpack) { create(:buildpack, name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') } it 'creates a job for each buildpack' do expect(jobs.length).to eq(2) @@ -283,14 +283,14 @@ module Jobs::Runtime end context 'and there are multiple matching Buildpacks' do - let(:existing_stack) { Stack.make(name: 'existing stack') } + let(:existing_stack) { create(:stack, name: 'existing stack') } let!(:existing_buildpack) do - Buildpack.make(name: name, stack: existing_stack.name, key: + create(:buildpack, name: name, stack: existing_stack.name, key: 'new_key', guid: 'the-guid') end - let(:another_existing_stack) { Stack.make(name: 'another existing stack') } - let!(:another_existing_buildpack) { Buildpack.make(name: name, stack: another_existing_stack.name, key: 'a_different_key', guid: 'a-different-guid') } + let(:another_existing_stack) { create(:stack, name: 'another existing stack') } + let!(:another_existing_buildpack) { create(:buildpack, name: name, stack: another_existing_stack.name, key: 'a_different_key', guid: 'a-different-guid') } let(:buildpack_fields) do [{ file: file, options: opts, stack: existing_stack.name, config_index: 0 }, { file: another_file, options: opts, stack: another_existing_stack.name, config_index: 1 }] @@ -317,9 +317,9 @@ module Jobs::Runtime let(:buildpack_fields) { [{ file: file, options: opts, config_index: 0 }] } before do - Stack.make(name: 'existing stack') - Buildpack.make(name: name, stack: 'existing stack') - Buildpack.make(name: name, stack: nil) + create(:stack, name: 'existing stack') + create(:buildpack, name: name, stack: 'existing stack') + create(:buildpack, name: name, stack: nil) end it 'raises' do diff --git a/spec/unit/jobs/runtime/create_buildpack_installer_spec.rb b/spec/unit/jobs/runtime/create_buildpack_installer_spec.rb index a08300c85c2..54f784ed3bb 100644 --- a/spec/unit/jobs/runtime/create_buildpack_installer_spec.rb +++ b/spec/unit/jobs/runtime/create_buildpack_installer_spec.rb @@ -54,14 +54,14 @@ module Jobs::Runtime end context 'when the requested stack does exist' do - let!(:existing_stack) { Stack.make(name: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } it_behaves_like 'creating a buildpack' end end context 'when the job raises an exception' do - let!(:existing_stack) { Stack.make(name: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } let(:error) { StandardError.new('same message') } let(:logger) { double(:logger) } @@ -79,12 +79,12 @@ module Jobs::Runtime end context 'when config_index is provided' do - let!(:existing_stack) { Stack.make(name: stack_name) } - let!(:existing_buildpack1) { Buildpack.make(name: 'first_buildpack', stack: stack_name) } - let!(:existing_buildpack2) { Buildpack.make(name: 'second_buildpack', stack: stack_name) } - let!(:existing_buildpack3) { Buildpack.make(name: 'third_buildpack', stack: stack_name) } - let!(:existing_buildpack4) { Buildpack.make(name: 'fourth_buildpack', stack: stack_name) } - let!(:existing_buildpack5) { Buildpack.make(name: 'fifth_buildpack', stack: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } + let!(:existing_buildpack1) { create(:buildpack, name: 'first_buildpack', stack: stack_name) } + let!(:existing_buildpack2) { create(:buildpack, name: 'second_buildpack', stack: stack_name) } + let!(:existing_buildpack3) { create(:buildpack, name: 'third_buildpack', stack: stack_name) } + let!(:existing_buildpack4) { create(:buildpack, name: 'fourth_buildpack', stack: stack_name) } + let!(:existing_buildpack5) { create(:buildpack, name: 'fifth_buildpack', stack: stack_name) } let(:job_options) { { name: 'mybuildpack', stack: stack_name, file: zipfile, options: { enabled: true, locked: false }, config_index: 5 } } it 'moves the buildpack to position config_index + 1' do @@ -95,7 +95,7 @@ module Jobs::Runtime end context 'when config_index is provided but options includes an explicit position' do - let!(:existing_stack) { Stack.make(name: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } let(:job_options) { { name: 'mybuildpack', stack: stack_name, file: zipfile, options: { enabled: true, locked: false, position: 7 }, config_index: 5 } } it 'uses the explicit position from options instead of config_index' do @@ -106,7 +106,7 @@ module Jobs::Runtime end context 'when config_index is nil' do - let!(:existing_stack) { Stack.make(name: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } let(:job_options) { { name: 'mybuildpack', stack: stack_name, file: zipfile, options: { enabled: true, locked: false } } } it 'does not call move_to and uses default list position' do @@ -117,7 +117,7 @@ module Jobs::Runtime end context 'when uploading the buildpack fails' do - let!(:existing_stack) { Stack.make(name: stack_name) } + let!(:existing_stack) { create(:stack, name: stack_name) } before do allow_any_instance_of(UploadBuildpack).to receive(:upload_buildpack).and_raise diff --git a/spec/unit/jobs/runtime/delete_expired_droplet_blob_spec.rb b/spec/unit/jobs/runtime/delete_expired_droplet_blob_spec.rb index 6a0aff5c9d5..c3f47d801d3 100644 --- a/spec/unit/jobs/runtime/delete_expired_droplet_blob_spec.rb +++ b/spec/unit/jobs/runtime/delete_expired_droplet_blob_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Jobs::Runtime RSpec.describe DeleteExpiredDropletBlob, job_context: :worker do subject(:job) { DeleteExpiredDropletBlob.new(droplet.guid) } - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } it { is_expected.to be_a_valid_job } diff --git a/spec/unit/jobs/runtime/delete_expired_package_blob_spec.rb b/spec/unit/jobs/runtime/delete_expired_package_blob_spec.rb index 9c9d2b0df65..95cbfc78299 100644 --- a/spec/unit/jobs/runtime/delete_expired_package_blob_spec.rb +++ b/spec/unit/jobs/runtime/delete_expired_package_blob_spec.rb @@ -5,7 +5,7 @@ module Jobs::Runtime RSpec.describe DeleteExpiredPackageBlob, job_context: :worker do subject(:job) { DeleteExpiredPackageBlob.new(package.guid) } let(:type) { PackageModel::BITS_TYPE } - let(:package) { PackageModel.make(package_hash: 'some-hash', sha256_checksum: 'example-256-checksum', type: type) } + let(:package) { create(:package_model, package_hash: 'some-hash', sha256_checksum: 'example-256-checksum', type: type) } it { is_expected.to be_a_valid_job } diff --git a/spec/unit/jobs/runtime/events_cleanup_spec.rb b/spec/unit/jobs/runtime/events_cleanup_spec.rb index 28546f30378..e3422364de5 100644 --- a/spec/unit/jobs/runtime/events_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/events_cleanup_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController module Jobs::Runtime RSpec.describe EventsCleanup, job_context: :worker do let(:cutoff_age_in_days) { 2 } - let!(:old_event) { Event.make(created_at: 3.days.ago) } - let!(:event) { Event.make(created_at: 1.day.ago) } + let!(:old_event) { create(:event, created_at: 3.days.ago) } + let!(:event) { create(:event, created_at: 1.day.ago) } subject(:job) { EventsCleanup.new(cutoff_age_in_days) } diff --git a/spec/unit/jobs/runtime/expired_blob_cleanup_spec.rb b/spec/unit/jobs/runtime/expired_blob_cleanup_spec.rb index 7a9069bbff0..d8b1b012953 100644 --- a/spec/unit/jobs/runtime/expired_blob_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/expired_blob_cleanup_spec.rb @@ -12,9 +12,9 @@ module Jobs::Runtime end describe 'droplets' do - let!(:buildpack_droplet) { DropletModel.make(droplet_hash: 'not-nil', docker_receipt_image: nil) } - let!(:docker_droplet) { DropletModel.make(droplet_hash: nil, docker_receipt_image: 'repo/test-app') } - let!(:staged_droplet) { DropletModel.make(state: DropletModel::STAGED_STATE) } + let!(:buildpack_droplet) { create(:droplet_model, droplet_hash: 'not-nil', docker_receipt_image: nil) } + let!(:docker_droplet) { create(:droplet_model, droplet_hash: nil, docker_receipt_image: 'repo/test-app') } + let!(:staged_droplet) { create(:droplet_model, state: DropletModel::STAGED_STATE) } context 'expired' do before do @@ -43,8 +43,8 @@ module Jobs::Runtime describe 'packages' do context 'expired' do - let!(:expired_package) { PackageModel.make(state: PackageModel::EXPIRED_STATE) } - let!(:non_expired_package) { PackageModel.make(state: PackageModel::READY_STATE, package_hash: 'not-nil') } + let!(:expired_package) { create(:package_model, state: PackageModel::EXPIRED_STATE) } + let!(:non_expired_package) { create(:package_model, state: PackageModel::READY_STATE, package_hash: 'not-nil') } it 'enqueues a deletion job when package_hash is not nil' do expired_package.update(package_hash: 'not-nil') diff --git a/spec/unit/jobs/runtime/expired_resource_cleanup_spec.rb b/spec/unit/jobs/runtime/expired_resource_cleanup_spec.rb index 9e8eb8b74d5..a6e07fe3cea 100644 --- a/spec/unit/jobs/runtime/expired_resource_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/expired_resource_cleanup_spec.rb @@ -14,28 +14,28 @@ module Jobs::Runtime describe 'droplets' do context 'expired' do it 'deletes droplets that are expired and have no checksum information' do - droplet = DropletModel.make(state: DropletModel::EXPIRED_STATE, droplet_hash: nil, sha256_checksum: nil, app: nil) + droplet = create(:droplet_model, state: DropletModel::EXPIRED_STATE, droplet_hash: nil, sha256_checksum: nil, app: nil) expect { job.perform }.to change(DropletModel, :count).by(-1) expect(droplet).not_to exist end it 'does NOT delete droplets that are expired and has only a sha1 checksum' do - droplet = DropletModel.make(state: DropletModel::EXPIRED_STATE, droplet_hash: 'foo', sha256_checksum: nil, app: nil) + droplet = create(:droplet_model, state: DropletModel::EXPIRED_STATE, droplet_hash: 'foo', sha256_checksum: nil, app: nil) expect { job.perform }.not_to(change(DropletModel, :count)) expect(droplet).to exist end it 'does NOT delete droplets that are expired and has only a sha256 checksum' do - droplet = DropletModel.make(state: DropletModel::EXPIRED_STATE, droplet_hash: nil, sha256_checksum: 'foo', app: nil) + droplet = create(:droplet_model, state: DropletModel::EXPIRED_STATE, droplet_hash: nil, sha256_checksum: 'foo', app: nil) expect { job.perform }.not_to(change(DropletModel, :count)) expect(droplet).to exist end it 'does NOT delete droplets that are NOT expired' do - droplet = DropletModel.make(app: nil) + droplet = create(:droplet_model, app: nil) job.perform expect(droplet).to exist @@ -45,25 +45,25 @@ module Jobs::Runtime describe 'packages' do it 'deletes packages that are expired and have nil checksum information' do - package = PackageModel.make(state: PackageModel::EXPIRED_STATE, package_hash: nil, sha256_checksum: nil) + package = create(:package_model, state: PackageModel::EXPIRED_STATE, package_hash: nil, sha256_checksum: nil) expect { job.perform }.to change(PackageModel, :count).by(-1) expect(package).not_to exist end it 'does NOT delete packages that are expired but have a sha1 checksum' do - package = PackageModel.make(state: PackageModel::EXPIRED_STATE, package_hash: 'not-nil', sha256_checksum: nil) + package = create(:package_model, state: PackageModel::EXPIRED_STATE, package_hash: 'not-nil', sha256_checksum: nil) job.perform expect(package).to exist end it 'does NOT delete packages that are expired but have a sha256 checksum' do - package = PackageModel.make(state: PackageModel::EXPIRED_STATE, package_hash: nil, sha256_checksum: 'not-nill') + package = create(:package_model, state: PackageModel::EXPIRED_STATE, package_hash: nil, sha256_checksum: 'not-nill') job.perform expect(package).to exist end it 'does NOT delete packages that are NOT expired' do - package = PackageModel.make + package = create(:package_model) job.perform expect(package).to exist end diff --git a/spec/unit/jobs/runtime/model_deletion_spec.rb b/spec/unit/jobs/runtime/model_deletion_spec.rb index f44ac1906b6..cd316099a22 100644 --- a/spec/unit/jobs/runtime/model_deletion_spec.rb +++ b/spec/unit/jobs/runtime/model_deletion_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController module Jobs::Runtime RSpec.describe ModelDeletion, job_context: :worker do - let!(:space) { Space.make } + let!(:space) { create(:space) } subject(:job) { ModelDeletion.new(Space, space.guid) } diff --git a/spec/unit/jobs/runtime/orphaned_blobs_cleanup_spec.rb b/spec/unit/jobs/runtime/orphaned_blobs_cleanup_spec.rb index e44d193c972..71e1060dbc7 100644 --- a/spec/unit/jobs/runtime/orphaned_blobs_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/orphaned_blobs_cleanup_spec.rb @@ -224,7 +224,7 @@ module Jobs::Runtime describe 'when determining whether a blob is in use' do context 'when a blobstore file matches an existing droplet' do - let!(:droplet) { DropletModel.make(guid: 'real-droplet-blob', droplet_hash: '123') } + let!(:droplet) { create(:droplet_model, guid: 'real-droplet-blob', droplet_hash: '123') } let(:droplet_files) { [double(:blob, key: 're/al/real-droplet-blob/123')] } it 'does not mark the droplet blob as an orphan' do @@ -235,7 +235,7 @@ module Jobs::Runtime end context 'when a blobstore file matches an existing package' do - let!(:package) { PackageModel.make(guid: 'real-package-blob') } + let!(:package) { create(:package_model, guid: 'real-package-blob') } let(:package_files) { [double(:blob, key: 're/al/real-package-blob')] } it 'does not mark the droplet blob as an orphan' do @@ -246,7 +246,7 @@ module Jobs::Runtime end context 'when a blobstore file matches an existing buildpack' do - let!(:buildpack) { Buildpack.make(key: 'real-buildpack-blob') } + let!(:buildpack) { create(:buildpack, key: 'real-buildpack-blob') } let(:buildpack_files) { [double(:blob, key: 're/al/real-buildpack-blob')] } it 'does not mark the droplet blob as an orphan' do @@ -532,7 +532,7 @@ module Jobs::Runtime before do allow(BlobstoreDelete).to receive(:new) - PackageModel.make(guid: 'real-package-blob') + create(:package_model, guid: 'real-package-blob') OrphanedBlob.create(blob_key: 're/al/real-package-blob', dirty_count: OrphanedBlobsCleanup::DIRTY_THRESHOLD, blobstore_type: 'package_blobstore') end diff --git a/spec/unit/jobs/runtime/pending_build_cleanup_spec.rb b/spec/unit/jobs/runtime/pending_build_cleanup_spec.rb index 6654e784a2d..1331435ec8f 100644 --- a/spec/unit/jobs/runtime/pending_build_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/pending_build_cleanup_spec.rb @@ -18,8 +18,8 @@ module Jobs::Runtime let(:fake_logger) { instance_double(Steno::Logger, error: nil, info: nil) } context 'with builds which have been staging for too long' do - let!(:build1) { BuildModel.make(state: BuildModel::STAGING_STATE) } - let!(:build2) { BuildModel.make(state: BuildModel::STAGING_STATE) } + let!(:build1) { create(:build_model, state: BuildModel::STAGING_STATE) } + let!(:build2) { create(:build_model, state: BuildModel::STAGING_STATE) } before do allow(Steno).to receive(:logger).and_return(fake_logger) @@ -54,8 +54,8 @@ module Jobs::Runtime end context 'when the builds were created recently' do - let!(:build1) { BuildModel.make(state: BuildModel::STAGING_STATE) } - let!(:build2) { BuildModel.make(state: BuildModel::STAGING_STATE) } + let!(:build1) { create(:build_model, state: BuildModel::STAGING_STATE) } + let!(:build2) { create(:build_model, state: BuildModel::STAGING_STATE) } before do build1.this.update(updated_at: non_expired_time, created_at: non_expired_time) @@ -75,8 +75,8 @@ module Jobs::Runtime end it 'ignores builds that have not been staging for too long' do - build1 = BuildModel.make(state: BuildModel::STAGING_STATE) - build2 = BuildModel.make(state: BuildModel::STAGING_STATE) + build1 = create(:build_model, state: BuildModel::STAGING_STATE) + build2 = create(:build_model, state: BuildModel::STAGING_STATE) cleanup_job.perform @@ -85,8 +85,8 @@ module Jobs::Runtime end it 'ignores builds in a completed state' do - build1 = BuildModel.make(state: BuildModel::STAGED_STATE) - build2 = BuildModel.make(state: BuildModel::STAGED_STATE) + build1 = create(:build_model, state: BuildModel::STAGED_STATE) + build2 = create(:build_model, state: BuildModel::STAGED_STATE) build1.this.update(updated_at: expired_time) build2.this.update(updated_at: expired_time) diff --git a/spec/unit/jobs/runtime/pending_droplet_cleanup_spec.rb b/spec/unit/jobs/runtime/pending_droplet_cleanup_spec.rb index 7cec9153849..452588d28e0 100644 --- a/spec/unit/jobs/runtime/pending_droplet_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/pending_droplet_cleanup_spec.rb @@ -17,9 +17,9 @@ module Jobs::Runtime let(:non_expired_time) { Time.now.utc - staging_timeout - 1.minute } context 'with droplets which have been staging or processing upload for too long' do - let!(:droplet1) { DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) } - let!(:droplet2) { DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) } - let!(:droplet3) { DropletModel.make(state: DropletModel::PROCESSING_UPLOAD_STATE, app: nil) } + let!(:droplet1) { create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) } + let!(:droplet2) { create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) } + let!(:droplet3) { create(:droplet_model, state: DropletModel::PROCESSING_UPLOAD_STATE, set_as_current_droplet: false) } before do droplet1.this.update(updated_at: expired_time) @@ -49,9 +49,9 @@ module Jobs::Runtime end context 'when the droplets were created recently' do - let!(:droplet1) { DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) } - let!(:droplet2) { DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) } - let!(:droplet3) { DropletModel.make(state: DropletModel::PROCESSING_UPLOAD_STATE, app: nil) } + let!(:droplet1) { create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) } + let!(:droplet2) { create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) } + let!(:droplet3) { create(:droplet_model, state: DropletModel::PROCESSING_UPLOAD_STATE, set_as_current_droplet: false) } before do droplet1.this.update(updated_at: non_expired_time, created_at: non_expired_time) @@ -73,9 +73,9 @@ module Jobs::Runtime end it 'ignores droplets that have not been staging or processing upload for too long' do - droplet1 = DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) - droplet2 = DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) - droplet3 = DropletModel.make(state: DropletModel::PROCESSING_UPLOAD_STATE, app: nil) + droplet1 = create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) + droplet2 = create(:droplet_model, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) + droplet3 = create(:droplet_model, state: DropletModel::PROCESSING_UPLOAD_STATE, set_as_current_droplet: false) cleanup_job.perform @@ -85,8 +85,8 @@ module Jobs::Runtime end it 'ignores droplets in a completed state' do - droplet1 = DropletModel.make(state: DropletModel::EXPIRED_STATE, app: nil) - droplet2 = DropletModel.make(state: DropletModel::STAGED_STATE, app: nil) + droplet1 = create(:droplet_model, state: DropletModel::EXPIRED_STATE, set_as_current_droplet: false) + droplet2 = create(:droplet_model, state: DropletModel::STAGED_STATE, set_as_current_droplet: false) droplet1.this.update(updated_at: expired_time) droplet2.this.update(updated_at: expired_time) diff --git a/spec/unit/jobs/runtime/prune_completed_builds_spec.rb b/spec/unit/jobs/runtime/prune_completed_builds_spec.rb index 4d64bbff151..504fa05aef6 100644 --- a/spec/unit/jobs/runtime/prune_completed_builds_spec.rb +++ b/spec/unit/jobs/runtime/prune_completed_builds_spec.rb @@ -14,14 +14,14 @@ module Jobs::Runtime end describe '#perform' do - let(:app) { AppModel.make(name: 'app') } + let(:app) { create(:app_model, name: 'app') } it 'deletes all the staged builds over the limit' do expect(BuildModel.count).to eq(0) total = 50 (1..50).each do |i| - BuildModel.make(id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -35,7 +35,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - BuildModel.make(id: i, state: BuildModel::FAILED_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::FAILED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -49,7 +49,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - BuildModel.make(id: i, state: BuildModel::STAGING_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::STAGING_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -61,13 +61,13 @@ module Jobs::Runtime it 'does not delete in-flight builds over the limit' do total = 60 (1..20).each do |i| - BuildModel.make(id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) end (21..40).each do |i| - BuildModel.make(id: i, state: BuildModel::STAGING_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::STAGING_STATE, app: app, created_at: Time.now - total + i) end (41..60).each do |i| - BuildModel.make(id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) + create(:build_model, id: i, state: BuildModel::STAGED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -80,8 +80,8 @@ module Jobs::Runtime expect(BuildModel.count).to eq(0) 50.times do - b = BuildModel.make(state: BuildModel::STAGED_STATE, app: app) - BuildpackLifecycleDataModel.make(build: b) + b = create(:build_model, state: BuildModel::STAGED_STATE, app: app) + create(:buildpack_lifecycle_data_model, build: b) end expect do @@ -90,8 +90,8 @@ module Jobs::Runtime end context 'multiple apps' do - let(:app_the_second) { AppModel.make(name: 'app_the_second') } - let(:app_the_third) { AppModel.make(name: 'app_the_third') } + let(:app_the_second) { create(:app_model, name: 'app_the_second') } + let(:app_the_third) { create(:app_model, name: 'app_the_third') } it 'prunes builds on multiple apps' do expect(BuildModel.count).to eq(0) @@ -99,7 +99,7 @@ module Jobs::Runtime [app, app_the_second, app_the_third].each_with_index do |current_app, app_index| total = 50 (1..total).each do |i| - BuildModel.make(id: i + (1000 * app_index), state: BuildModel::STAGED_STATE, app: current_app, created_at: Time.now - total + i) + create(:build_model, id: i + (1000 * app_index), state: BuildModel::STAGED_STATE, app: current_app, created_at: Time.now - total + i) end end @@ -117,7 +117,7 @@ module Jobs::Runtime end context 'apps without builds' do - let!(:app_without_builds) { AppModel.make } + let!(:app_without_builds) { create(:app_model) } let(:fake_logger) { instance_double(Steno::Logger, info: nil) } before do diff --git a/spec/unit/jobs/runtime/prune_completed_deployments_spec.rb b/spec/unit/jobs/runtime/prune_completed_deployments_spec.rb index f0a487971a5..0970dc3f654 100644 --- a/spec/unit/jobs/runtime/prune_completed_deployments_spec.rb +++ b/spec/unit/jobs/runtime/prune_completed_deployments_spec.rb @@ -14,14 +14,14 @@ module Jobs::Runtime end describe '#perform' do - let(:app) { AppModel.make(name: 'app') } + let(:app) { create(:app_model, name: 'app') } it 'deletes all the deployed deployments over the limit' do expect(DeploymentModel.count).to eq(0) total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -35,7 +35,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::CANCELED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::CANCELED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -49,7 +49,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYING_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::DEPLOYING_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -63,7 +63,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::PREPAUSED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::PREPAUSED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -77,7 +77,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::PAUSED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::PAUSED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -91,7 +91,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::CANCELING_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::CANCELING_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -103,13 +103,13 @@ module Jobs::Runtime it 'does not delete in-flight deployments over the limit' do total = 60 (1..20).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) end (21..40).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYING_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::DEPLOYING_STATE, app: app, created_at: Time.now - total + i) end (41..60).each do |i| - DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_model, id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) end job.perform @@ -125,9 +125,9 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - deployment = DeploymentModel.make(id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) - DeploymentAnnotationModel.make(deployment: deployment, key_name: i, value: i) - DeploymentLabelModel.make(deployment: deployment, key_name: i, value: i) + deployment = create(:deployment_model, id: i, state: DeploymentModel::DEPLOYED_STATE, app: app, created_at: Time.now - total + i) + create(:deployment_annotation_model, deployment: deployment, key_name: i, value: i) + create(:deployment_label_model, deployment: deployment, key_name: i, value: i) end job.perform @@ -144,8 +144,8 @@ module Jobs::Runtime expect(DeploymentModel.count).to eq(0) 50.times do - d = DeploymentModel.make(state: DeploymentModel::DEPLOYED_STATE, app: app) - DeploymentProcessModel.make(deployment: d) + d = create(:deployment_model, state: DeploymentModel::DEPLOYED_STATE, app: app) + create(:deployment_process_model, deployment: d) end expect do @@ -154,8 +154,8 @@ module Jobs::Runtime end context 'multiple apps' do - let(:app_the_second) { AppModel.make(name: 'app_the_second') } - let(:app_the_third) { AppModel.make(name: 'app_the_third') } + let(:app_the_second) { create(:app_model, name: 'app_the_second') } + let(:app_the_third) { create(:app_model, name: 'app_the_third') } it 'prunes deployments on multiple apps' do expect(DeploymentModel.count).to eq(0) @@ -163,7 +163,7 @@ module Jobs::Runtime [app, app_the_second, app_the_third].each_with_index do |current_app, app_index| total = 50 (1..total).each do |i| - DeploymentModel.make(id: i + (1000 * app_index), state: DeploymentModel::DEPLOYED_STATE, app: current_app, created_at: Time.now - total + i) + create(:deployment_model, id: i + (1000 * app_index), state: DeploymentModel::DEPLOYED_STATE, app: current_app, created_at: Time.now - total + i) end end @@ -181,7 +181,7 @@ module Jobs::Runtime end context 'apps without deployments' do - let!(:app_without_deployments) { AppModel.make } + let!(:app_without_deployments) { create(:app_model) } let(:fake_logger) { instance_double(Steno::Logger, info: nil) } before do diff --git a/spec/unit/jobs/runtime/prune_completed_tasks_spec.rb b/spec/unit/jobs/runtime/prune_completed_tasks_spec.rb index dfeec255065..280eab2ad73 100644 --- a/spec/unit/jobs/runtime/prune_completed_tasks_spec.rb +++ b/spec/unit/jobs/runtime/prune_completed_tasks_spec.rb @@ -25,8 +25,8 @@ module Jobs::Runtime let(:time_after_expiration) { Time.now.utc + (cutoff_age_in_days + 1).days } it 'deletes succeeded and failed tasks' do - failed_task = TaskModel.make(state: TaskModel::FAILED_STATE) - succeeded_task = TaskModel.make(state: TaskModel::SUCCEEDED_STATE) + failed_task = create(:task_model, state: TaskModel::FAILED_STATE) + succeeded_task = create(:task_model, state: TaskModel::SUCCEEDED_STATE) Timecop.travel(time_after_expiration) do expect(failed_task).to exist @@ -38,9 +38,9 @@ module Jobs::Runtime end it 'deletes tasks with labels' do - labeled_task = TaskModel.make(state: TaskModel::FAILED_STATE) + labeled_task = create(:task_model, state: TaskModel::FAILED_STATE) - TaskLabelModel.make(key_name: 'cool', value: 'stuff', task: labeled_task) + create(:task_label_model, key_name: 'cool', value: 'stuff', task: labeled_task) Timecop.travel(time_after_expiration) do expect(labeled_task).to exist @@ -50,8 +50,8 @@ module Jobs::Runtime end it 'deletes tasks with annotations' do - annotated_task = TaskModel.make(state: TaskModel::FAILED_STATE) - TaskAnnotationModel.make(key_name: 'cool', value: 'stuff', task: annotated_task) + annotated_task = create(:task_model, state: TaskModel::FAILED_STATE) + create(:task_annotation_model, key_name: 'cool', value: 'stuff', task: annotated_task) Timecop.travel(time_after_expiration) do expect(annotated_task).to exist @@ -61,8 +61,8 @@ module Jobs::Runtime end it 'does not delete pending or running tasks' do - running_task = TaskModel.make(state: TaskModel::RUNNING_STATE) - pending_task = TaskModel.make(state: TaskModel::PENDING_STATE) + running_task = create(:task_model, state: TaskModel::RUNNING_STATE) + pending_task = create(:task_model, state: TaskModel::PENDING_STATE) Timecop.travel(time_after_expiration) do expect(running_task).to exist @@ -75,9 +75,9 @@ module Jobs::Runtime describe 'logging' do it 'logs the number of deleted tasks' do - TaskModel.make(state: TaskModel::FAILED_STATE) - TaskModel.make(state: TaskModel::FAILED_STATE) - TaskModel.make(state: TaskModel::SUCCEEDED_STATE) + create(:task_model, state: TaskModel::FAILED_STATE) + create(:task_model, state: TaskModel::FAILED_STATE) + create(:task_model, state: TaskModel::SUCCEEDED_STATE) Timecop.travel(time_after_expiration) do expect(logger).to receive(:info).with('Cleaned up 3 TaskModel rows') @@ -86,8 +86,8 @@ module Jobs::Runtime end it 'logs the number of deleted labels' do - labeled_task = TaskModel.make(state: TaskModel::FAILED_STATE) - TaskLabelModel.make(key_name: 'cool', value: 'stuff', task: labeled_task) + labeled_task = create(:task_model, state: TaskModel::FAILED_STATE) + create(:task_label_model, key_name: 'cool', value: 'stuff', task: labeled_task) Timecop.travel(time_after_expiration) do expect(logger).to receive(:info).with('Cleaned up 1 TaskLabelModel rows') @@ -96,8 +96,8 @@ module Jobs::Runtime end it 'logs the number of deleted annotations' do - annotated_task = TaskModel.make(state: TaskModel::FAILED_STATE) - TaskAnnotationModel.make(key_name: 'cool', value: 'stuff', task: annotated_task) + annotated_task = create(:task_model, state: TaskModel::FAILED_STATE) + create(:task_annotation_model, key_name: 'cool', value: 'stuff', task: annotated_task) Timecop.travel(time_after_expiration) do expect(logger).to receive(:info).with('Cleaned up 1 TaskAnnotationModel rows') @@ -111,10 +111,10 @@ module Jobs::Runtime let(:time_before_expiration) { Time.now.utc + (cutoff_age_in_days - 1).days } it 'does not delete succeeded, failed, pending, or running tasks' do - running_task = TaskModel.make(state: TaskModel::RUNNING_STATE) - pending_task = TaskModel.make(state: TaskModel::PENDING_STATE) - failed_task = TaskModel.make(state: TaskModel::FAILED_STATE) - succeeded_task = TaskModel.make(state: TaskModel::SUCCEEDED_STATE) + running_task = create(:task_model, state: TaskModel::RUNNING_STATE) + pending_task = create(:task_model, state: TaskModel::PENDING_STATE) + failed_task = create(:task_model, state: TaskModel::FAILED_STATE) + succeeded_task = create(:task_model, state: TaskModel::SUCCEEDED_STATE) Timecop.travel(time_before_expiration) do expect(running_task).to exist diff --git a/spec/unit/jobs/runtime/prune_excess_app_revisions_spec.rb b/spec/unit/jobs/runtime/prune_excess_app_revisions_spec.rb index 5753f432829..191c29eb01e 100644 --- a/spec/unit/jobs/runtime/prune_excess_app_revisions_spec.rb +++ b/spec/unit/jobs/runtime/prune_excess_app_revisions_spec.rb @@ -14,14 +14,14 @@ module Jobs::Runtime end describe '#perform' do - let(:app) { AppModel.make(name: 'app') } + let(:app) { create(:app_model, name: 'app') } it 'deletes all the revisions over the limit' do expect(RevisionModel.count).to eq(0) total = 50 (1..50).each do |i| - RevisionModel.make(version: i, app: app, created_at: Time.now - total + i) + create(:revision_model, version: i, app: app, created_at: Time.now - total + i) end job.perform @@ -42,7 +42,7 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - RevisionModel.make(version: i, app: app, created_at: Time.now - total + i) + create(:revision_model, version: i, app: app, created_at: Time.now - total + i) end job.perform @@ -59,9 +59,9 @@ module Jobs::Runtime total = 50 (1..50).each do |i| - revision = RevisionModel.make(version: i, app: app, created_at: Time.now - total + i) - RevisionAnnotationModel.make(revision: revision, key_name: i, value: i) - RevisionLabelModel.make(revision: revision, key_name: i, value: i) + revision = create(:revision_model, version: i, app: app, created_at: Time.now - total + i) + create(:revision_annotation_model, revision: revision, key_name: i, value: i) + create(:revision_label_model, revision: revision, key_name: i, value: i) end job.perform @@ -79,7 +79,7 @@ module Jobs::Runtime process_commands = [] 50.times do |_i| - revision = RevisionModel.make(app:) + revision = create(:revision_model, app:) process_commands << revision.process_commands end process_commands.flatten! @@ -93,8 +93,8 @@ module Jobs::Runtime end context 'multiple apps' do - let(:app_the_second) { AppModel.make(name: 'app_the_second') } - let(:app_the_third) { AppModel.make(name: 'app_the_third') } + let(:app_the_second) { create(:app_model, name: 'app_the_second') } + let(:app_the_third) { create(:app_model, name: 'app_the_third') } it 'prunes revisions on multiple apps' do expect(RevisionModel.count).to eq(0) @@ -102,7 +102,7 @@ module Jobs::Runtime [app, app_the_second, app_the_third].each_with_index do |current_app, app_index| total = 50 (1..total).each do |i| - RevisionModel.make(version: i + (1000 * app_index), app: current_app, created_at: Time.now - total + i) + create(:revision_model, version: i + (1000 * app_index), app: current_app, created_at: Time.now - total + i) end end @@ -120,7 +120,7 @@ module Jobs::Runtime end context 'apps without revisions' do - let!(:app_without_revisions) { AppModel.make } + let!(:app_without_revisions) { create(:app_model) } let(:fake_logger) { instance_double(Steno::Logger, info: nil) } before do diff --git a/spec/unit/jobs/runtime/service_operations_initial_cleanup_spec.rb b/spec/unit/jobs/runtime/service_operations_initial_cleanup_spec.rb index 047fe94d1a4..5ce58b5beca 100644 --- a/spec/unit/jobs/runtime/service_operations_initial_cleanup_spec.rb +++ b/spec/unit/jobs/runtime/service_operations_initial_cleanup_spec.rb @@ -25,10 +25,10 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end describe 'perform' do - let!(:service_instance) { ManagedServiceInstance.make } - let!(:service_binding) { ServiceBinding.make } - let!(:service_key) { ServiceKey.make } - let!(:route_binding) { RouteBinding.make } + let!(:service_instance) { create(:managed_service_instance) } + let!(:service_binding) { create(:service_binding) } + let!(:service_key) { create(:service_key) } + let!(:route_binding) { create(:route_binding) } before do allow(Steno).to receive(:logger).and_return(fake_logger) @@ -40,7 +40,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there are no service instance operations in state create/initial' do - let!(:service_instance_operation) { ServiceInstanceOperation.make(service_instance_id: service_instance.id, type: 'create', state: 'succeeded') } + let!(:service_instance_operation) { create(:service_instance_operation, service_instance_id: service_instance.id, type: 'create', state: 'succeeded') } it 'does nothing' do job.perform @@ -52,7 +52,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there is one service instance operation in state create/initial' do - let!(:service_instance_operation) { ServiceInstanceOperation.make(service_instance_id: service_instance.id, type: 'create', state: 'initial') } + let!(:service_instance_operation) { create(:service_instance_operation, service_instance_id: service_instance.id, type: 'create', state: 'initial') } context 'and the service broker connection timeout has not yet passed' do it 'does nothing' do @@ -86,7 +86,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there are no service instance binding operations in state create/initial' do - let!(:service_binding_operation) { ServiceBindingOperation.make(service_binding_id: service_binding.id, type: 'create', state: 'succeeded') } + let!(:service_binding_operation) { create(:service_binding_operation, service_binding_id: service_binding.id, type: 'create', state: 'succeeded') } it 'does nothing' do job.perform @@ -98,7 +98,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there is one service instance binding operation in state create/initial' do - let!(:service_binding_operation) { ServiceBindingOperation.make(service_binding_id: service_binding.id, type: 'create', state: 'initial') } + let!(:service_binding_operation) { create(:service_binding_operation, service_binding_id: service_binding.id, type: 'create', state: 'initial') } context 'and the service broker connection timeout has not yet passed' do it 'does nothing' do @@ -132,7 +132,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there are no service key operations in state create/initial' do - let!(:service_key_operation) { ServiceKeyOperation.make(service_key_id: service_key.id, type: 'create', state: 'succeeded') } + let!(:service_key_operation) { create(:service_key_operation, service_key_id: service_key.id, type: 'create', state: 'succeeded') } it 'does nothing' do job.perform @@ -144,7 +144,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there is one service key operation in state create/initial' do - let!(:service_key_operation) { ServiceKeyOperation.make(service_key_id: service_key.id, type: 'create', state: 'initial') } + let!(:service_key_operation) { create(:service_key_operation, service_key_id: service_key.id, type: 'create', state: 'initial') } context 'and the service broker connection timeout has not yet passed' do it 'does nothing' do @@ -178,7 +178,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there are no route binding operations in state create/initial' do - let!(:route_binding_operation) { RouteBindingOperation.make(route_binding_id: route_binding.id, type: 'create', state: 'succeeded') } + let!(:route_binding_operation) { create(:route_binding_operation, route_binding_id: route_binding.id, type: 'create', state: 'succeeded') } it 'does nothing' do job.perform @@ -190,7 +190,7 @@ def expect_no_orphan_mitigator_calls(orphan_mitigator) end context 'when there is one route binding operation in state create/initial' do - let!(:route_binding_operation) { RouteBindingOperation.make(route_binding_id: route_binding.id, type: 'create', state: 'initial') } + let!(:route_binding_operation) { create(:route_binding_operation, route_binding_id: route_binding.id, type: 'create', state: 'initial') } context 'and the service broker connection timeout has not yet passed' do it 'does nothing' do diff --git a/spec/unit/jobs/runtime/update_buildpack_installer_spec.rb b/spec/unit/jobs/runtime/update_buildpack_installer_spec.rb index e03e00818da..683d4a24c37 100644 --- a/spec/unit/jobs/runtime/update_buildpack_installer_spec.rb +++ b/spec/unit/jobs/runtime/update_buildpack_installer_spec.rb @@ -8,8 +8,8 @@ module Jobs::Runtime let(:new_buildpack_options) { { enabled: true, locked: true, position: 1 } } let(:stack_name) { 'mystack' } - let(:existing_stack) { Stack.make(name: 'existing-stack') } - let!(:existing_buildpack) { Buildpack.make(name: 'mybuildpack', stack: nil, filename: nil, enabled: false) } + let(:existing_stack) { create(:stack, name: 'existing-stack') } + let!(:existing_buildpack) { create(:buildpack, name: 'mybuildpack', stack: nil, filename: nil, enabled: false) } let(:job_options) do { name: 'mybuildpack', @@ -57,7 +57,7 @@ module Jobs::Runtime end context 'but that buildpack exists and is locked' do - let(:existing_buildpack) { Buildpack.make(name: 'lockedbuildpack', stack: existing_stack.name, locked: true) } + let(:existing_buildpack) { create(:buildpack, name: 'lockedbuildpack', stack: existing_stack.name, locked: true) } it 'does not update a locked buildpack' do job.perform @@ -90,8 +90,8 @@ module Jobs::Runtime end context 'with an existing buildpack' do - let(:existing_stack) { Stack.make(name: 'existing-stack') } - let!(:existing_buildpack) { Buildpack.make(name: 'mybuildpack', stack: existing_stack.name) } + let(:existing_stack) { create(:stack, name: 'existing-stack') } + let!(:existing_buildpack) { create(:buildpack, name: 'mybuildpack', stack: existing_stack.name) } it 'does not update any values on the buildpack and re-raises the error' do expect do diff --git a/spec/unit/jobs/services/delete_orphaned_binding_spec.rb b/spec/unit/jobs/services/delete_orphaned_binding_spec.rb index cb18203b423..293deda1027 100644 --- a/spec/unit/jobs/services/delete_orphaned_binding_spec.rb +++ b/spec/unit/jobs/services/delete_orphaned_binding_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Jobs::Services RSpec.describe DeleteOrphanedBinding, job_context: :worker do let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } - let(:service_binding) { VCAP::CloudController::ServiceBinding.make } + let(:service_binding) { create(:service_binding) } let(:binding_info) { OrphanedBindingInfo.new(service_binding) } let(:name) { 'fake-name' } diff --git a/spec/unit/jobs/services/delete_orphaned_instance_spec.rb b/spec/unit/jobs/services/delete_orphaned_instance_spec.rb index 6a853e3ed56..acdff015cf2 100644 --- a/spec/unit/jobs/services/delete_orphaned_instance_spec.rb +++ b/spec/unit/jobs/services/delete_orphaned_instance_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Jobs::Services RSpec.describe DeleteOrphanedInstance, job_context: :worker do let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } - let(:plan) { VCAP::CloudController::ServicePlan.make } + let(:plan) { create(:service_plan) } let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.new(service_plan: plan) } let(:name) { 'fake-name' } diff --git a/spec/unit/jobs/services/delete_orphaned_key_spec.rb b/spec/unit/jobs/services/delete_orphaned_key_spec.rb index 3ddf1e031d0..760c1903fb7 100644 --- a/spec/unit/jobs/services/delete_orphaned_key_spec.rb +++ b/spec/unit/jobs/services/delete_orphaned_key_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Jobs::Services RSpec.describe DeleteOrphanedKey, job_context: :worker do let(:client) { instance_double(VCAP::Services::ServiceBrokers::V2::Client) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:service_instance_guid) { service_instance.guid } let(:key_guid) { 'fake-key-guid' } let(:service_key_name) { 'fake-service-key-name' } diff --git a/spec/unit/jobs/services/service_binding_state_fetch_spec.rb b/spec/unit/jobs/services/service_binding_state_fetch_spec.rb index 6652ab80e8e..8d05d5ab594 100644 --- a/spec/unit/jobs/services/service_binding_state_fetch_spec.rb +++ b/spec/unit/jobs/services/service_binding_state_fetch_spec.rb @@ -8,11 +8,11 @@ module Jobs module Services RSpec.describe ServiceBindingStateFetch, job_context: :worker do let(:operation_type) { 'create' } - let(:service_binding_operation) { ServiceBindingOperation.make(state: 'in progress', type: operation_type) } + let(:service_binding_operation) { create(:service_binding_operation, state: 'in progress', type: operation_type) } let(:maximum_polling_duration_for_plan) {} - let(:service_plan) { ServicePlan.make(maximum_polling_duration: maximum_polling_duration_for_plan) } + let(:service_plan) { create(:service_plan, maximum_polling_duration: maximum_polling_duration_for_plan) } let(:service_binding) do - service_binding = ServiceBinding.make(service_instance: ManagedServiceInstance.make(service_plan:)) + service_binding = create(:service_binding, service_instance: create(:managed_service_instance, service_plan:)) service_binding.service_binding_operation = service_binding_operation service_binding end @@ -20,7 +20,7 @@ module Services let(:max_duration) { 10_080 } let(:default_polling_interval) { 60 } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'fake@mail.foo' } let(:user_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email) } let(:request_attrs) do diff --git a/spec/unit/jobs/services/service_instance_state_fetch_spec.rb b/spec/unit/jobs/services/service_instance_state_fetch_spec.rb index 18d11aba276..6f6276b9bf4 100644 --- a/spec/unit/jobs/services/service_instance_state_fetch_spec.rb +++ b/spec/unit/jobs/services/service_instance_state_fetch_spec.rb @@ -7,18 +7,18 @@ module VCAP::CloudController module Jobs module Services RSpec.describe ServiceInstanceStateFetch, job_context: :worker do - let(:proposed_service_plan) { ServicePlan.make } + let(:proposed_service_plan) { create(:service_plan) } let(:proposed_maintenance_info) { { 'version' => '2.0' } } let(:maximum_polling_duration_for_plan) {} - let(:service_plan) { ServicePlan.make(maximum_polling_duration: maximum_polling_duration_for_plan) } + let(:service_plan) { create(:service_plan, maximum_polling_duration: maximum_polling_duration_for_plan) } let(:service_instance) do - operation = ServiceInstanceOperation.make(proposed_changes: { - name: 'new-fake-name', - service_plan_guid: proposed_service_plan.guid, - maintenance_info: proposed_maintenance_info - }) + operation = create(:service_instance_operation, proposed_changes: { + name: 'new-fake-name', + service_plan_guid: proposed_service_plan.guid, + maintenance_info: proposed_maintenance_info + }) operation.save - service_instance = ManagedServiceInstance.make(service_plan:) + service_instance = create(:managed_service_instance, service_plan:) service_instance.save service_instance.service_instance_operation = operation @@ -28,7 +28,7 @@ module Services let(:broker) { service_instance.service_broker } let(:name) { 'fake-name' } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'fake@mail.foo' } let(:status) { 200 } diff --git a/spec/unit/jobs/services/service_usage_events_cleanup_spec.rb b/spec/unit/jobs/services/service_usage_events_cleanup_spec.rb index 181ad89e18d..7b8025e0884 100644 --- a/spec/unit/jobs/services/service_usage_events_cleanup_spec.rb +++ b/spec/unit/jobs/services/service_usage_events_cleanup_spec.rb @@ -5,8 +5,8 @@ module Jobs::Services RSpec.describe ServiceUsageEventsCleanup, job_context: :worker do let(:cutoff_age_in_days) { 30 } let(:logger) { double(Steno::Logger, info: nil) } - let!(:event_before_threshold) { ServiceUsageEvent.make(created_at: (cutoff_age_in_days + 1).days.ago) } - let!(:event_after_threshold) { ServiceUsageEvent.make(created_at: (cutoff_age_in_days - 1).days.ago) } + let!(:event_before_threshold) { create(:service_usage_event, created_at: (cutoff_age_in_days + 1).days.ago) } + let!(:event_after_threshold) { create(:service_usage_event, created_at: (cutoff_age_in_days - 1).days.ago) } subject(:job) do ServiceUsageEventsCleanup.new(cutoff_age_in_days) diff --git a/spec/unit/jobs/space_apply_manifest_action_job_spec.rb b/spec/unit/jobs/space_apply_manifest_action_job_spec.rb index af80660ffc1..c8a3e5b71cb 100644 --- a/spec/unit/jobs/space_apply_manifest_action_job_spec.rb +++ b/spec/unit/jobs/space_apply_manifest_action_job_spec.rb @@ -3,12 +3,12 @@ module VCAP::CloudController module Jobs RSpec.describe SpaceApplyManifestActionJob, job_context: :worker do - let(:user) { User.make(admin: true) } + let(:user) { create(:user, admin: true) } let(:user_audit_info) { UserAuditInfo.new(user_email: 'user.email', user_guid: user.guid, user_name: 'user.name') } let(:apply_manifest_action) { instance_double(AppApplyManifest) } - let(:space) { Space.make } - let(:app1) { AppModel.make(name: 'steel', space: space) } - let(:app2) { AppModel.make(name: 'cut', space: space) } + let(:space) { create(:space) } + let(:app1) { create(:app_model, name: 'steel', space: space) } + let(:app2) { create(:app_model, name: 'cut', space: space) } let(:app_guid_message_hash) do { app1.guid => AppManifestMessage.create_from_yml({ name: app1.name, instances: 4, routes: [{ route: 'foo.example.com' }] }), diff --git a/spec/unit/jobs/v2/upload_droplet_from_user_spec.rb b/spec/unit/jobs/v2/upload_droplet_from_user_spec.rb index 91adb0d7931..37ba4b94099 100644 --- a/spec/unit/jobs/v2/upload_droplet_from_user_spec.rb +++ b/spec/unit/jobs/v2/upload_droplet_from_user_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController module Jobs::V2 RSpec.describe UploadDropletFromUser, job_context: :api do - let(:app) { AppModel.make } - let(:droplet) { DropletModel.make(app: app, state: DropletModel::PROCESSING_UPLOAD_STATE) } + let(:app) { create(:app_model) } + let(:droplet) { create(:droplet_model, app: app, state: DropletModel::PROCESSING_UPLOAD_STATE, set_as_current_droplet: false) } subject(:job) { UploadDropletFromUser.new('file_path', droplet.guid) } diff --git a/spec/unit/jobs/v3/buildpack_bits_spec.rb b/spec/unit/jobs/v3/buildpack_bits_spec.rb index fde04266bdf..a67a0479700 100644 --- a/spec/unit/jobs/v3/buildpack_bits_spec.rb +++ b/spec/unit/jobs/v3/buildpack_bits_spec.rb @@ -6,9 +6,9 @@ module Jobs::V3 RSpec.describe BuildpackBits, job_context: :api do let(:uploaded_path) { 'tmp/random-nginx-filename-1020930' } let(:filename) { 'buildpack.zip' } - let!(:buildpack) { Buildpack.make } + let!(:buildpack) { create(:buildpack) } let(:buildpack_guid) { buildpack.guid } - let(:user) { User.make } + let(:user) { create(:user) } let(:user_email) { 'user@example.com' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_guid: user.guid, user_email: user_email, user_name: user_name) } diff --git a/spec/unit/jobs/v3/buildpack_cache_upload_spec.rb b/spec/unit/jobs/v3/buildpack_cache_upload_spec.rb index 722daec0ea1..47ea364e3bc 100644 --- a/spec/unit/jobs/v3/buildpack_cache_upload_spec.rb +++ b/spec/unit/jobs/v3/buildpack_cache_upload_spec.rb @@ -5,7 +5,7 @@ module Jobs::V3 RSpec.describe BuildpackCacheUpload, job_context: :api do subject(:job) { BuildpackCacheUpload.new(local_path: local_file.path, app_guid: app.guid, stack_name: 'some-stack') } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:file_content) { 'some_file_content' } let(:local_file) do diff --git a/spec/unit/jobs/v3/create_binding_async_job_spec.rb b/spec/unit/jobs/v3/create_binding_async_job_spec.rb index 3fcb5b87832..577b14ea666 100644 --- a/spec/unit/jobs/v3/create_binding_async_job_spec.rb +++ b/spec/unit/jobs/v3/create_binding_async_job_spec.rb @@ -17,7 +17,7 @@ module V3 describe '#handle_timeout' do let(:service_instance) do - ManagedServiceInstance.make(service_plan: plan).tap do |si| + create(:managed_service_instance, service_plan: plan).tap do |si| si.save_with_new_operation( {}, { @@ -27,14 +27,14 @@ module V3 ) end end - let(:plan) { ServicePlan.make(maintenance_info:) } + let(:plan) { create(:service_plan, maintenance_info:) } let(:maintenance_info) { { 'version' => '1.2.0' } } let(:service_binding) do ServiceBinding.new.save_with_attributes_and_new_operation( { type: 'app', service_instance: service_instance, - app: AppModel.make(space: service_instance.space), + app: create(:app_model, space: service_instance.space), credentials: {} }, { @@ -89,7 +89,7 @@ module V3 end context 'route' do - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:binding) do RouteBinding.new.save_with_attributes_and_new_operation( { @@ -112,7 +112,7 @@ module V3 { type: 'app', service_instance: service_instance, - app: AppModel.make(space: service_instance.space), + app: create(:app_model, space: service_instance.space), credentials: {} }, { diff --git a/spec/unit/jobs/v3/create_service_credential_binding_job_actor_spec.rb b/spec/unit/jobs/v3/create_service_credential_binding_job_actor_spec.rb index 8a5011738ee..a5537e965f9 100644 --- a/spec/unit/jobs/v3/create_service_credential_binding_job_actor_spec.rb +++ b/spec/unit/jobs/v3/create_service_credential_binding_job_actor_spec.rb @@ -18,7 +18,7 @@ module V3 describe '#get_resource' do let(:binding) do - ServiceBinding.make + create(:service_binding) end it 'returns the resource when it exists' do diff --git a/spec/unit/jobs/v3/create_service_instance_job_spec.rb b/spec/unit/jobs/v3/create_service_instance_job_spec.rb index 320bf23acda..0602de7db0e 100644 --- a/spec/unit/jobs/v3/create_service_instance_job_spec.rb +++ b/spec/unit/jobs/v3/create_service_instance_job_spec.rb @@ -20,7 +20,7 @@ module V3 let(:user_info) { instance_double(UserAuditInfo, { user_guid: }) } let(:user_guid) { Sham.uaa_id } let(:service_instance) do - si = ManagedServiceInstance.make(service_plan: plan) + si = create(:managed_service_instance, service_plan: plan) si.save_with_new_operation( {}, { @@ -30,7 +30,7 @@ module V3 ) si end - let(:plan) { ServicePlan.make(maintenance_info:) } + let(:plan) { create(:service_plan, maintenance_info:) } let(:maintenance_info) { { 'version' => '1.2.0' } } let(:params) { { some_data: 'some_value' } } let(:orphan_mitigator) { instance_double(VCAP::Services::ServiceBrokers::V2::OrphanMitigator) } @@ -92,8 +92,8 @@ module V3 context 'first time' do context 'runs compatibility checks' do context 'volume mount' do - let(:service_offering) { Service.make(requires: %w[volume_mount]) } - let(:plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[volume_mount]) } + let(:plan) { create(:service_plan, service: service_offering) } it 'adds to the warnings required but disabled' do TestConfig.config[:volume_services_enabled] = false @@ -109,8 +109,8 @@ module V3 end context 'route forwarding' do - let(:service_offering) { Service.make(requires: %w[route_forwarding]) } - let(:plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[route_forwarding]) } + let(:plan) { create(:service_plan, service: service_offering) } it 'adds to the warnings required but disabled' do TestConfig.config[:route_services_enabled] = false @@ -140,7 +140,7 @@ module V3 context 'when the plan defines a duration' do let(:maximum_polling_duration) { 7465 } - let(:plan) { ServicePlan.make(maximum_polling_duration:) } + let(:plan) { create(:service_plan, maximum_polling_duration:) } it 'sets to the plan value' do expect(job.maximum_duration_seconds).to eq(7465) diff --git a/spec/unit/jobs/v3/create_service_key_binding_job_actor_spec.rb b/spec/unit/jobs/v3/create_service_key_binding_job_actor_spec.rb index 283a940a260..66cfe7f3279 100644 --- a/spec/unit/jobs/v3/create_service_key_binding_job_actor_spec.rb +++ b/spec/unit/jobs/v3/create_service_key_binding_job_actor_spec.rb @@ -18,7 +18,7 @@ module V3 describe '#get_resource' do let(:binding) do - ServiceKey.make + create(:service_key) end it 'returns the resource when it exists' do diff --git a/spec/unit/jobs/v3/create_service_route_binding_job_actor_spec.rb b/spec/unit/jobs/v3/create_service_route_binding_job_actor_spec.rb index 27554ce1a04..113de71e5f6 100644 --- a/spec/unit/jobs/v3/create_service_route_binding_job_actor_spec.rb +++ b/spec/unit/jobs/v3/create_service_route_binding_job_actor_spec.rb @@ -23,7 +23,7 @@ module V3 describe '#get_resource' do let(:binding) do - RouteBinding.make + create(:route_binding) end it 'returns the resource when it exists' do diff --git a/spec/unit/jobs/v3/delete_binding_job_spec.rb b/spec/unit/jobs/v3/delete_binding_job_spec.rb index e459b4ffbb9..85b365fc895 100644 --- a/spec/unit/jobs/v3/delete_binding_job_spec.rb +++ b/spec/unit/jobs/v3/delete_binding_job_spec.rb @@ -14,7 +14,7 @@ module V3 end context 'route' do - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:route) { create(:route, space:) } let(:binding) do RouteBinding.new.save_with_attributes_and_new_operation( { @@ -37,7 +37,7 @@ module V3 { type: 'app', service_instance: service_instance, - app: AppModel.make(space: service_instance.space), + app: create(:app_model, space: service_instance.space), credentials: { test: 'secretPassword' } diff --git a/spec/unit/jobs/v3/delete_service_binding_job_factory_spec.rb b/spec/unit/jobs/v3/delete_service_binding_job_factory_spec.rb index 262112c0031..7c020f2ccb0 100644 --- a/spec/unit/jobs/v3/delete_service_binding_job_factory_spec.rb +++ b/spec/unit/jobs/v3/delete_service_binding_job_factory_spec.rb @@ -50,14 +50,14 @@ module V3 describe '#type_of' do it 'returns the type constant for a binding model' do - expect(described_class.type_of(RouteBinding.make)).to eq(:route) - expect(described_class.type_of(ServiceKey.make)).to eq(:key) - expect(described_class.type_of(ServiceBinding.make)).to eq(:credential) + expect(described_class.type_of(create(:route_binding))).to eq(:route) + expect(described_class.type_of(create(:service_key))).to eq(:key) + expect(described_class.type_of(create(:service_binding))).to eq(:credential) end it 'raises on invalid input' do expect do - described_class.type_of(ServiceInstance.make) + described_class.type_of(create(:service_instance)) end.to raise_error(described_class::InvalidType) end end diff --git a/spec/unit/jobs/v3/delete_service_instance_job_spec.rb b/spec/unit/jobs/v3/delete_service_instance_job_spec.rb index 55d03580210..f71d5055cae 100644 --- a/spec/unit/jobs/v3/delete_service_instance_job_spec.rb +++ b/spec/unit/jobs/v3/delete_service_instance_job_spec.rb @@ -9,10 +9,10 @@ module VCAP::CloudController module V3 RSpec.describe DeleteServiceInstanceJob do - let(:user_audit_info) { UserAuditInfo.new(user_guid: User.make.guid, user_email: 'foo@example.com') } - let(:service_instance) { ManagedServiceInstance.make(service_plan:) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_offering) { Service.make } + let(:user_audit_info) { UserAuditInfo.new(user_guid: create(:user).guid, user_email: 'foo@example.com') } + let(:service_instance) { create(:managed_service_instance, service_plan:) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_offering) { create(:service) } it_behaves_like 'delayed job', described_class @@ -76,7 +76,7 @@ module V3 context 'when the plan defines a duration' do let(:maximum_polling_duration) { 7465 } - let(:service_plan) { ServicePlan.make(service: service_offering, maximum_polling_duration: maximum_polling_duration) } + let(:service_plan) { create(:service_plan, service: service_offering, maximum_polling_duration: maximum_polling_duration) } it 'sets to the plan value' do expect(job.maximum_duration_seconds).to eq(7465) diff --git a/spec/unit/jobs/v3/delete_service_route_binding_job_actor_spec.rb b/spec/unit/jobs/v3/delete_service_route_binding_job_actor_spec.rb index 1c501ddd4d7..6cd7e84b0e7 100644 --- a/spec/unit/jobs/v3/delete_service_route_binding_job_actor_spec.rb +++ b/spec/unit/jobs/v3/delete_service_route_binding_job_actor_spec.rb @@ -23,7 +23,7 @@ module V3 describe '#get_resource' do let(:binding) do - RouteBinding.make + create(:route_binding) end it 'returns the resource when it exists' do diff --git a/spec/unit/jobs/v3/droplet_bits_copier_spec.rb b/spec/unit/jobs/v3/droplet_bits_copier_spec.rb index f4e4ec0616b..c07ed05b231 100644 --- a/spec/unit/jobs/v3/droplet_bits_copier_spec.rb +++ b/spec/unit/jobs/v3/droplet_bits_copier_spec.rb @@ -11,8 +11,8 @@ module Jobs::V3 CloudController::Blobstore::FogClient.new(connection_config: { provider: 'Local', local_root: blobstore_dir }, directory_key: 'droplet') end - let(:source_droplet) { DropletModel.make(droplet_hash: 'abcdef1234', sha256_checksum: '4321fedcba', state: DropletModel::STAGED_STATE, app: nil) } - let(:destination_droplet) { DropletModel.make(droplet_hash: nil, sha256_checksum: nil, state: DropletModel::STAGING_STATE, app: nil) } + let(:source_droplet) { create(:droplet_model, droplet_hash: 'abcdef1234', sha256_checksum: '4321fedcba', state: DropletModel::STAGED_STATE, set_as_current_droplet: false) } + let(:destination_droplet) { create(:droplet_model, droplet_hash: nil, sha256_checksum: nil, state: DropletModel::STAGING_STATE, set_as_current_droplet: false) } before do Fog.unmock! diff --git a/spec/unit/jobs/v3/droplet_upload_spec.rb b/spec/unit/jobs/v3/droplet_upload_spec.rb index 08f30bde7b3..3bf000f3ef4 100644 --- a/spec/unit/jobs/v3/droplet_upload_spec.rb +++ b/spec/unit/jobs/v3/droplet_upload_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController module Jobs::V3 RSpec.describe DropletUpload, job_context: :api do - let(:droplet) { DropletModel.make(state: 'STAGING', droplet_hash: nil, sha256_checksum: nil, app: nil) } + let(:droplet) { create(:droplet_model, state: 'STAGING', droplet_hash: nil, sha256_checksum: nil, set_as_current_droplet: false) } let(:file_content) { 'some_file_content' } let(:local_file) do Tempfile.new('local_file').tap do |f| diff --git a/spec/unit/jobs/v3/package_bits_copier_spec.rb b/spec/unit/jobs/v3/package_bits_copier_spec.rb index 46ff1d76dc1..f223e68cf38 100644 --- a/spec/unit/jobs/v3/package_bits_copier_spec.rb +++ b/spec/unit/jobs/v3/package_bits_copier_spec.rb @@ -11,8 +11,8 @@ module Jobs::V3 CloudController::Blobstore::FogClient.new(connection_config: { provider: 'Local', local_root: blobstore_dir }, directory_key: 'package') end - let(:source_package) { PackageModel.make(type: 'bits', package_hash: 'something', sha256_checksum: 'sha256') } - let(:destination_package) { PackageModel.make(type: 'bits') } + let(:source_package) { create(:package_model, type: 'bits', package_hash: 'something', sha256_checksum: 'sha256') } + let(:destination_package) { create(:package_model, type: 'bits') } before do Fog.unmock! diff --git a/spec/unit/jobs/v3/services/synchronize_broker_catalog_job_spec.rb b/spec/unit/jobs/v3/services/synchronize_broker_catalog_job_spec.rb index 0a54c4449bd..13f92e83e3c 100644 --- a/spec/unit/jobs/v3/services/synchronize_broker_catalog_job_spec.rb +++ b/spec/unit/jobs/v3/services/synchronize_broker_catalog_job_spec.rb @@ -86,9 +86,7 @@ module V3 before do uaa_conflicting_catalog - VCAP::CloudController::ServiceDashboardClient.make( - uaa_id: 'some-uaa-id' - ) + create(:service_dashboard_client, uaa_id: 'some-uaa-id') end it 'errors when there are uaa synchronization errors' do diff --git a/spec/unit/jobs/v3/services/update_broker_job_spec.rb b/spec/unit/jobs/v3/services/update_broker_job_spec.rb index e049c9cd53e..590dcabf6b7 100644 --- a/spec/unit/jobs/v3/services/update_broker_job_spec.rb +++ b/spec/unit/jobs/v3/services/update_broker_job_spec.rb @@ -19,19 +19,15 @@ module V3 end let!(:label) do - ServiceBrokerLabelModel.make( - service_broker: broker, - key_name: 'potato', - value: 'yam' - ) + create(:service_broker_label_model, service_broker: broker, + key_name: 'potato', + value: 'yam') end let!(:annotation) do - ServiceBrokerAnnotationModel.make( - service_broker: broker, - key_name: 'style', - value: 'mashed' - ) + create(:service_broker_annotation_model, service_broker: broker, + key_name: 'style', + value: 'mashed') end let(:update_broker_request) do @@ -294,9 +290,7 @@ module V3 before do uaa_conflicting_catalog - VCAP::CloudController::ServiceDashboardClient.make( - uaa_id: 'some-uaa-id' - ) + create(:service_dashboard_client, uaa_id: 'some-uaa-id') end it 'errors when there are uaa synchronization errors' do diff --git a/spec/unit/jobs/v3/space_delete_unmapped_routes_job_spec.rb b/spec/unit/jobs/v3/space_delete_unmapped_routes_job_spec.rb index 1be06ed3141..f1f538e90b1 100644 --- a/spec/unit/jobs/v3/space_delete_unmapped_routes_job_spec.rb +++ b/spec/unit/jobs/v3/space_delete_unmapped_routes_job_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController module Jobs::V3 RSpec.describe SpaceDeleteUnmappedRoutesJob, job_context: :api do - let!(:space) { Space.make } + let!(:space) { create(:space) } subject(:job) do SpaceDeleteUnmappedRoutesJob.new(space) diff --git a/spec/unit/jobs/v3/update_service_instance_job_spec.rb b/spec/unit/jobs/v3/update_service_instance_job_spec.rb index 8cdc9b4b1a3..e88c651066a 100644 --- a/spec/unit/jobs/v3/update_service_instance_job_spec.rb +++ b/spec/unit/jobs/v3/update_service_instance_job_spec.rb @@ -31,14 +31,14 @@ module V3 } }) end - let(:new_plan) { ServicePlan.make } + let(:new_plan) { create(:service_plan) } let(:new_tags) { %w[bar quz] } let(:arbitrary_parameters) { { foo: 'bar' } } let(:audit_hash) { { request: 'some_value' } } let(:user_info) { instance_double(UserAuditInfo, { user_guid: }) } let(:user_guid) { Sham.uaa_id } let(:service_instance) do - si = ManagedServiceInstance.make(service_plan: plan) + si = create(:managed_service_instance, service_plan: plan) si.save_with_new_operation( {}, { @@ -48,7 +48,7 @@ module V3 ) si end - let(:plan) { ServicePlan.make(maintenance_info:) } + let(:plan) { create(:service_plan, maintenance_info:) } let(:maintenance_info) { { 'version' => '1.2.0' } } let(:params) { { some_data: 'some_value' } } @@ -111,8 +111,8 @@ module V3 context 'first time' do context 'runs compatibility checks' do context 'volume mount' do - let(:service_offering) { Service.make(requires: %w[volume_mount]) } - let(:plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[volume_mount]) } + let(:plan) { create(:service_plan, service: service_offering) } it 'adds to the warnings required but disabled' do TestConfig.config[:volume_services_enabled] = false @@ -128,8 +128,8 @@ module V3 end context 'route forwarding' do - let(:service_offering) { Service.make(requires: %w[route_forwarding]) } - let(:plan) { ServicePlan.make(service: service_offering) } + let(:service_offering) { create(:service, requires: %w[route_forwarding]) } + let(:plan) { create(:service_plan, service: service_offering) } it 'adds to the warnings required but disabled' do TestConfig.config[:route_services_enabled] = false @@ -159,7 +159,7 @@ module V3 context 'when the plan defines a duration' do let(:maximum_polling_duration) { 7465 } - let(:plan) { ServicePlan.make(maximum_polling_duration:) } + let(:plan) { create(:service_plan, maximum_polling_duration:) } it 'sets to the plan value' do expect(job.maximum_duration_seconds).to eq(7465) diff --git a/spec/unit/lib/app_log_emitter_spec.rb b/spec/unit/lib/app_log_emitter_spec.rb index 0c0373fe8ef..01b2325af41 100644 --- a/spec/unit/lib/app_log_emitter_spec.rb +++ b/spec/unit/lib/app_log_emitter_spec.rb @@ -31,9 +31,9 @@ module VCAP describe 'when the fluentd client is set' do let(:fluent_emitter) { instance_double(FluentEmitter) } - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:app) { VCAP::CloudController::AppModel.make(space:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app) { create(:app_model, space:) } before do AppLogEmitter.fluent_emitter = fluent_emitter @@ -60,9 +60,9 @@ module VCAP end describe 'when the loggregator emitter is set' do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:app) { VCAP::CloudController::AppModel.make(space:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app) { create(:app_model, space:) } let(:emitter) { instance_double(LoggregatorEmitter::Client) } before do diff --git a/spec/unit/lib/cloud_controller/app_services/process_log_rate_limit_calculator_spec.rb b/spec/unit/lib/cloud_controller/app_services/process_log_rate_limit_calculator_spec.rb index 9bf326418a0..c8ac29e2436 100644 --- a/spec/unit/lib/cloud_controller/app_services/process_log_rate_limit_calculator_spec.rb +++ b/spec/unit/lib/cloud_controller/app_services/process_log_rate_limit_calculator_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe ProcessLogRateLimitCalculator do subject { ProcessLogRateLimitCalculator.new(process) } let(:process_guid) { 'i-do-not-match-the-app-guid' } - let(:app_model) { AppModel.make } - let(:process) { ProcessModel.make(guid: process_guid, app: app_model) } + let(:app_model) { create(:app_model) } + let(:process) { create(:process_model, guid: process_guid, app: app_model) } let(:stopped_state) { 'STOPPED' } let(:started_state) { 'STARTED' } @@ -22,7 +22,7 @@ module VCAP::CloudController end context 'when the app state is STARTED' do - let(:process) { ProcessModel.make(state: started_state, guid: process_guid, app: app_model) } + let(:process) { create(:process_model, state: started_state, guid: process_guid, app: app_model) } context 'and the app is already in the db' do it 'raises ApplicationMissing if the app no longer exists in the db' do diff --git a/spec/unit/lib/cloud_controller/app_services/process_memory_calculator_spec.rb b/spec/unit/lib/cloud_controller/app_services/process_memory_calculator_spec.rb index 83950fddcc8..e24bf052d2e 100644 --- a/spec/unit/lib/cloud_controller/app_services/process_memory_calculator_spec.rb +++ b/spec/unit/lib/cloud_controller/app_services/process_memory_calculator_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe ProcessMemoryCalculator do subject { ProcessMemoryCalculator.new(process) } let(:process_guid) { 'i-do-not-match-the-app-guid' } - let(:app_model) { AppModel.make } - let(:process) { ProcessModel.make(guid: process_guid, app: app_model) } + let(:app_model) { create(:app_model) } + let(:process) { create(:process_model, guid: process_guid, app: app_model) } let(:stopped_state) { 'STOPPED' } let(:started_state) { 'STARTED' } @@ -22,7 +22,7 @@ module VCAP::CloudController end context 'when the app state is STARTED' do - let(:process) { ProcessModel.make(state: started_state, guid: process_guid, app: app_model) } + let(:process) { create(:process_model, state: started_state, guid: process_guid, app: app_model) } context 'and the app is already in the db' do it 'raises ApplicationMissing if the app no longer exists in the db' do diff --git a/spec/unit/lib/cloud_controller/backends/instances_reporters_spec.rb b/spec/unit/lib/cloud_controller/backends/instances_reporters_spec.rb index bfcbc6a2241..3d946654b53 100644 --- a/spec/unit/lib/cloud_controller/backends/instances_reporters_spec.rb +++ b/spec/unit/lib/cloud_controller/backends/instances_reporters_spec.rb @@ -95,7 +95,7 @@ module VCAP::CloudController end describe '#stats_for_app' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } before do allow(diego_instances_stats_reporter).to receive(:stats_for_app).with(app) diff --git a/spec/unit/lib/cloud_controller/backends/quota_validating_staging_log_rate_limit_calculator_spec.rb b/spec/unit/lib/cloud_controller/backends/quota_validating_staging_log_rate_limit_calculator_spec.rb index bf15862a18f..d7f3b4f3865 100644 --- a/spec/unit/lib/cloud_controller/backends/quota_validating_staging_log_rate_limit_calculator_spec.rb +++ b/spec/unit/lib/cloud_controller/backends/quota_validating_staging_log_rate_limit_calculator_spec.rb @@ -9,10 +9,10 @@ module VCAP::CloudController let(:space_quota_limit) { 200 } let(:org_quota_limit) { 200 } let(:requested_limit) { 100 } - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:space_quota_definition) { SpaceQuotaDefinition.make(organization: org, log_rate_limit: space_quota_limit) } - let(:quota_definition) { QuotaDefinition.make(log_rate_limit: org_quota_limit) } + let(:space_quota_definition) { create(:space_quota_definition, organization: org, log_rate_limit: space_quota_limit) } + let(:quota_definition) { create(:quota_definition, log_rate_limit: org_quota_limit) } before do space.space_quota_definition = space_quota_definition diff --git a/spec/unit/lib/cloud_controller/backends/quota_validating_staging_memory_calculator_spec.rb b/spec/unit/lib/cloud_controller/backends/quota_validating_staging_memory_calculator_spec.rb index 328b41368a3..3239b05fcb9 100644 --- a/spec/unit/lib/cloud_controller/backends/quota_validating_staging_memory_calculator_spec.rb +++ b/spec/unit/lib/cloud_controller/backends/quota_validating_staging_memory_calculator_spec.rb @@ -10,10 +10,10 @@ module VCAP::CloudController let(:space_quota_limit) { 200 } let(:org_quota_limit) { 200 } let(:requested_limit) { 100 } - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:space_quota_definition) { SpaceQuotaDefinition.make(organization: org, memory_limit: space_quota_limit) } - let(:quota_definition) { QuotaDefinition.make(memory_limit: org_quota_limit) } + let(:space_quota_definition) { create(:space_quota_definition, organization: org, memory_limit: space_quota_limit) } + let(:quota_definition) { create(:quota_definition, memory_limit: org_quota_limit) } before do allow(calculator).to receive(:minimum_limit).and_return(minimum_limit) diff --git a/spec/unit/lib/cloud_controller/backends/stagers_spec.rb b/spec/unit/lib/cloud_controller/backends/stagers_spec.rb index 26e4b180a48..82348eb37ff 100644 --- a/spec/unit/lib/cloud_controller/backends/stagers_spec.rb +++ b/spec/unit/lib/cloud_controller/backends/stagers_spec.rb @@ -6,9 +6,9 @@ module VCAP::CloudController let(:config) { TestConfig.config_instance } describe '#validate_app' do - let!(:admin_buildpack) { Buildpack.make(name: 'admin-buildpack') } - let(:buildpack_lifecycle_data) { BuildpackLifecycleDataModel.make(buildpacks: ['admin-buildpack']) } - let(:app_model) { AppModel.make } + let!(:admin_buildpack) { create(:buildpack, name: 'admin-buildpack') } + let(:buildpack_lifecycle_data) { create(:buildpack_lifecycle_data_model, buildpacks: ['admin-buildpack']) } + let(:app_model) { create(:app_model) } let(:process_model) { ProcessModelFactory.make(:buildpack, app: app_model) } before do @@ -16,7 +16,7 @@ module VCAP::CloudController end context 'when the app package hash is blank' do - before { PackageModel.make(package_hash: nil, sha256_checksum: '', app: process_model) } + before { create(:package_model, package_hash: nil, sha256_checksum: '', app: process_model) } it 'raises' do expect do @@ -26,7 +26,7 @@ module VCAP::CloudController end context 'with a docker app' do - let(:app_model) { AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } let(:app) { ProcessModelFactory.make(app: app_model, docker_image: 'docker/image') } before { app_model.update(buildpack_lifecycle_data: nil) } @@ -55,7 +55,7 @@ module VCAP::CloudController end context 'with a cnb app' do - let(:app_model) { AppModel.make(:cnb) } + let(:app_model) { create(:app_model, :cnb) } let(:app) { ProcessModelFactory.make(app: app_model, cnb: true) } before { app_model.update(buildpack_lifecycle_data: nil) } @@ -88,7 +88,7 @@ module VCAP::CloudController context 'and an admin buildpack is specified' do let(:buildpack_lifecycle_data) do - BuildpackLifecycleDataModel.make(buildpacks: %w[https://buildpacks.gov admin-buildpack]) + create(:buildpack_lifecycle_data_model, buildpacks: %w[https://buildpacks.gov admin-buildpack]) end it 'raises an error' do @@ -100,7 +100,7 @@ module VCAP::CloudController context 'and custom buildpacks are specified' do let(:buildpack_lifecycle_data) do - BuildpackLifecycleDataModel.make(buildpacks: %w[https://buildpacks.gov http://custom-buildpack.example.com]) + create(:buildpack_lifecycle_data_model, buildpacks: %w[https://buildpacks.gov http://custom-buildpack.example.com]) end it 'does not raise' do @@ -113,7 +113,7 @@ module VCAP::CloudController end describe '#stager_for_build' do - let(:build) { BuildModel.make } + let(:build) { create(:build_model) } it 'finds a diego stager' do stager = stagers.stager_for_build(build) diff --git a/spec/unit/lib/cloud_controller/backends/staging_environment_builder_spec.rb b/spec/unit/lib/cloud_controller/backends/staging_environment_builder_spec.rb index fbd16ed05e9..421d6867c6f 100644 --- a/spec/unit/lib/cloud_controller/backends/staging_environment_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/backends/staging_environment_builder_spec.rb @@ -6,16 +6,16 @@ module VCAP::CloudController let(:builder) { StagingEnvironmentBuilder.new } describe '#build' do - let(:app) { AppModel.make(environment_variables: { 'APP_VAR' => 'is here' }) } + let(:app) { create(:app_model, environment_variables: { 'APP_VAR' => 'is here' }) } let(:space) { app.space } let(:stack) { 'my-stack' } let(:memory_limit) { 12_340 } let(:staging_disk_in_mb) { 32_100 } let(:lifecycle) { instance_double(BuildpackLifecycle, staging_environment_variables: { 'CF_STACK' => stack }) } - let(:service) { Service.make(label: 'elephantsql-n/a') } - let(:service_plan) { ServicePlan.make(service:) } - let(:service_instance) { ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } - let!(:service_binding) { ServiceBinding.make(app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } + let(:service) { create(:service, label: 'elephantsql-n/a') } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } + let!(:service_binding) { create(:service_binding, app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } before do staging_group = EnvironmentVariableGroup.staging @@ -62,10 +62,10 @@ module VCAP::CloudController context 'when the app has a route associated with it' do it 'includes the uris as part of vcap_application' do - route1 = Route.make(space:) - route2 = Route.make(space:) - RouteMappingModel.make(app: app, route: route1) - RouteMappingModel.make(app: app, route: route2) + route1 = create(:route, space:) + route2 = create(:route, space:) + create(:route_mapping_model, app: app, route: route1) + create(:route_mapping_model, app: app, route: route2) environment_variables = builder.build(app, space, lifecycle, memory_limit, staging_disk_in_mb) expect(environment_variables['VCAP_APPLICATION'][:uris]).to contain_exactly(route1.fqdn, route2.fqdn) diff --git a/spec/unit/lib/cloud_controller/bits_expiration_spec.rb b/spec/unit/lib/cloud_controller/bits_expiration_spec.rb index 911d76195e7..5d6b9abab52 100644 --- a/spec/unit/lib/cloud_controller/bits_expiration_spec.rb +++ b/spec/unit/lib/cloud_controller/bits_expiration_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController allow(Config).to receive(:config).and_return(config) end - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:blobstore) do CloudController::DependencyLocator.instance.droplet_blobstore end @@ -32,10 +32,10 @@ module VCAP::CloudController context 'with an app with few droplets / packages and one failed droplet / package' do it 'does not mark any as expired' do - 3.times { DropletModel.make(state: DropletModel::STAGED_STATE, app_guid: app.guid) } - 3.times { PackageModel.make(state: PackageModel::READY_STATE, app_guid: app.guid) } - DropletModel.make(state: DropletModel::FAILED_STATE, app_guid: app.guid) - PackageModel.make(state: PackageModel::FAILED_STATE, app_guid: app.guid) + 3.times { create(:droplet_model, set_as_current_droplet: false, state: DropletModel::STAGED_STATE, app_guid: app.guid) } + 3.times { create(:package_model, state: PackageModel::READY_STATE, app_guid: app.guid) } + create(:droplet_model, set_as_current_droplet: false, state: DropletModel::FAILED_STATE, app_guid: app.guid) + create(:package_model, state: PackageModel::FAILED_STATE, app_guid: app.guid) BitsExpiration.new.expire_droplets!(app) BitsExpiration.new.expire_packages!(app) expect(DropletModel.where(state: DropletModel::EXPIRED_STATE).count).to eq(0) @@ -46,21 +46,19 @@ module VCAP::CloudController context 'with docker cf apps' do before do t = Time.now - @current = DropletModel.make( - app_guid: app.guid, - created_at: t, - droplet_hash: nil, - docker_receipt_image: 'repo/test-app' - ) + @current = create(:droplet_model, app_guid: app.guid, + set_as_current_droplet: false, + created_at: t, + droplet_hash: nil, + docker_receipt_image: 'repo/test-app') app.update(droplet: @current) 10.times do |i| - DropletModel.make( - app_guid: app.guid, - created_at: t + i, - droplet_hash: nil, - docker_receipt_image: 'repo/test-app' - ) + create(:droplet_model, app_guid: app.guid, + set_as_current_droplet: false, + created_at: t + i, + droplet_hash: nil, + docker_receipt_image: 'repo/test-app') end end @@ -72,28 +70,25 @@ module VCAP::CloudController context 'with droplets' do before do t = Time.now - @current = DropletModel.make( - app_guid: app.guid, - created_at: t, - droplet_hash: 'current_droplet_hash' - ) + @current = create(:droplet_model, app_guid: app.guid, + set_as_current_droplet: false, + created_at: t, + droplet_hash: 'current_droplet_hash') app.update(droplet: @current) 2.times do |i| - DropletModel.make( - app_guid: app.guid, - created_at: t + i, - droplet_hash: nil, - state: DropletModel::FAILED_STATE - ) + create(:droplet_model, app_guid: app.guid, + set_as_current_droplet: false, + created_at: t + i, + droplet_hash: nil, + state: DropletModel::FAILED_STATE) end 10.times do |i| - DropletModel.make( - app_guid: app.guid, - created_at: t + i + 2, - droplet_hash: 'current_droplet_hash' - ) + create(:droplet_model, app_guid: app.guid, + set_as_current_droplet: false, + created_at: t + i + 2, + droplet_hash: 'current_droplet_hash') end end @@ -132,30 +127,26 @@ module VCAP::CloudController context 'with packages' do before do t = Time.now - @current_package = PackageModel.make( - package_hash: 'current_package_hash', - state: PackageModel::READY_STATE, - app_guid: app.guid, - created_at: t - ) - @current = DropletModel.make( - app_guid: app.guid, - package_guid: @current_package.guid - ) + @current_package = create(:package_model, package_hash: 'current_package_hash', + state: PackageModel::READY_STATE, + app_guid: app.guid, + created_at: t) + @current = create(:droplet_model, app_guid: app.guid, + package_guid: @current_package.guid) app.update(droplet: @current) 2.times do |i| - PackageModel.make(package_hash: nil, - state: PackageModel::FAILED_STATE, - app_guid: app.guid, - created_at: t + i) + create(:package_model, package_hash: nil, + state: PackageModel::FAILED_STATE, + app_guid: app.guid, + created_at: t + i) end 10.times do |i| - PackageModel.make(package_hash: 'real hash!', - state: PackageModel::READY_STATE, - app_guid: app.guid, - created_at: t + i + 2) + create(:package_model, package_hash: 'real hash!', + state: PackageModel::READY_STATE, + app_guid: app.guid, + created_at: t + i + 2) end end diff --git a/spec/unit/lib/cloud_controller/blobstore/url_generator/internal_url_generator_spec.rb b/spec/unit/lib/cloud_controller/blobstore/url_generator/internal_url_generator_spec.rb index 4113555cf5c..638f86923f0 100644 --- a/spec/unit/lib/cloud_controller/blobstore/url_generator/internal_url_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/blobstore/url_generator/internal_url_generator_spec.rb @@ -39,7 +39,7 @@ module Blobstore end describe '#admin_buildpack_download_url' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'gives out signed url to remote blobstore for admin buildpack' do expect(url_generator.admin_buildpack_download_url(buildpack)).to eql(internal_url) @@ -72,7 +72,7 @@ module Blobstore end describe '#droplet_download_url' do - let(:droplet) { VCAP::CloudController::DropletModel.make } + let(:droplet) { create(:droplet_model) } it 'gives out signed url to remote blobstore from the blob' do expect(url_generator.droplet_download_url(droplet)).to eql(internal_url) @@ -135,7 +135,7 @@ module Blobstore end describe '#package_download_url' do - let(:package) { VCAP::CloudController::PackageModel.make } + let(:package) { create(:package_model) } it 'gives out signed url to remote blobstore for package' do expect(url_generator.package_download_url(package)).to eql(internal_url) diff --git a/spec/unit/lib/cloud_controller/blobstore/url_generator/local_url_generator_spec.rb b/spec/unit/lib/cloud_controller/blobstore/url_generator/local_url_generator_spec.rb index 61ed7253099..bd605a13219 100644 --- a/spec/unit/lib/cloud_controller/blobstore/url_generator/local_url_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/blobstore/url_generator/local_url_generator_spec.rb @@ -34,7 +34,7 @@ module Blobstore end describe 'admin buildpacks' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'gives a local URI to the blobstore host/port' do uri = URI.parse(url_generator.admin_buildpack_download_url(buildpack)) @@ -77,7 +77,7 @@ module Blobstore end describe 'droplet downloads' do - let(:droplet) { VCAP::CloudController::DropletModel.make } + let(:droplet) { create(:droplet_model) } it 'returns a url to cloud controller' do uri = URI.parse(url_generator.droplet_download_url(droplet)) @@ -103,7 +103,7 @@ module Blobstore end describe 'package' do - let(:package) { VCAP::CloudController::PackageModel.make } + let(:package) { create(:package_model) } it 'gives a local URI to the blobstore host/port' do uri = URI.parse(url_generator.package_download_url(package)) diff --git a/spec/unit/lib/cloud_controller/blobstore/url_generator_spec.rb b/spec/unit/lib/cloud_controller/blobstore/url_generator_spec.rb index ab8150042fa..c885399bd33 100644 --- a/spec/unit/lib/cloud_controller/blobstore/url_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/blobstore/url_generator_spec.rb @@ -36,7 +36,7 @@ module Blobstore context 'downloads' do describe 'admin buildpacks' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } it 'delegates to local_url_generator when local' do allow(admin_buildpack_blobstore).to receive(:local?).and_return(true) diff --git a/spec/unit/lib/cloud_controller/check_stacks_spec.rb b/spec/unit/lib/cloud_controller/check_stacks_spec.rb index 4f07f7b1a2f..e635a2e4b8d 100644 --- a/spec/unit/lib/cloud_controller/check_stacks_spec.rb +++ b/spec/unit/lib/cloud_controller/check_stacks_spec.rb @@ -103,7 +103,7 @@ module VCAP::CloudController describe 'the deprecated stack is in the db' do before do - Stack.make(name: 'cflinuxfs3') + create(:stack, name: 'cflinuxfs3') end it 'logs an error and exits 1' do diff --git a/spec/unit/lib/cloud_controller/db_dataset_spec.rb b/spec/unit/lib/cloud_controller/db_dataset_spec.rb index 204b73db97f..16d0b429dd2 100644 --- a/spec/unit/lib/cloud_controller/db_dataset_spec.rb +++ b/spec/unit/lib/cloud_controller/db_dataset_spec.rb @@ -17,13 +17,13 @@ module VCAP::CloudController end it 'logs the number of returned rows over threshold' do - 10.times { Space.make } + create_list(:space, 10) Space.all expect(logs.string).to match 'Loaded 10 records for query SELECT \* FROM [`"]spaces[`"]' end it 'does not log the number of returned rows under threshold' do - 2.times { Space.make } + create_list(:space, 2) Space.all expect(logs.string).not_to match 'Loaded' end @@ -35,7 +35,7 @@ module VCAP::CloudController end it 'does not log' do - 2.times { Space.make } + create_list(:space, 2) Space.all expect(logs.string).not_to match 'Loaded' end @@ -47,7 +47,7 @@ module VCAP::CloudController end it 'does not log the number of returned rows under threshold' do - 2.times { Space.make } + create_list(:space, 2) Space.all expect(logs.string).not_to match 'Loaded' end diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/cancel_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/cancel_spec.rb index 7f3ed4773f0..765468e7060 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/cancel_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/cancel_spec.rb @@ -6,37 +6,33 @@ module VCAP::CloudController subject(:cancel_action) { DeploymentUpdater::Actions::Cancel.new(deployment, logger) } let(:a_day_ago) { Time.now - 1.day } let(:an_hour_ago) { Time.now - 1.hour } - let(:organization) { Organization.make } - let(:space) { Space.make(organization: organization, space_quota_definition: quota) } - let(:app) { AppModel.make(droplet: droplet, revisions_enabled: true, space: space) } - let(:droplet) { DropletModel.make } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization: organization, space_quota_definition: quota) } + let(:app) { create(:app_model, droplet: droplet, revisions_enabled: true, space: space) } + let(:droplet) { create(:droplet_model) } let(:memory) { 1024 } let(:memory_limit) { memory * 1000 } - let(:quota) { SpaceQuotaDefinition.make(organization:, memory_limit:) } + let(:quota) { create(:space_quota_definition, organization:, memory_limit:) } let!(:web_process) do - ProcessModel.make( - instances: current_web_instances, - created_at: a_day_ago, - guid: 'guid-original', - app: app, - memory: memory, - state: ProcessModel::STARTED - ) + create(:process_model, instances: current_web_instances, + created_at: a_day_ago, + guid: 'guid-original', + app: app, + memory: memory, + state: ProcessModel::STARTED) end - let!(:route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: web_process.type) } + let!(:route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: web_process.type) } let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: ProcessTypes::WEB, - instances: current_deploying_instances, - guid: 'guid-final', - revision: revision, - memory: memory, - state: ProcessModel::STARTED - ) + create(:process_model, app: web_process.app, + type: ProcessTypes::WEB, + instances: current_deploying_instances, + guid: 'guid-final', + revision: revision, + memory: memory, + state: ProcessModel::STARTED) end - let(:revision) { RevisionModel.make(app: app, droplet: droplet, version: 300) } - let!(:deploying_route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: deploying_web_process.type) } + let(:revision) { create(:revision_model, app: app, droplet: droplet, version: 300) } + let!(:deploying_route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: deploying_web_process.type) } let(:original_web_process_instance_count) { 6 } let(:current_web_instances) { 2 } @@ -44,13 +40,11 @@ module VCAP::CloudController let(:current_deploying_instances) { 0 } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: state, - original_web_process_instance_count: original_web_process_instance_count, - max_in_flight: 1 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: state, + original_web_process_instance_count: original_web_process_instance_count, + max_in_flight: 1) end let(:diego_instances_reporter) { instance_double(Diego::InstancesReporter) } @@ -90,26 +84,20 @@ module VCAP::CloudController context 'when there are interim deployments' do let!(:interim_deploying_web_process) do - ProcessModel.make( - app: app, - created_at: an_hour_ago, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-interim' - ) + create(:process_model, app: app, + created_at: an_hour_ago, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-interim') end let!(:interim_deployed_superseded_deployment) do - DeploymentModel.make( - deploying_web_process: interim_deploying_web_process, - state: 'DEPLOYED', - status_reason: 'SUPERSEDED' - ) + create(:deployment_model, deploying_web_process: interim_deploying_web_process, + state: 'DEPLOYED', + status_reason: 'SUPERSEDED') end let!(:interim_route_mapping) do - RouteMappingModel.make( - app: web_process.app, - process_type: interim_deploying_web_process.type - ) + create(:route_mapping_model, app: web_process.app, + process_type: interim_deploying_web_process.type) end it 'scales up the most recent interim web process' do @@ -125,20 +113,16 @@ module VCAP::CloudController context 'when there is an interim deployment that has been SUPERSEDED (CANCELED)' do let!(:interim_canceling_web_process) do - ProcessModel.make( - app: app, - created_at: an_hour_ago + 1, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-canceling' - ) + create(:process_model, app: app, + created_at: an_hour_ago + 1, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-canceling') end let!(:interim_canceled_superseded_deployment) do - DeploymentModel.make( - deploying_web_process: interim_canceling_web_process, - state: 'CANCELED', - status_reason: 'SUPERSEDED' - ) + create(:deployment_model, deploying_web_process: interim_canceling_web_process, + state: 'CANCELED', + status_reason: 'SUPERSEDED') end it 'sets the most recent interim web process belonging to a SUPERSEDED (DEPLOYED) deployment as the only web process' do @@ -156,20 +140,16 @@ module VCAP::CloudController } end let!(:interim_deploying_web_process_no_running_instance) do - ProcessModel.make( - app: app, - created_at: an_hour_ago + 1, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-no-running-instance' - ) + create(:process_model, app: app, + created_at: an_hour_ago + 1, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-no-running-instance') end let!(:interim_deployed_superseded_deployment_no_running_instance) do - DeploymentModel.make( - deploying_web_process: interim_deploying_web_process_no_running_instance, - state: 'DEPLOYED', - status_reason: 'SUPERSEDED' - ) + create(:deployment_model, deploying_web_process: interim_deploying_web_process_no_running_instance, + state: 'DEPLOYED', + status_reason: 'SUPERSEDED') end before do diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/down_scaler_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/down_scaler_spec.rb index d68f5453220..662b0bdab19 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/down_scaler_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/down_scaler_spec.rb @@ -5,52 +5,42 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Actions::DownScaler do # subject(:scale_action) { DeploymentUpdater::Actions::DownScaler.new(deployment, logger, target_total_instance_count) } - let(:app) { AppModel.make(droplet: droplet, revisions_enabled: true) } - let(:droplet) { DropletModel.make } + let(:app) { create(:app_model, droplet: droplet, revisions_enabled: true) } + let(:droplet) { create(:droplet_model) } let!(:web_process) do - ProcessModel.make( - instances: 3, - created_at: 1.day.ago, - guid: 'guid-original', - app: app - ) + create(:process_model, instances: 3, + created_at: 1.day.ago, + guid: 'guid-original', + app: app) end let!(:interim_web_process) do - ProcessModel.make( - instances: 1, - created_at: 3.hours.ago, - guid: 'guid-interim', - app: app - ) + create(:process_model, instances: 1, + created_at: 3.hours.ago, + guid: 'guid-interim', + app: app) end let!(:interim_web_process_2) do - ProcessModel.make( - instances: 2, - created_at: 2.hours.ago, - guid: 'guid-interim-2', - app: app - ) + create(:process_model, instances: 2, + created_at: 2.hours.ago, + guid: 'guid-interim-2', + app: app) end let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: ProcessTypes::WEB, - instances: 4, - guid: 'guid-final', - state: ProcessModel::STOPPED - ) + create(:process_model, app: web_process.app, + type: ProcessTypes::WEB, + instances: 4, + guid: 'guid-final', + state: ProcessModel::STOPPED) end let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: DeploymentModel::DEPLOYING_STATE - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: DeploymentModel::DEPLOYING_STATE) end let(:logger) { instance_double(Steno::Logger, info: nil, error: nil) } diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/finalize_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/finalize_spec.rb index cd051c68f75..72a5c6e9652 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/finalize_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/finalize_spec.rb @@ -5,88 +5,72 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Actions::Finalize do subject(:finalize_action) { DeploymentUpdater::Actions::Finalize.new(deployment) } - let(:app) { AppModel.make(revisions_enabled: true) } - let(:droplet) { DropletModel.make(app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } + let(:app) { create(:app_model, revisions_enabled: true) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } let(:state) { DeploymentModel::DEPLOYING_STATE } let!(:old_web_process) do - ProcessModel.make( - instances: 3, - created_at: 3.hours.ago, - type: ProcessTypes::WEB, - guid: 'guid-original', - app: app - ) + create(:process_model, instances: 3, + created_at: 3.hours.ago, + type: ProcessTypes::WEB, + guid: 'guid-original', + app: app) end let!(:old_worker_process) do - ProcessModel.make( - instances: 3, - type: 'worker', - command: 'old_command', - guid: 'worker-guid-original', - app: app - ) + create(:process_model, instances: 3, + type: 'worker', + command: 'old_command', + guid: 'worker-guid-original', + app: app) end let!(:old_nonweb_process) do - ProcessModel.make( - instances: 3, - type: 'nonweb', - command: nil, - guid: 'nonweb-guid-original', - app: app - ) + create(:process_model, instances: 3, + type: 'nonweb', + command: nil, + guid: 'nonweb-guid-original', + app: app) end - let(:revision) { RevisionModel.make(:no_commands, app: app, droplet: droplet, version: 300) } + let(:revision) { create(:revision_model, :no_commands, app: app, droplet: droplet, version: 300) } let!(:web_process_command) do - RevisionProcessCommandModel.make( - revision: revision, - process_type: 'web', - process_command: 'new_web_command' - ) + create(:revision_process_command_model, revision: revision, + process_type: 'web', + process_command: 'new_web_command') end let!(:worker_process_command) do - RevisionProcessCommandModel.make( - revision: revision, - process_type: 'worker', - process_command: 'new_worker_command' - ) + create(:revision_process_command_model, revision: revision, + process_type: 'worker', + process_command: 'new_worker_command') end let!(:deploying_web_process) do - ProcessModel.make( - app: app, - type: ProcessTypes::WEB, - instances: 3, - guid: 'guid-final', - revision: revision, - state: ProcessModel::STOPPED - ) + create(:process_model, app: app, + type: ProcessTypes::WEB, + instances: 3, + guid: 'guid-final', + revision: revision, + state: ProcessModel::STOPPED) end let!(:interim_deploying_web_process) do - ProcessModel.make( - app: app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-interim' - ) + create(:process_model, app: app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-interim') end let(:deployment) do - DeploymentModel.make( - app: app, - deploying_web_process: deploying_web_process, - state: state, - original_web_process_instance_count: 3, - max_in_flight: 1 - ) + create(:deployment_model, app: app, + deploying_web_process: deploying_web_process, + state: state, + original_web_process_instance_count: 3, + max_in_flight: 1) end let(:diego_instances_reporter) { instance_double(Diego::InstancesReporter) } diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_canceled_processes_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_canceled_processes_spec.rb index 0421e651054..d22530ce2eb 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_canceled_processes_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_canceled_processes_spec.rb @@ -5,47 +5,39 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Actions::ScaleDownCanceledProcesses do subject(:finalize_action) { DeploymentUpdater::Actions::ScaleDownCanceledProcesses.new(deployment) } - let(:app) { AppModel.make(revisions_enabled: true) } - let(:droplet) { DropletModel.make(app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } + let(:app) { create(:app_model, revisions_enabled: true) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } let(:state) { DeploymentModel::DEPLOYING_STATE } let!(:deploying_web_process) do - ProcessModel.make( - app: app, - type: ProcessTypes::WEB, - instances: 3, - guid: 'guid-final', - state: ProcessModel::STOPPED - ) + create(:process_model, app: app, + type: ProcessTypes::WEB, + instances: 3, + guid: 'guid-final', + state: ProcessModel::STOPPED) end let!(:interim_canceling_web_process) do - ProcessModel.make( - app: app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-canceling' - ) + create(:process_model, app: app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-canceling') end let(:deployment) do - DeploymentModel.make( - app: app, - deploying_web_process: deploying_web_process, - state: state, - original_web_process_instance_count: 3, - max_in_flight: 1 - ) + create(:deployment_model, app: app, + deploying_web_process: deploying_web_process, + state: state, + original_web_process_instance_count: 3, + max_in_flight: 1) end let!(:interim_canceled_superseded_deployment) do - DeploymentModel.make( - deploying_web_process: interim_canceling_web_process, - state: 'CANCELED', - status_reason: 'SUPERSEDED' - ) + create(:deployment_model, deploying_web_process: interim_canceling_web_process, + state: 'CANCELED', + status_reason: 'SUPERSEDED') end context 'when there is an interim deployment that has been SUPERSEDED (CANCELED)' do diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_old_process_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_old_process_spec.rb index 9af820ccdc4..4fbb4989bce 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_old_process_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_down_old_process_spec.rb @@ -5,44 +5,36 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Actions::ScaleDownOldProcess do subject(:finalize_action) { DeploymentUpdater::Actions::ScaleDownOldProcess.new(deployment) } - let(:app) { AppModel.make(revisions_enabled: true) } - let(:droplet) { DropletModel.make(app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } + let(:app) { create(:app_model, revisions_enabled: true) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'serve', 'worker' => 'work' }) } let(:state) { DeploymentModel::DEPLOYING_STATE } let!(:deploying_web_process) do - ProcessModel.make( - app: app, - type: ProcessTypes::WEB, - instances: 3 - ) + create(:process_model, app: app, + type: ProcessTypes::WEB, + instances: 3) end let!(:interim_web_process) do - ProcessModel.make( - app: app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 3 - ) + create(:process_model, app: app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 3) end let!(:oldest_web_process) do - ProcessModel.make( - app: app, - created_at: 2.days.ago, - type: ProcessTypes::WEB, - instances: 3 - ) + create(:process_model, app: app, + created_at: 2.days.ago, + type: ProcessTypes::WEB, + instances: 3) end let(:deployment) do - DeploymentModel.make( - app: app, - deploying_web_process: deploying_web_process, - state: state, - original_web_process_instance_count: 3 - ) + create(:deployment_model, app: app, + deploying_web_process: deploying_web_process, + state: state, + original_web_process_instance_count: 3) end it 'scales a web process to the passed amount' do diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_spec.rb index 510a6e5fe93..8354bed4196 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/scale_spec.rb @@ -6,29 +6,25 @@ module VCAP::CloudController subject(:scale_action) { DeploymentUpdater::Actions::Scale.new(deployment, logger, target_total_instance_count) } let(:target_total_instance_count) { 6 } - let(:app) { AppModel.make(droplet: droplet, revisions_enabled: true) } - let(:droplet) { DropletModel.make } + let(:app) { create(:app_model, droplet: droplet, revisions_enabled: true) } + let(:droplet) { create(:droplet_model) } let!(:web_process) do - ProcessModel.make( - instances: current_web_instances, - created_at: 1.day.ago, - guid: 'guid-original', - app: app - ) + create(:process_model, instances: current_web_instances, + created_at: 1.day.ago, + guid: 'guid-original', + app: app) end - let!(:route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: web_process.type) } + let!(:route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: web_process.type) } let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: ProcessTypes::WEB, - instances: current_deploying_instances, - guid: 'guid-final', - revision: revision, - state: ProcessModel::STOPPED - ) + create(:process_model, app: web_process.app, + type: ProcessTypes::WEB, + instances: current_deploying_instances, + guid: 'guid-final', + revision: revision, + state: ProcessModel::STOPPED) end - let(:revision) { RevisionModel.make(app: app, droplet: droplet, version: 300) } - let!(:deploying_route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: deploying_web_process.type) } + let(:revision) { create(:revision_model, app: app, droplet: droplet, version: 300) } + let!(:deploying_route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: deploying_web_process.type) } let(:space) { web_process.space } let(:current_web_instances) { 6 } let(:current_deploying_instances) { 0 } @@ -36,12 +32,10 @@ module VCAP::CloudController let(:state) { DeploymentModel::DEPLOYING_STATE } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: state, - max_in_flight: max_in_flight - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: state, + max_in_flight: max_in_flight) end let(:max_in_flight) { 1 } @@ -100,12 +94,10 @@ module VCAP::CloudController context 'when the max_in_flight is set to 2' do let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 2 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 2) end it 'scales up the new web process by two' do @@ -128,12 +120,10 @@ module VCAP::CloudController context 'when max_in_flight is larger than the number of remaining desired instances' do let(:current_deploying_instances) { 5 } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 5 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 5) end let(:current_web_instances) { 1 } @@ -157,12 +147,10 @@ module VCAP::CloudController context 'when the max_in_flight is more than the total number of process instances' do let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 100 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 100) end it 'scales up the new web process by the maximum number' do @@ -187,12 +175,10 @@ module VCAP::CloudController let(:target_total_instance_count) { 6 } let(:droplet) do - DropletModel.make( - process_types: { - 'clock' => 'droplet_clock_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, process_types: { + 'clock' => 'droplet_clock_command', + 'worker' => 'droplet_worker_command' + }) end subject(:scale_action) { DeploymentUpdater::Actions::Scale.new(deployment, logger, target_total_instance_count, interim_desired_instance_count) } @@ -200,13 +186,11 @@ module VCAP::CloudController let(:current_deploying_instances) { interim_desired_instance_count } let!(:interim_deploying_web_process) do - ProcessModel.make( - app: web_process.app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-interim' - ) + create(:process_model, app: web_process.app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-interim') end it 'returns true and leaves the deployment in a deploying state' do @@ -229,13 +213,11 @@ module VCAP::CloudController let(:target_total_instance_count) { 6 } let!(:interim_deploying_web_process) do - ProcessModel.make( - app: web_process.app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 3, - guid: 'guid-interim' - ) + create(:process_model, app: web_process.app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 3, + guid: 'guid-interim') end it 'does not destroy the web process, but scales it to 0' do @@ -251,12 +233,10 @@ module VCAP::CloudController context 'when the max_in_flight is set to 10' do let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 10 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 10) end it 'does not destroy the web process, but scales it to 0' do @@ -269,30 +249,24 @@ module VCAP::CloudController context 'when the oldest web process will be at zero instances' do let(:current_deploying_instances) { 3 } let!(:web_process) do - ProcessModel.make( - guid: 'web_process', - instances: 0, - app: app, - created_at: 1.day.ago - 11, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'web_process', + instances: 0, + app: app, + created_at: 1.day.ago - 11, + type: ProcessTypes::WEB) end let!(:oldest_web_process_with_instances) do - ProcessModel.make( - guid: 'oldest_web_process_with_instances', - instances: 1, - app: app, - created_at: 1.day.ago - 10, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'oldest_web_process_with_instances', + instances: 1, + app: app, + created_at: 1.day.ago - 10, + type: ProcessTypes::WEB) end let!(:other_web_process_with_instances) do - ProcessModel.make( - instances: 10, - app: app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB - ) + create(:process_model, instances: 10, + app: app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB) end it 'destroys the oldest web process and ignores the original web process' do @@ -309,30 +283,24 @@ module VCAP::CloudController let(:max_in_flight) { 4 } let!(:web_process) do - ProcessModel.make( - guid: 'web_process', - instances: 10, - app: app, - created_at: 1.day.ago - 11, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'web_process', + instances: 10, + app: app, + created_at: 1.day.ago - 11, + type: ProcessTypes::WEB) end let!(:oldest_web_process_with_instances) do - ProcessModel.make( - guid: 'oldest_web_process_with_instances', - instances: 10, - app: app, - created_at: 1.day.ago - 10, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'oldest_web_process_with_instances', + instances: 10, + app: app, + created_at: 1.day.ago - 10, + type: ProcessTypes::WEB) end let!(:other_web_process_with_instances) do - ProcessModel.make( - instances: 10, - app: app, - created_at: 1.day.ago - 9, - type: ProcessTypes::WEB - ) + create(:process_model, instances: 10, + app: app, + created_at: 1.day.ago - 9, + type: ProcessTypes::WEB) end it 'scales down interim proceses so all instances equal original instance count + max in flight' do @@ -390,30 +358,24 @@ module VCAP::CloudController let(:max_in_flight) { 4 } let!(:web_process) do - ProcessModel.make( - guid: 'web_process', - instances: 1, - app: app, - created_at: 1.day.ago - 11, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'web_process', + instances: 1, + app: app, + created_at: 1.day.ago - 11, + type: ProcessTypes::WEB) end let!(:oldest_web_process_with_instances) do - ProcessModel.make( - guid: 'oldest_web_process_with_instances', - instances: 1, - app: app, - created_at: 1.day.ago - 10, - type: ProcessTypes::WEB - ) + create(:process_model, guid: 'oldest_web_process_with_instances', + instances: 1, + app: app, + created_at: 1.day.ago - 10, + type: ProcessTypes::WEB) end let!(:other_web_process_with_instances) do - ProcessModel.make( - instances: 1, - app: app, - created_at: 1.day.ago - 10, - type: ProcessTypes::WEB - ) + create(:process_model, instances: 1, + app: app, + created_at: 1.day.ago - 10, + type: ProcessTypes::WEB) end it 'doesnt try to scale up or down the iterim processes' do @@ -655,13 +617,11 @@ module VCAP::CloudController describe 'during an upgrade with leftover legacy webish processes' do let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: 'web-deployment-guid-legacy', - instances: current_deploying_instances, - guid: 'guid-legacy', - revision: revision - ) + create(:process_model, app: web_process.app, + type: 'web-deployment-guid-legacy', + instances: current_deploying_instances, + guid: 'guid-legacy', + revision: revision) end it 'scales up the coerced web process by one' do @@ -674,12 +634,10 @@ module VCAP::CloudController context 'when the max_in_flight is set to 10' do let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 10 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 10) end it 'scales up the coerced web process by the maximum original web process count' do @@ -694,20 +652,16 @@ module VCAP::CloudController context 'when there is an interim deployment that has been SUPERSEDED (CANCELED)' do let!(:interim_canceling_web_process) do - ProcessModel.make( - app: app, - created_at: 1.hour.ago, - type: ProcessTypes::WEB, - instances: 1, - guid: 'guid-canceling' - ) + create(:process_model, app: app, + created_at: 1.hour.ago, + type: ProcessTypes::WEB, + instances: 1, + guid: 'guid-canceling') end let!(:interim_canceled_superseded_deployment) do - DeploymentModel.make( - deploying_web_process: interim_canceling_web_process, - state: 'CANCELED', - status_reason: 'SUPERSEDED' - ) + create(:deployment_model, deploying_web_process: interim_canceling_web_process, + state: 'CANCELED', + status_reason: 'SUPERSEDED') end it 'scales the canceled web process to zero' do @@ -731,12 +685,10 @@ module VCAP::CloudController describe 'interim_desired_instance_count' do let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: 'DEPLOYING', - max_in_flight: 100 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: 'DEPLOYING', + max_in_flight: 100) end context 'when not passed in' do diff --git a/spec/unit/lib/cloud_controller/deployment_updater/actions/up_scaler_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/actions/up_scaler_spec.rb index d3266356995..5cd31d196ae 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/actions/up_scaler_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/actions/up_scaler_spec.rb @@ -3,53 +3,43 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Actions::UpScaler do - let(:app) { AppModel.make(droplet: droplet, revisions_enabled: true) } - let(:droplet) { DropletModel.make } + let(:app) { create(:app_model, droplet: droplet, revisions_enabled: true) } + let(:droplet) { create(:droplet_model) } let!(:web_process) do - ProcessModel.make( - instances: 3, - created_at: 1.day.ago, - guid: 'guid-original', - app: app - ) + create(:process_model, instances: 3, + created_at: 1.day.ago, + guid: 'guid-original', + app: app) end let!(:interim_web_process) do - ProcessModel.make( - instances: 1, - created_at: 3.hours.ago, - guid: 'guid-interim', - app: app - ) + create(:process_model, instances: 1, + created_at: 3.hours.ago, + guid: 'guid-interim', + app: app) end let!(:interim_web_process_2) do - ProcessModel.make( - instances: 2, - created_at: 2.hours.ago, - guid: 'guid-interim-2', - app: app - ) + create(:process_model, instances: 2, + created_at: 2.hours.ago, + guid: 'guid-interim-2', + app: app) end let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: ProcessTypes::WEB, - instances: current_instance_count, - guid: 'guid-final', - state: ProcessModel::STOPPED - ) + create(:process_model, app: web_process.app, + type: ProcessTypes::WEB, + instances: current_instance_count, + guid: 'guid-final', + state: ProcessModel::STOPPED) end let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: DeploymentModel::DEPLOYING_STATE, - max_in_flight: max_in_flight - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: DeploymentModel::DEPLOYING_STATE, + max_in_flight: max_in_flight) end let(:logger) { instance_double(Steno::Logger, info: nil, error: nil) } diff --git a/spec/unit/lib/cloud_controller/deployment_updater/dispatcher_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/dispatcher_spec.rb index c6dcd2408e0..ecbca7e1202 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/dispatcher_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/dispatcher_spec.rb @@ -5,9 +5,9 @@ module VCAP::CloudController RSpec.describe DeploymentUpdater::Dispatcher do subject(:dispatcher) { DeploymentUpdater::Dispatcher } - let(:scaling_deployment) { DeploymentModel.make(state: DeploymentModel::DEPLOYING_STATE) } - let(:prepaused_deployment) { DeploymentModel.make(state: DeploymentModel::PREPAUSED_STATE) } - let(:canceling_deployment) { DeploymentModel.make(state: DeploymentModel::CANCELING_STATE) } + let(:scaling_deployment) { create(:deployment_model, state: DeploymentModel::DEPLOYING_STATE) } + let(:prepaused_deployment) { create(:deployment_model, state: DeploymentModel::PREPAUSED_STATE) } + let(:canceling_deployment) { create(:deployment_model, state: DeploymentModel::CANCELING_STATE) } let(:logger) { instance_double(Steno::Logger, info: nil, error: nil, warn: nil) } let(:workpool) { instance_double(WorkPool, submit: nil, drain: nil) } diff --git a/spec/unit/lib/cloud_controller/deployment_updater/updater_spec.rb b/spec/unit/lib/cloud_controller/deployment_updater/updater_spec.rb index 35c0a04e6b3..242b3a149d7 100644 --- a/spec/unit/lib/cloud_controller/deployment_updater/updater_spec.rb +++ b/spec/unit/lib/cloud_controller/deployment_updater/updater_spec.rb @@ -6,29 +6,25 @@ module VCAP::CloudController subject(:updater) { DeploymentUpdater::Updater.new(deployment, logger) } let(:a_day_ago) { Time.now - 1.day } let(:an_hour_ago) { Time.now - 1.hour } - let(:app) { AppModel.make(droplet: droplet, revisions_enabled: true) } - let(:droplet) { DropletModel.make } + let(:app) { create(:app_model, droplet: droplet, revisions_enabled: true) } + let(:droplet) { create(:droplet_model) } let!(:web_process) do - ProcessModel.make( - instances: current_web_instances, - created_at: a_day_ago, - guid: 'guid-original', - app: app - ) + create(:process_model, instances: current_web_instances, + created_at: a_day_ago, + guid: 'guid-original', + app: app) end - let!(:route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: web_process.type) } + let!(:route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: web_process.type) } let!(:deploying_web_process) do - ProcessModel.make( - app: web_process.app, - type: ProcessTypes::WEB, - instances: current_deploying_instances, - guid: 'guid-final', - revision: revision, - state: ProcessModel::STARTED - ) + create(:process_model, app: web_process.app, + type: ProcessTypes::WEB, + instances: current_deploying_instances, + guid: 'guid-final', + revision: revision, + state: ProcessModel::STARTED) end - let(:revision) { RevisionModel.make(app: app, droplet: droplet, version: 300) } - let!(:deploying_route_mapping) { RouteMappingModel.make(app: web_process.app, process_type: deploying_web_process.type) } + let(:revision) { create(:revision_model, app: app, droplet: droplet, version: 300) } + let!(:deploying_route_mapping) { create(:route_mapping_model, app: web_process.app, process_type: deploying_web_process.type) } let(:space) { web_process.space } let(:original_web_process_instance_count) { 6 } let(:current_web_instances) { 2 } @@ -37,14 +33,12 @@ module VCAP::CloudController let(:state) { DeploymentModel::DEPLOYING_STATE } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: state, - original_web_process_instance_count: original_web_process_instance_count, - max_in_flight: max_in_flight, - web_instances: web_instances - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: state, + original_web_process_instance_count: original_web_process_instance_count, + max_in_flight: max_in_flight, + web_instances: web_instances) end let(:web_instances) { nil } @@ -69,12 +63,10 @@ module VCAP::CloudController describe '#scale' do context 'when the deployment process has reached original_web_process_instance_count' do let(:droplet) do - DropletModel.make( - process_types: { - 'clock' => 'droplet_clock_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, process_types: { + 'clock' => 'droplet_clock_command', + 'worker' => 'droplet_worker_command' + }) end let(:all_instances_results) do @@ -156,8 +148,8 @@ module VCAP::CloudController end context 'when an error occurs while scaling a deployment' do - let(:failing_process) { ProcessModel.make(app: web_process.app, type: 'failing', instances: 5) } - let(:deployment) { DeploymentModel.make(app: web_process.app, deploying_web_process: failing_process, state: 'DEPLOYING') } + let(:failing_process) { create(:process_model, app: web_process.app, type: 'failing', instances: 5) } + let(:deployment) { create(:deployment_model, app: web_process.app, deploying_web_process: failing_process, state: 'DEPLOYING') } before do allow(deployment).to receive(:app).and_raise(StandardError.new('Something real bad happened')) @@ -193,31 +185,27 @@ module VCAP::CloudController let(:state) { DeploymentModel::PREPAUSED_STATE } let(:current_deploying_instances) { 1 } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - state: state, - strategy: 'canary', - original_web_process_instance_count: original_web_process_instance_count, - max_in_flight: 1 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + state: state, + strategy: 'canary', + original_web_process_instance_count: original_web_process_instance_count, + max_in_flight: 1) end describe 'canary steps' do let(:max_in_flight) { 1 } let(:original_web_process_instance_count) { 10 } let(:deployment) do - DeploymentModel.make( - app: web_process.app, - deploying_web_process: deploying_web_process, - strategy: 'canary', - droplet: droplet, - state: state, - max_in_flight: max_in_flight, - original_web_process_instance_count: 10, - canary_steps: [{ instance_weight: 50 }, { instance_weight: 80 }], - canary_current_step: 1 - ) + create(:deployment_model, app: web_process.app, + deploying_web_process: deploying_web_process, + strategy: 'canary', + droplet: droplet, + state: state, + max_in_flight: max_in_flight, + original_web_process_instance_count: 10, + canary_steps: [{ instance_weight: 50 }, { instance_weight: 80 }], + canary_current_step: 1) end context 'when the current step instance count has been reached' do @@ -439,7 +427,7 @@ module VCAP::CloudController context 'when the error is a quota error' do let(:web_instances) { nil } let(:max_in_flight) { 100 } - let!(:quota_definition) { QuotaDefinition.make(memory_limit: 1) } + let!(:quota_definition) { create(:quota_definition, memory_limit: 1) } before do org = app.organization diff --git a/spec/unit/lib/cloud_controller/deployments/deployment_target_state_spec.rb b/spec/unit/lib/cloud_controller/deployments/deployment_target_state_spec.rb index f4f814cd24b..99a2a3a269a 100644 --- a/spec/unit/lib/cloud_controller/deployments/deployment_target_state_spec.rb +++ b/spec/unit/lib/cloud_controller/deployments/deployment_target_state_spec.rb @@ -4,12 +4,12 @@ module VCAP::CloudController RSpec.describe DeploymentTargetState do subject(:target_state) { DeploymentTargetState.new(app, message) } - let(:app) { AppModel.make(environment_variables: { 'foo' => 'bar' }) } - let(:droplet) { DropletModel.make(app: app, process_types: { 'web' => 'command' }) } + let(:app) { create(:app_model, environment_variables: { 'foo' => 'bar' }) } + let(:droplet) { create(:droplet_model, app: app, process_types: { 'web' => 'command' }, set_as_current_droplet: false) } describe 'droplet' do context 'revision provided' do - let(:revision) { RevisionModel.make(droplet:) } + let(:revision) { create(:revision_model, droplet:) } let(:message) do DeploymentCreateMessage.new({ relationships: { app: { data: { guid: app.guid } } }, @@ -107,7 +107,7 @@ module VCAP::CloudController describe 'environment_variables' do context 'a revision is provided' do let(:revision) do - RevisionModel.make(droplet: droplet, environment_variables: { 'baz' => 'qux' }) + create(:revision_model, droplet: droplet, environment_variables: { 'baz' => 'qux' }) end let(:message) do DeploymentCreateMessage.new({ @@ -137,7 +137,7 @@ module VCAP::CloudController describe 'rollback_target_revision' do context 'a revision is provided' do - let(:revision) { RevisionModel.make(droplet:) } + let(:revision) { create(:revision_model, droplet:) } let(:message) do DeploymentCreateMessage.new({ relationships: { app: { data: { guid: app.guid } } }, @@ -203,11 +203,11 @@ module VCAP::CloudController revision: { guid: revision.guid } }) end - let(:revision) { RevisionModel.make(droplet:, app:) } + let(:revision) { create(:revision_model, droplet:, app:) } context 'assigning environment variables' do let(:revision) do - RevisionModel.make(droplet: droplet, app: app, environment_variables: { 'baz' => 'qux' }) + create(:revision_model, droplet: droplet, app: app, environment_variables: { 'baz' => 'qux' }) end it 'assigns environment variables to the app' do @@ -219,12 +219,10 @@ module VCAP::CloudController context 'assigning sidecars to the app' do let!(:revision_sidecar) do - RevisionSidecarModel.make( - revision: revision, - name: 'sidecar-name', - command: 'sidecar-command', - memory: 12 - ) + create(:revision_sidecar_model, revision: revision, + name: 'sidecar-name', + command: 'sidecar-command', + memory: 12) end it 'assigns the sidecar to the app' do @@ -239,7 +237,7 @@ module VCAP::CloudController end context 'removing sidecars from the app' do - let!(:sidecar) { SidecarModel.make(app:) } + let!(:sidecar) { create(:sidecar_model, app:) } it 'removes the sidecars from the app' do subject.apply_to_app(app, user_audit_info) diff --git a/spec/unit/lib/cloud_controller/diego/app_recipe_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/app_recipe_builder_spec.rb index 267efcdd9d3..e75ebf58b10 100644 --- a/spec/unit/lib/cloud_controller/diego/app_recipe_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/app_recipe_builder_spec.rb @@ -76,7 +76,7 @@ module Diego before do app = process.app app.update(service_binding_k8s_enabled: true) - VCAP::CloudController::ServiceBinding.make(service_instance: ManagedServiceInstance.make(space: app.space), app: app) + create(:service_binding, service_instance: create(:managed_service_instance, space: app.space), app: app) end it 'includes volume mounted files' do @@ -95,7 +95,7 @@ module Diego before do app = process.app app.update(file_based_vcap_services_enabled: true) - VCAP::CloudController::ServiceBinding.make(service_instance: ManagedServiceInstance.make(space: app.space), app: app) + create(:service_binding, service_instance: create(:managed_service_instance, space: app.space), app: app) end it 'includes the vcap_services file' do @@ -120,13 +120,13 @@ module Diego allow(Environment).to receive(:new).with(process, {}).and_return(environment) allow(environment).to receive(:as_json).and_return(environment_variables) [ - SecurityGroup.make(guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }]), - SecurityGroup.make(guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }]), - SecurityGroup.make(guid: 'guid3', rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '0.0.0.0/0', 'log' => true }]) + create(:security_group, guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }]), + create(:security_group, guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }]), + create(:security_group, guid: 'guid3', rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '0.0.0.0/0', 'log' => true }]) ].each { |security_group| security_group.add_space(process.space) } - RouteMappingModel.make(app: process.app, route: route_without_service, process_type: process.type, app_port: 1111) - RouteMappingModel.make(app: process.app, route: route_with_service, process_type: process.type, app_port: 1111) + create(:route_mapping_model, app: process.app, route: route_without_service, process_type: process.type, app_port: 1111) + create(:route_mapping_model, app: process.app, route: route_with_service, process_type: process.type, app_port: 1111) app_model.update(droplet:) allow(VCAP::CloudController::IsolationSegmentSelector).to receive(:for_space).and_return('placement-tag') @@ -141,36 +141,36 @@ module Diego end let(:lifecycle_type) { nil } - let(:org) { Organization.make(name: 'MyOrg') } - let(:space) { Space.make(organization: org) } - let(:app_model) { AppModel.make(lifecycle_type, guid: 'app-guid', space: space, droplet: DropletModel.make(state: 'STAGED'), enable_ssh: false) } - let(:package) { PackageModel.make(lifecycle_type, app: app_model) } + let(:org) { create(:organization, name: 'MyOrg') } + let(:space) { create(:space, organization: org) } + let(:app_model) { create(:app_model, lifecycle_type, guid: 'app-guid', space: space, droplet: create(:droplet_model, state: 'STAGED'), enable_ssh: false) } + let(:package) { create(:package_model, lifecycle_type, app: app_model) } let(:process) do - process = ProcessModel.make(:process, - app: app_model, - state: 'STARTED', - diego: true, - guid: 'process-guid', - type: 'web', - health_check_timeout: 12, - instances: 21, - memory: 128, - disk_quota: 256, - log_rate_limit: 1024, - command: command, - file_descriptors: 32, - health_check_type: 'port', - enable_ssh: false) + process = create(:process_model, :process, + app: app_model, + state: 'STARTED', + diego: true, + guid: 'process-guid', + type: 'web', + health_check_timeout: 12, + instances: 21, + memory: 128, + disk_quota: 256, + log_rate_limit: 1024, + command: command, + file_descriptors: 32, + health_check_type: 'port', + enable_ssh: false) process.this.update(updated_at: Time.at(2)) process.reload end let(:command) { 'echo "hello"' } - let(:route_without_service) { Route.make(space: process.space) } + let(:route_without_service) { create(:route, space: process.space) } let(:route_with_service) do - si = ManagedServiceInstance.make(:routing, space: process.space) - r = Route.make(space: process.space) - RouteBinding.make(route: r, service_instance: si, route_service_url: 'http://foobar.com') + si = create(:managed_service_instance, :routing, space: process.space) + r = create(:route, space: process.space) + create(:route_binding, route: r, service_instance: si, route_service_url: 'http://foobar.com') r end @@ -300,11 +300,11 @@ module Diego context 'when the lifecycle_type is "buildpack"' do let(:lifecycle_type) { :buildpack } let(:droplet) do - DropletModel.make(lifecycle_type, - package: package, - state: DropletModel::STAGED_STATE, - execution_metadata: execution_metadata, - droplet_hash: 'droplet-hash') + create(:droplet_model, lifecycle_type, + package: package, + state: DropletModel::STAGED_STATE, + execution_metadata: execution_metadata, + droplet_hash: 'droplet-hash') end let(:config) do Config.new({ @@ -347,11 +347,9 @@ module Diego let(:ports) { '8080' } before do - VCAP::CloudController::BuildpackLifecycleDataModel.make( - app: app_model, - buildpacks: nil, - stack: 'potato-stack' - ) + create(:buildpack_lifecycle_data_model, app: app_model, + buildpacks: nil, + stack: 'potato-stack') allow(VCAP::CloudController::Diego::Buildpack::DesiredLrpBuilder).to receive(:new).and_return(desired_lrp_builder) end @@ -378,7 +376,7 @@ module Diego end context 'when a volume mount is provided' do - let(:service_instance) { ManagedServiceInstance.make space: app_model.space } + let(:service_instance) { create(:managed_service_instance, space: app_model.space) } let(:multiple_volume_mounts) do [ { @@ -407,7 +405,7 @@ module Diego end before do - ServiceBinding.make(app: app_model, service_instance: service_instance, volume_mounts: multiple_volume_mounts) + create(:service_binding, app: app_model, service_instance: service_instance, volume_mounts: multiple_volume_mounts) end it 'desires the mount' do @@ -972,11 +970,11 @@ module Diego context 'when the lifecycle_type is "cnb"' do let(:lifecycle_type) { :cnb } let(:droplet) do - DropletModel.make(lifecycle_type, - package: package, - state: DropletModel::STAGED_STATE, - execution_metadata: execution_metadata, - droplet_hash: 'droplet-hash') + create(:droplet_model, lifecycle_type, + package: package, + state: DropletModel::STAGED_STATE, + execution_metadata: execution_metadata, + droplet_hash: 'droplet-hash') end let(:config) do Config.new({ @@ -1069,15 +1067,15 @@ module Diego }) end let(:lifecycle_type) { :docker } - let(:package) { PackageModel.make(lifecycle_type, app: app_model) } + let(:package) { create(:package_model, lifecycle_type, app: app_model) } let(:droplet) do - DropletModel.make(:docker, - package: package, - state: DropletModel::STAGED_STATE, - execution_metadata: execution_metadata, - docker_receipt_image: 'docker-receipt-image', - docker_receipt_username: 'dockeruser', - docker_receipt_password: 'dockerpass') + create(:droplet_model, :docker, + package: package, + state: DropletModel::STAGED_STATE, + execution_metadata: execution_metadata, + docker_receipt_image: 'docker-receipt-image', + docker_receipt_username: 'dockeruser', + docker_receipt_password: 'dockerpass') end let(:old_expected_cached_dependencies) do [ @@ -1123,19 +1121,15 @@ module Diego let(:metric_tag_key_prefix) { 'metric.tag.cloudfoundry.org' } before do - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'DatadogValue', - value: 'woof' - ) - - AppLabelModel.make( - app: app_model, - key_prefix: 'nonmetric.tag.cloudfoundry.org', - key_name: 'SomeotherValue', - value: 'notapplied' - ) + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'DatadogValue', + value: 'woof') + + create(:app_label_model, app: app_model, + key_prefix: 'nonmetric.tag.cloudfoundry.org', + key_name: 'SomeotherValue', + value: 'notapplied') end context 'when cc.custom_metric_tag_prefix_list has entries' do @@ -1150,12 +1144,10 @@ module Diego context 'when app labels tags match existing custom metrics tags' do before do - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'organization_name', - value: 'wrong_org_name' - ) + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'organization_name', + value: 'wrong_org_name') end it 'does not override the metric tag' do @@ -1165,33 +1157,25 @@ module Diego context 'when app labels contain forbidden key_names' do before do - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'deployment', - value: 'kafka' - ) - - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'index', - value: '999' - ) - - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'ip', - value: '127.0.0.1' - ) - - AppLabelModel.make( - app: app_model, - key_prefix: metric_tag_key_prefix, - key_name: 'job', - value: 'potato farmer' - ) + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'deployment', + value: 'kafka') + + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'index', + value: '999') + + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'ip', + value: '127.0.0.1') + + create(:app_label_model, app: app_model, + key_prefix: metric_tag_key_prefix, + key_name: 'job', + value: 'potato farmer') end it 'do not get applied' do @@ -1330,7 +1314,7 @@ module Diego end context 'when a volume mount is provided' do - let(:service_instance) { ManagedServiceInstance.make space: app_model.space } + let(:service_instance) { create(:managed_service_instance, space: app_model.space) } let(:multiple_volume_mounts) do [ { @@ -1359,7 +1343,7 @@ module Diego end before do - ServiceBinding.make(app: app_model, service_instance: service_instance, volume_mounts: multiple_volume_mounts) + create(:service_binding, app: app_model, service_instance: service_instance, volume_mounts: multiple_volume_mounts) end it 'desires the mount' do @@ -1410,9 +1394,9 @@ module Diego describe '#build_app_lrp_update' do let(:config) { Config.new({}) } - let(:app_model) { AppModel.make(guid: 'app-guid', droplet: DropletModel.make(state: 'STAGED')) } + let(:app_model) { create(:app_model, guid: 'app-guid', droplet: create(:droplet_model, state: 'STAGED')) } let(:process) do - process = ProcessModel.make(:process, instances: 7, app: app_model) + process = create(:process_model, :process, instances: 7, app: app_model) process.this.update(updated_at: Time.at(2)) process.reload end diff --git a/spec/unit/lib/cloud_controller/diego/bbs_apps_client_spec.rb b/spec/unit/lib/cloud_controller/diego/bbs_apps_client_spec.rb index 27e67adec7a..dc4514d9fe5 100644 --- a/spec/unit/lib/cloud_controller/diego/bbs_apps_client_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/bbs_apps_client_spec.rb @@ -8,7 +8,7 @@ module VCAP::CloudController::Diego describe '#desire_app' do let(:bbs_client) { instance_double(::Diego::Client, desire_lrp: lrp_response) } let(:lrp) { ::Diego::Bbs::Models::DesiredLRP.new process_guid: lrp_process_guid } - let(:process) { VCAP::CloudController::ProcessModel.make } + let(:process) { create(:process_model) } let(:lrp_process_guid) { ProcessGuid.from_process process } let(:lrp_response) { ::Diego::Bbs::Models::DesiredLRPLifecycleResponse.new(error: lifecycle_error) } let(:lifecycle_error) { nil } diff --git a/spec/unit/lib/cloud_controller/diego/bbs_stager_client_spec.rb b/spec/unit/lib/cloud_controller/diego/bbs_stager_client_spec.rb index e073b781d30..88741fda0ea 100644 --- a/spec/unit/lib/cloud_controller/diego/bbs_stager_client_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/bbs_stager_client_spec.rb @@ -13,7 +13,7 @@ module VCAP::CloudController::Diego describe '#stage' do let(:task_recipe_builder) { instance_double(TaskRecipeBuilder) } - let(:package) { VCAP::CloudController::PackageModel.make } + let(:package) { create(:package_model) } let(:message) { { staging: 'message' } } let(:staging_details) do VCAP::CloudController::Diego::StagingDetails.new.tap do |sd| diff --git a/spec/unit/lib/cloud_controller/diego/buildpack/lifecycle_protocol_spec.rb b/spec/unit/lib/cloud_controller/diego/buildpack/lifecycle_protocol_spec.rb index 5ba4fd83ba0..43b0d46d4f5 100644 --- a/spec/unit/lib/cloud_controller/diego/buildpack/lifecycle_protocol_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/buildpack/lifecycle_protocol_spec.rb @@ -21,10 +21,10 @@ module Buildpack let(:droplet_download_url) { 'droplet-download-url' } it_behaves_like 'a lifecycle protocol' do - let(:app) { AppModel.make } - let(:package) { PackageModel.make(app_guid: app.guid) } - let(:droplet) { DropletModel.make(package_guid: package.guid, app_guid: app.guid) } - let(:process) { ProcessModel.make(app:) } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, app_guid: app.guid) } + let(:droplet) { create(:droplet_model, package_guid: package.guid, app_guid: app.guid) } + let(:process) { create(:process_model, app:) } let(:staging_details) do Diego::StagingDetails.new.tap do |details| details.staging_guid = droplet.guid @@ -46,9 +46,9 @@ module Buildpack end describe '#lifecycle_data' do - let(:app) { AppModel.make } - let(:package) { PackageModel.make(app:) } - let(:droplet) { DropletModel.make(package:, app:) } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, app:) } + let(:droplet) { create(:droplet_model, package:, app:) } let(:buildpack) { nil } let(:buildpack_infos) { [BuildpackInfo.new(buildpack, VCAP::CloudController::Buildpack.find(name: buildpack))] } @@ -131,8 +131,8 @@ module Buildpack describe '#staging_action_builder' do let(:config) { Config.new({ some: 'config' }) } - let(:package) { PackageModel.make } - let(:droplet) { DropletModel.make } + let(:package) { create(:package_model) } + let(:droplet) { create(:droplet_model) } let(:staging_details) do StagingDetails.new.tap do |details| details.lifecycle = instance_double(BuildpackLifecycle, staging_stack: 'potato-stack', buildpack_infos: 'some buildpack info') @@ -166,11 +166,11 @@ module Buildpack end describe '#task_action_builder' do - let(:task) { TaskModel.make(user: 'ContainerUser') } + let(:task) { create(:task_model, user: 'ContainerUser') } let(:config) { Config.new({ some: 'config' }) } it 'returns a TaskActionBuilder' do - task.app.update(buildpack_lifecycle_data: BuildpackLifecycleDataModel.make(stack: 'potato-stack')) + task.app.update(buildpack_lifecycle_data: create(:buildpack_lifecycle_data_model, stack: 'potato-stack')) task_action_builder = instance_double(TaskActionBuilder) allow(TaskActionBuilder).to receive(:new).and_return task_action_builder @@ -202,17 +202,15 @@ module Buildpack describe '#desired_lrp_builder' do let(:config) { Config.new({}) } - let(:app) { AppModel.make(droplet:) } - let(:droplet) { DropletModel.make } + let(:app) { create(:app_model, droplet:) } + let(:droplet) { create(:droplet_model) } let(:process) do - ProcessModel.make( - type: 'worker', - app: app, - diego: true, - command: 'go go go', - metadata: {}, - ports: [1234, 5678] - ) + create(:process_model, type: 'worker', + app: app, + diego: true, + command: 'go go go', + metadata: {}, + ports: [1234, 5678]) end let(:builder_opts) do { @@ -275,15 +273,13 @@ module Buildpack context 'and theres a revision on the process' do let(:new_droplet) do - DropletModel.make( - app: app, - process_types: { - 'worker' => 'something else', - 'web' => 'not this' - } - ) + create(:droplet_model, app: app, + process_types: { + 'worker' => 'something else', + 'web' => 'not this' + }) end - let(:revision) { RevisionModel.make(app: app, droplet_guid: new_droplet.guid) } + let(:revision) { create(:revision_model, app: app, droplet_guid: new_droplet.guid) } before do process.update(revision:) diff --git a/spec/unit/lib/cloud_controller/diego/buildpack/staging_action_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/buildpack/staging_action_builder_spec.rb index 03b611d1058..a30b06cdb0a 100644 --- a/spec/unit/lib/cloud_controller/diego/buildpack/staging_action_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/buildpack/staging_action_builder_spec.rb @@ -6,7 +6,7 @@ module Buildpack RSpec.describe StagingActionBuilder do subject(:builder) { StagingActionBuilder.new(config, staging_details, lifecycle_data) } - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } let(:enable_declarative_asset_downloads) { false } let(:legacy_md5_buildpack_paths_enabled) { false } let(:config) do diff --git a/spec/unit/lib/cloud_controller/diego/buildpack/staging_completion_handler_spec.rb b/spec/unit/lib/cloud_controller/diego/buildpack/staging_completion_handler_spec.rb index 20984abd781..09994d83db5 100644 --- a/spec/unit/lib/cloud_controller/diego/buildpack/staging_completion_handler_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/buildpack/staging_completion_handler_spec.rb @@ -6,18 +6,18 @@ module Diego module Buildpack RSpec.describe StagingCompletionHandler do let(:logger) { instance_double(Steno::Logger, info: nil, error: nil, warn: nil) } - let(:buildpack) { VCAP::CloudController::Buildpack.make(name: 'lifecycle-bp') } + let(:buildpack) { create(:buildpack, name: 'lifecycle-bp') } let(:buildpack1_name) { 'the-pleasant-buildpack' } let(:buildpack1_other_name) { 'valley' } let(:buildpack1_version) { '3.1' } let(:buildpack1_key) { 'vicuna' } - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(key: buildpack1_key, name: buildpack1_name, sha256_checksum: 'mammoth') } + let!(:buildpack1) { create(:buildpack, key: buildpack1_key, name: buildpack1_name, sha256_checksum: 'mammoth') } let(:buildpack2_name) { 'my-brilliant-buildpack' } let(:buildpack2_other_name) { 'launderette' } let(:buildpack2_version) { '95' } let(:buildpack2_key) { 'guanaco' } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(key: buildpack2_key, name: buildpack2_name, sha256_checksum: 'languid') } + let!(:buildpack2) { create(:buildpack, key: buildpack2_key, name: buildpack2_name, sha256_checksum: 'languid') } let(:buildpack3_key) { 'git://my-buildpacks.tv/kate/allie.git' } let(:buildpack3_other_name) { 'hilltop' } let(:buildpack3_version) { 'ME' } @@ -72,12 +72,10 @@ module Buildpack subject { StagingCompletionHandler.new(build, runners) } describe '#staging_complete' do - let(:app) { AppModel.make } - let(:package) { PackageModel.make(app:) } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, app:) } let!(:build) do - BuildModel.make(app: app, package: package, state: BuildModel::STAGING_STATE).tap do |build| - BuildpackLifecycleDataModel.make(build:) - end + create(:build_model, app: app, package: package, state: BuildModel::STAGING_STATE) end let(:staging_guid) { build.guid } @@ -88,7 +86,7 @@ module Buildpack end describe 'success case' do - let(:droplet) { DropletModel.make(app: app, package: package, state: DropletModel::STAGING_STATE) } + let(:droplet) { create(:droplet_model, app: app, package: package, state: DropletModel::STAGING_STATE) } before do build.update(droplet:) @@ -203,7 +201,7 @@ module Buildpack context 'and the app\'s web process does NOT have a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -219,7 +217,7 @@ module Buildpack context 'and the app\'s web process has a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } before do success_response[:result][:execution_metadata] = 'black-box-string' @@ -241,7 +239,7 @@ module Buildpack context 'when a start is requested' do context 'and the app has a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } before do success_response[:result][:execution_metadata] = 'black-box-string' @@ -249,11 +247,11 @@ module Buildpack end context 'when revisions are enabled' do - let(:old_droplet) { DropletModel.make(app: app, created_at: 5.days.ago) } + let(:old_droplet) { create(:droplet_model, app: app, created_at: 5.days.ago) } before do app.update(revisions_enabled: true) - RevisionModel.make(app_guid: app.guid, droplet_guid: old_droplet.guid) + create(:revision_model, app_guid: app.guid, droplet_guid: old_droplet.guid) end it 'creates a revision and assigns it to the processes' do @@ -301,7 +299,7 @@ module Buildpack context 'but the app has a user-origin sidecar of the same name' do before do - SidecarModel.make(name: 'sleepy', command: 'sleep infinity', app: app, origin: SidecarModel::ORIGIN_USER) + create(:sidecar_model, name: 'sleepy', command: 'sleep infinity', app: app, origin: SidecarModel::ORIGIN_USER) end it 'errors without materializing sidecars' do @@ -322,7 +320,7 @@ module Buildpack context 'when the app does not have a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -357,7 +355,7 @@ module Buildpack context 'when the buildpack key is a key' do it 'records that as the buildpack' do - admin_buildpack = VCAP::CloudController::Buildpack.make(name: 'woop', key: 'thismakey') + admin_buildpack = create(:buildpack, name: 'woop', key: 'thismakey') success_response[:result][:lifecycle_metadata][:buildpack_key] = 'thismakey' subject.staging_complete(success_response) @@ -394,7 +392,7 @@ module Buildpack context 'when updating the droplet record with data from staging fails' do let(:save_error) { StandardError.new('save-error') } let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow_any_instance_of(DropletModel).to receive(:save_changes).and_raise(save_error) @@ -426,7 +424,7 @@ module Buildpack context 'when a start is requested' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -448,7 +446,7 @@ module Buildpack end it 'records a buildpack set event for all processes' do - ProcessModel.make(app: app, type: 'other') + create(:process_model, app: app, type: 'other') expect do subject.staging_complete(success_response, true) end.to change { AppUsageEvent.where(state: 'BUILDPACK_SET').count }.from(0).to(2) @@ -465,7 +463,7 @@ module Buildpack context 'when this is not the most recent staging result' do before do - DropletModel.make(app:, package:) + create(:droplet_model, app: app, package: package, set_as_current_droplet: false) end it 'does not assign the current droplet' do @@ -484,7 +482,7 @@ module Buildpack context 'when a start is not requested' do let(:with_start) { false } let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -500,7 +498,7 @@ module Buildpack end it 'records a buildpack set event for all processes' do - ProcessModel.make(app: app, type: 'other') + create(:process_model, app: app, type: 'other') expect do subject.staging_complete(success_response, with_start) end.to change { AppUsageEvent.where(state: 'BUILDPACK_SET').count }.from(0).to(1) @@ -580,7 +578,7 @@ module Buildpack end context 'with a malformed success message' do - let(:droplet) { DropletModel.make(app: app, package: package, state: DropletModel::STAGING_STATE) } + let(:droplet) { create(:droplet_model, app: app, package: package, state: DropletModel::STAGING_STATE) } before do build.update(droplet:) @@ -677,7 +675,7 @@ module Buildpack end context 'when a start is requested' do - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED') } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED') } it 'stops the web process of the app' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/buildpack/task_action_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/buildpack/task_action_builder_spec.rb index 061bb7e7c69..23496ab7097 100644 --- a/spec/unit/lib/cloud_controller/diego/buildpack/task_action_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/buildpack/task_action_builder_spec.rb @@ -21,7 +21,7 @@ module Buildpack let(:droplet_destinations) do { stack.to_sym => '/value/from/config/based/on/stack' } end - let(:task) { TaskModel.make command: command, name: 'my-task' } + let(:task) { create(:task_model, command: command, name: 'my-task') } let(:command) { 'echo "hello"' } let(:generated_environment) do diff --git a/spec/unit/lib/cloud_controller/diego/buildpack_entry_generator_spec.rb b/spec/unit/lib/cloud_controller/diego/buildpack_entry_generator_spec.rb index 27861fe2645..7b270405f1a 100644 --- a/spec/unit/lib/cloud_controller/diego/buildpack_entry_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/buildpack_entry_generator_spec.rb @@ -11,8 +11,8 @@ module Diego let(:build_artifacts_cache_download_uri) { 'http://buildpack-artifacts-cache.example.com' } let(:blobstore_url_generator) { double('fake url generator') } - let(:stack) { Stack.make } - let(:stack2) { Stack.make } + let(:stack) { create(:stack) } + let(:stack2) { create(:stack) } let!(:java_buildpack) do VCAP::CloudController::Buildpack.create(name: 'java', stack: stack.name, key: 'java-buildpack-key', position: 1, sha256_checksum: 'checksum') @@ -30,8 +30,8 @@ module Diego end describe '#buildpack_entries' do - let(:v3_app) { AppModel.make } - let(:package) { PackageModel.make(app_guid: v3_app.guid) } + let(:v3_app) { create(:app_model) } + let(:package) { create(:package_model, app_guid: v3_app.guid) } let(:buildpack_info) { BuildpackInfo.new(buildpack, VCAP::CloudController::Buildpack.find(name: buildpack)) } let(:buildpack_infos) { [buildpack_info] } diff --git a/spec/unit/lib/cloud_controller/diego/cnb/lifecycle_protocol_spec.rb b/spec/unit/lib/cloud_controller/diego/cnb/lifecycle_protocol_spec.rb index 4b7b5eb8334..473b2111b17 100644 --- a/spec/unit/lib/cloud_controller/diego/cnb/lifecycle_protocol_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/cnb/lifecycle_protocol_spec.rb @@ -21,10 +21,10 @@ module CNB let(:droplet_download_url) { 'droplet-download-url' } it_behaves_like 'a lifecycle protocol' do - let(:app) { AppModel.make(:cnb) } - let(:package) { PackageModel.make(:cnb, app_guid: app.guid) } - let(:droplet) { DropletModel.make(:cnb, package_guid: package.guid, app_guid: app.guid) } - let(:process) { ProcessModel.make(app:) } + let(:app) { create(:app_model, :cnb) } + let(:package) { create(:package_model, :cnb, app_guid: app.guid) } + let(:droplet) { create(:droplet_model, :cnb, package_guid: package.guid, app_guid: app.guid) } + let(:process) { create(:process_model, app:) } let(:staging_details) do Diego::StagingDetails.new.tap do |details| details.staging_guid = droplet.guid @@ -47,9 +47,9 @@ module CNB end describe '#lifecycle_data' do - let(:app) { AppModel.make(:cnb) } - let(:package) { PackageModel.make(app:) } - let(:droplet) { DropletModel.make(:cnb, package:, app:) } + let(:app) { create(:app_model, :cnb) } + let(:package) { create(:package_model, app:) } + let(:droplet) { create(:droplet_model, :cnb, package:, app:) } let(:buildpack) { nil } let(:buildpack_infos) { [BuildpackInfo.new(buildpack, VCAP::CloudController::Buildpack.find(name: buildpack))] } @@ -118,8 +118,8 @@ module CNB describe '#staging_action_builder' do let(:config) { Config.new({ some: 'config' }) } - let(:package) { PackageModel.make(:cnb) } - let(:droplet) { DropletModel.make(:cnb) } + let(:package) { create(:package_model, :cnb) } + let(:droplet) { create(:droplet_model, :cnb) } let(:staging_details) do StagingDetails.new.tap do |details| details.lifecycle = instance_double(CNBLifecycle, staging_stack: 'potato-stack', buildpack_infos: 'some buildpack info', @@ -155,11 +155,11 @@ module CNB end describe '#task_action_builder' do - let(:task) { TaskModel.make(:cnb) } + let(:task) { create(:task_model, :cnb) } let(:config) { Config.new({ some: 'config' }) } it 'returns a TaskActionBuilder' do - task.app.update(cnb_lifecycle_data: CNBLifecycleDataModel.make(stack: 'potato-stack')) + task.app.update(cnb_lifecycle_data: create(:cnb_lifecycle_data_model, stack: 'potato-stack')) task_action_builder = instance_double(Buildpack::TaskActionBuilder) allow(Buildpack::TaskActionBuilder).to receive(:new).and_return task_action_builder @@ -176,10 +176,10 @@ module CNB end context 'when the task has a user specified' do - let(:task) { TaskModel.make(:cnb, user: 'TestUser') } + let(:task) { create(:task_model, :cnb, user: 'TestUser') } it 'sets the appropriate user' do - task.app.update(cnb_lifecycle_data: CNBLifecycleDataModel.make(stack: 'potato-stack')) + task.app.update(cnb_lifecycle_data: create(:cnb_lifecycle_data_model, stack: 'potato-stack')) task_action_builder = instance_double(Buildpack::TaskActionBuilder) allow(Buildpack::TaskActionBuilder).to receive(:new).and_return task_action_builder @@ -216,18 +216,16 @@ module CNB describe '#desired_lrp_builder' do let(:config) { Config.new({}) } - let(:app) { AppModel.make(:cnb, droplet:) } - let(:droplet) { DropletModel.make(:cnb) } + let(:app) { create(:app_model, :cnb, droplet:) } + let(:droplet) { create(:droplet_model, :cnb) } let(:process) do - ProcessModel.make( - :cnb, - type: 'worker', - app: app, - diego: true, - command: 'go go go', - metadata: {}, - ports: [1234, 5678] - ) + create(:process_model, :cnb, + type: 'worker', + app: app, + diego: true, + command: 'go go go', + metadata: {}, + ports: [1234, 5678]) end let(:builder_opts) do { @@ -290,16 +288,14 @@ module CNB context 'and theres a revision on the process' do let(:new_droplet) do - DropletModel.make( - :cnb, - app: app, - process_types: { - 'worker' => 'something else', - 'web' => 'not this' - } - ) + create(:droplet_model, :cnb, + app: app, + process_types: { + 'worker' => 'something else', + 'web' => 'not this' + }) end - let(:revision) { RevisionModel.make(app: app, droplet_guid: new_droplet.guid) } + let(:revision) { create(:revision_model, app: app, droplet_guid: new_droplet.guid) } before do process.update(revision:) diff --git a/spec/unit/lib/cloud_controller/diego/cnb/staging_action_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/cnb/staging_action_builder_spec.rb index d3242223388..e2bc1bc11c4 100644 --- a/spec/unit/lib/cloud_controller/diego/cnb/staging_action_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/cnb/staging_action_builder_spec.rb @@ -7,7 +7,7 @@ module CNB RSpec.describe StagingActionBuilder do subject(:builder) { StagingActionBuilder.new(config, staging_details, lifecycle_data) } - let(:droplet) { DropletModel.make } + let(:droplet) { create(:droplet_model) } let(:enable_declarative_asset_downloads) { false } let(:legacy_md5_buildpack_paths_enabled) { false } let(:config) do diff --git a/spec/unit/lib/cloud_controller/diego/cnb/staging_completion_handler_spec.rb b/spec/unit/lib/cloud_controller/diego/cnb/staging_completion_handler_spec.rb index 68c86f3b477..54a76d4f718 100644 --- a/spec/unit/lib/cloud_controller/diego/cnb/staging_completion_handler_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/cnb/staging_completion_handler_spec.rb @@ -40,11 +40,11 @@ module CNB subject { StagingCompletionHandler.new(build, runners) } describe '#staging_complete' do - let(:app) { AppModel.make } - let(:package) { PackageModel.make(app:) } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, app:) } let!(:build) do - BuildModel.make(app: app, package: package, state: BuildModel::STAGING_STATE).tap do |build| - CNBLifecycleDataModel.make(build:) + create(:build_model, app: app, package: package, state: BuildModel::STAGING_STATE).tap do |build| + create(:cnb_lifecycle_data_model, build:) end end let(:staging_guid) { build.guid } @@ -56,7 +56,7 @@ module CNB end describe 'success case' do - let(:droplet) { DropletModel.make(app: app, package: package, state: DropletModel::STAGING_STATE) } + let(:droplet) { create(:droplet_model, app: app, package: package, state: DropletModel::STAGING_STATE) } before do build.update(droplet:) @@ -130,7 +130,7 @@ module CNB context 'and the app\'s web process does NOT have a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -146,7 +146,7 @@ module CNB context 'and the app\'s web process has a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -163,18 +163,18 @@ module CNB context 'when a start is requested' do context 'and the app has a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', command: 'start me', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) end context 'when revisions are enabled' do - let(:old_droplet) { DropletModel.make(app: app, created_at: 5.days.ago) } + let(:old_droplet) { create(:droplet_model, app: app, created_at: 5.days.ago) } before do app.update(revisions_enabled: true) - RevisionModel.make(app_guid: app.guid, droplet_guid: old_droplet.guid) + create(:revision_model, app_guid: app.guid, droplet_guid: old_droplet.guid) end it 'creates a revision and assigns it to the processes' do @@ -222,7 +222,7 @@ module CNB context 'but the app has a user-origin sidecar of the same name' do before do - SidecarModel.make(name: 'sleepy', command: 'sleep infinity', app: app, origin: SidecarModel::ORIGIN_USER) + create(:sidecar_model, name: 'sleepy', command: 'sleep infinity', app: app, origin: SidecarModel::ORIGIN_USER) end it 'errors without materializing sidecars' do @@ -243,7 +243,7 @@ module CNB context 'when the app does not have a start command' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED', metadata: {}) } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED', metadata: {}) } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -263,7 +263,7 @@ module CNB context 'when updating the droplet record with data from staging fails' do let(:save_error) { StandardError.new('save-error') } let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow_any_instance_of(DropletModel).to receive(:save_changes).and_raise(save_error) @@ -295,7 +295,7 @@ module CNB context 'when a start is requested' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -317,7 +317,7 @@ module CNB end it 'records a buildpack set event for all processes' do - ProcessModel.make(app: app, type: 'other') + create(:process_model, app: app, type: 'other') expect do subject.staging_complete(success_response, true) end.to change { AppUsageEvent.where(state: 'BUILDPACK_SET').count }.from(0).to(2) @@ -325,7 +325,7 @@ module CNB context 'when this is not the most recent staging result' do before do - DropletModel.make(app:, package:) + create(:droplet_model, app: app, package: package, set_as_current_droplet: false) end it 'does not assign the current droplet' do @@ -344,7 +344,7 @@ module CNB context 'when a start is not requested' do let(:with_start) { false } let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -414,7 +414,7 @@ module CNB end context 'with a malformed success message' do - let(:droplet) { DropletModel.make(app: app, package: package, state: DropletModel::STAGING_STATE) } + let(:droplet) { create(:droplet_model, app: app, package: package, state: DropletModel::STAGING_STATE) } before do build.update(droplet:) @@ -511,7 +511,7 @@ module CNB end context 'when a start is requested' do - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED') } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED') } it 'stops the web process of the app' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/docker/lifecycle_protocol_spec.rb b/spec/unit/lib/cloud_controller/diego/docker/lifecycle_protocol_spec.rb index 2a6dca3736e..24ae8bc208e 100644 --- a/spec/unit/lib/cloud_controller/diego/docker/lifecycle_protocol_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/docker/lifecycle_protocol_spec.rb @@ -10,10 +10,10 @@ module Docker subject(:lifecycle_protocol) { LifecycleProtocol.new } it_behaves_like 'a lifecycle protocol' do - let(:app) { AppModel.make } - let(:package) { PackageModel.make(:docker, app:) } - let(:droplet) { DropletModel.make(package:, app:) } - let(:process) { ProcessModel.make(app:) } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, :docker, app:) } + let(:droplet) { create(:droplet_model, package:, app:) } + let(:process) { create(:process_model, app:) } before do app.update(droplet_guid: droplet.guid) @@ -29,15 +29,15 @@ module Docker end describe '#lifecycle_data' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:package) do - PackageModel.make(:docker, - app: app, - docker_image: 'registry/image-name:latest', - docker_username: 'dockerusername', - docker_password: 'dockerpassword') + create(:package_model, :docker, + app: app, + docker_image: 'registry/image-name:latest', + docker_username: 'dockerusername', + docker_password: 'dockerpassword') end - let(:droplet) { DropletModel.make(package_guid: package.guid) } + let(:droplet) { create(:droplet_model, package_guid: package.guid) } let(:staging_details) do Diego::StagingDetails.new.tap do |details| details.staging_guid = droplet.guid @@ -56,15 +56,15 @@ module Docker describe '#desired_lrp_builder' do let(:config) { Config.new({}) } - let(:app) { AppModel.make(droplet:) } + let(:app) { create(:app_model, droplet:) } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: 'foobar' - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: 'foobar' + }) end - let(:process) { ProcessModel.make(app: app, diego: true, command: 'go go go', user: 'ContainerUser', metadata: {}) } + let(:process) { create(:process_model, app: app, diego: true, command: 'go go go', user: 'ContainerUser', metadata: {}) } let(:builder_opts) do { ports: [8080], @@ -90,8 +90,8 @@ module Docker end context 'and theres a revision on the process' do - let(:new_droplet) { DropletModel.make(:docker, app: app, docker_receipt_image: 'trololol') } - let(:revision) { RevisionModel.make(app: app, droplet_guid: new_droplet.guid) } + let(:new_droplet) { create(:droplet_model, :docker, app: app, docker_receipt_image: 'trololol', set_as_current_droplet: false) } + let(:revision) { create(:revision_model, app: app, droplet_guid: new_droplet.guid) } before do process.update(revision:) @@ -120,14 +120,14 @@ module Docker end context 'when root user is allowed' do - let(:app) { AppModel.make(:docker, { droplet: }) } + let(:app) { create(:app_model, :docker, { droplet: }) } before do TestConfig.override(allow_docker_root_user: true, additional_allowed_process_users: %w[root 0]) end context 'and the process sets the root user' do - let(:process) { ProcessModel.make(:docker, { app: app, user: 'root' }) } + let(:process) { create(:process_model, :docker, { app: app, user: 'root' }) } it 'creates a diego DesiredLrpBuilder' do expect do @@ -137,16 +137,16 @@ module Docker end context 'and the process does not set a user' do - let(:process) { ProcessModel.make(:docker, { app: }) } + let(:process) { create(:process_model, :docker, { app: }) } context 'and the droplet docker execution metadata sets the root user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"root"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego DesiredLRPBuilder' do @@ -159,11 +159,11 @@ module Docker context 'and the droplet docker execution metadata sets the 0 user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"0"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego TaskActionBuilder' do @@ -176,11 +176,11 @@ module Docker context 'and the droplet docker execution metadata does not set a user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"]}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego TaskActionBuilder' do @@ -193,23 +193,23 @@ module Docker end context 'when root user IS NOT allowed' do - let(:app) { AppModel.make(:docker, { droplet: }) } + let(:app) { create(:app_model, :docker, { droplet: }) } before do TestConfig.override(allow_docker_root_user: false, additional_allowed_process_users: %w[root 0]) end context 'and the process does not set a user' do - let(:process) { ProcessModel.make(:docker, { app: }) } + let(:process) { create(:process_model, :docker, { app: }) } context 'and the droplet docker execution metadata sets the root user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"root"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'raises an error' do @@ -222,11 +222,11 @@ module Docker context 'and the droplet docker execution metadata sets the 0 user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"0"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'raises an error' do @@ -239,11 +239,11 @@ module Docker context 'and the droplet docker execution metadata does not set a user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"]}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'raises an error' do @@ -255,7 +255,7 @@ module Docker end context 'and the process sets the root user' do - let(:process) { ProcessModel.make(:docker, { app: app, user: 'root' }) } + let(:process) { create(:process_model, :docker, { app: app, user: 'root' }) } it 'raises an error' do expect do @@ -265,7 +265,7 @@ module Docker end context 'and the process sets the 0 user' do - let(:process) { ProcessModel.make(:docker, { app: app, user: 0 }) } + let(:process) { create(:process_model, :docker, { app: app, user: 0 }) } it 'raises an error' do expect do @@ -278,8 +278,8 @@ module Docker describe '#task_action_builder' do let(:config) { Config.new({}) } - let(:droplet) { DropletModel.make(:docker, docker_receipt_image: 'repository/the-image') } - let(:task) { TaskModel.make(droplet:) } + let(:droplet) { create(:droplet_model, :docker, docker_receipt_image: 'repository/the-image') } + let(:task) { create(:task_model, droplet:) } let(:lifecycle_data) do { droplet_path: 'repository/the-image' @@ -301,17 +301,17 @@ module Docker end context 'and the task does not set a user' do - let(:app) { AppModel.make(:docker, { droplet: }) } - let(:task) { TaskModel.make(:docker, { droplet:, app: }) } + let(:app) { create(:app_model, :docker, { droplet: }) } + let(:task) { create(:task_model, :docker, { droplet:, app: }) } context 'and the droplet docker execution metadata sets the root user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"root"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego TaskActionBuilder' do @@ -324,11 +324,11 @@ module Docker context 'and the droplet docker execution metadata sets the 0 user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"0"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego TaskActionBuilder' do @@ -341,11 +341,11 @@ module Docker context 'and the droplet docker execution metadata does not set a user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"]}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'creates a diego TaskActionBuilder' do @@ -363,17 +363,17 @@ module Docker end context 'and the task does not set a user' do - let(:app) { AppModel.make(:docker, { droplet: }) } - let(:task) { TaskModel.make(:docker, { droplet:, app: }) } + let(:app) { create(:app_model, :docker, { droplet: }) } + let(:task) { create(:task_model, :docker, { droplet:, app: }) } context 'and the droplet docker execution metadata sets the root user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"root"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'raises an error' do @@ -386,11 +386,11 @@ module Docker context 'and the droplet docker execution metadata sets the 0 user' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"0"}' } let(:droplet) do - DropletModel.make(:docker, { - state: DropletModel::STAGED_STATE, - docker_receipt_image: 'the-image', - execution_metadata: droplet_execution_metadata - }) + create(:droplet_model, :docker, { + state: DropletModel::STAGED_STATE, + docker_receipt_image: 'the-image', + execution_metadata: droplet_execution_metadata + }) end it 'raises an error' do @@ -402,8 +402,8 @@ module Docker end context 'and the task sets the root user' do - let(:app) { AppModel.make(:docker, { droplet: }) } - let(:task) { TaskModel.make(:docker, { droplet: droplet, app: app, user: 'root' }) } + let(:app) { create(:app_model, :docker, { droplet: }) } + let(:task) { create(:task_model, :docker, { droplet: droplet, app: app, user: 'root' }) } it 'raises an error' do expect do @@ -413,8 +413,8 @@ module Docker end context 'and the task sets the 0 user' do - let(:app) { AppModel.make(:docker, { droplet: }) } - let(:task) { TaskModel.make(:docker, { droplet: droplet, app: app, user: '0' }) } + let(:app) { create(:app_model, :docker, { droplet: }) } + let(:task) { create(:task_model, :docker, { droplet: droplet, app: app, user: '0' }) } it 'raises an error' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/docker/staging_completion_handler_spec.rb b/spec/unit/lib/cloud_controller/diego/docker/staging_completion_handler_spec.rb index 2dc05254508..a5a33a6e8fd 100644 --- a/spec/unit/lib/cloud_controller/diego/docker/staging_completion_handler_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/docker/staging_completion_handler_spec.rb @@ -6,9 +6,9 @@ module Diego module Docker RSpec.describe StagingCompletionHandler do let(:logger) { instance_double(Steno::Logger, info: nil, error: nil, warn: nil) } - let(:app) { AppModel.make(:docker) } - let(:package) { PackageModel.make(:docker, app:) } - let!(:build) { BuildModel.make(:docker, app: app, package: package, state: BuildModel::STAGING_STATE) } + let(:app) { create(:app_model, :docker) } + let(:package) { create(:package_model, :docker, app:) } + let!(:build) { create(:build_model, :docker, app: app, package: package, state: BuildModel::STAGING_STATE) } let(:runners) { instance_double(Runners) } subject(:handler) { StagingCompletionHandler.new(build, runners) } @@ -17,7 +17,7 @@ module Docker FeatureFlag.create(name: 'diego_docker', enabled: true) allow(Steno).to receive(:logger).and_return(logger) allow(VCAP::AppLogEmitter).to receive(:emit_error) - set_current_user_as_admin(user: User.make(guid: '1234'), email: 'joe@joe.com', user_name: 'briggs') + set_current_user_as_admin(user: create(:user, guid: '1234'), email: 'joe@joe.com', user_name: 'briggs') end describe '#staging_complete' do @@ -109,7 +109,7 @@ module Docker context 'when updating the droplet table fails' do let(:save_error) { StandardError.new('save-error') } - let!(:droplet) { DropletModel.make(app:, package:, build:) } + let!(:droplet) { create(:droplet_model, app:, package:, build:) } before do allow_any_instance_of(DropletModel).to receive(:save_changes).and_raise(save_error) @@ -131,7 +131,7 @@ module Docker context 'when a start is requested' do let(:runner) { instance_double(Diego::Runner, start: nil) } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } + let!(:web_process) { create(:process_model, app: app, type: 'web') } before do allow(runners).to receive(:runner_for_process).and_return(runner) @@ -150,7 +150,7 @@ module Docker end it 'records a buildpack set event for all processes' do - ProcessModel.make(app: app, type: 'other') + create(:process_model, app: app, type: 'other') expect do subject.staging_complete(payload, true) end.to change { AppUsageEvent.where(state: 'BUILDPACK_SET').count }.to(2).from(0) @@ -158,7 +158,7 @@ module Docker context 'when this is not the most recent staging result' do before do - DropletModel.make(app: app, package: package, created_at: Time.now + 1.year) + create(:droplet_model, app: app, package: package, created_at: Time.now + 1.year, set_as_current_droplet: false) end it 'does not assign the current droplet' do @@ -337,7 +337,7 @@ module Docker end context 'when a start is requested' do - let!(:web_process) { ProcessModel.make(app: app, type: 'web', state: 'STARTED') } + let!(:web_process) { create(:process_model, app: app, type: 'web', state: 'STARTED') } it 'stops the web process of the app' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/docker/task_action_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/docker/task_action_builder_spec.rb index f40fdee9fb7..9cde2bdb127 100644 --- a/spec/unit/lib/cloud_controller/diego/docker/task_action_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/docker/task_action_builder_spec.rb @@ -17,7 +17,7 @@ module Docker }) end - let(:task) { TaskModel.make(:docker, command: command, name: 'my-task') } + let(:task) { create(:task_model, :docker, command: command, name: 'my-task') } let(:lifecycle_data) do { droplet_path: 'user/image' diff --git a/spec/unit/lib/cloud_controller/diego/egress_rules_spec.rb b/spec/unit/lib/cloud_controller/diego/egress_rules_spec.rb index 4c1d14bb6d4..53c1bc1fc6c 100644 --- a/spec/unit/lib/cloud_controller/diego/egress_rules_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/egress_rules_spec.rb @@ -6,15 +6,15 @@ module Diego subject(:egress_rules) { EgressRules.new } describe '#staging_protobuf_rules' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(space:) } before do - SecurityGroup.make(guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '8080-9090', 'destination' => '198.41.191.47/1' }], staging_default: true) - SecurityGroup.make(guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '8080,9090', 'destination' => '198.41.191.48/1', 'log' => true }], staging_default: true) - SecurityGroup.make(guid: 'guid3', rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '198.41.191.49/1' }], staging_default: true) - SecurityGroup.make(guid: 'guid4', rules: [{ 'protocol' => 'icmp', 'destination' => '1.1.1.1-2.2.2.2', 'type' => 0, 'code' => 1 }], staging_default: true) - SecurityGroup.make(guid: 'guid5', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0' }], staging_default: false) + create(:security_group, guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '8080-9090', 'destination' => '198.41.191.47/1' }], staging_default: true) + create(:security_group, guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '8080,9090', 'destination' => '198.41.191.48/1', 'log' => true }], staging_default: true) + create(:security_group, guid: 'guid3', rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '198.41.191.49/1' }], staging_default: true) + create(:security_group, guid: 'guid4', rules: [{ 'protocol' => 'icmp', 'destination' => '1.1.1.1-2.2.2.2', 'type' => 0, 'code' => 1 }], staging_default: true) + create(:security_group, guid: 'guid5', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0' }], staging_default: false) end it 'includes egress information for default staging security groups' do @@ -57,7 +57,8 @@ module Diego context 'when the app space has staging security groups' do before do - security_group = SecurityGroup.make(guid: 'guid6', rules: [{ 'protocol' => 'udp', 'ports' => '8081-9090', 'destination' => '198.41.191.50/1' }], staging_default: false) + security_group = create(:security_group, guid: 'guid6', rules: [{ 'protocol' => 'udp', 'ports' => '8081-9090', 'destination' => '198.41.191.50/1' }], + staging_default: false) security_group.add_staging_space(space) end @@ -75,7 +76,8 @@ module Diego context 'when the app space has staging security groups with the same rule as default staging' do before do - security_group = SecurityGroup.make(guid: 'guid6', rules: [{ 'protocol' => 'udp', 'ports' => '8080-9090', 'destination' => '198.41.191.47/1' }], staging_default: false) + security_group = create(:security_group, guid: 'guid6', rules: [{ 'protocol' => 'udp', 'ports' => '8080-9090', 'destination' => '198.41.191.47/1' }], + staging_default: false) security_group.add_staging_space(space) end @@ -98,9 +100,9 @@ module Diego let(:sg_for_space_rules) { [{ 'protocol' => 'udp', 'ports' => '1010,2020', 'destination' => '198.41.191.49/1' }] } before do - SecurityGroup.make(guid: 'guid1', rules: sg_default_rules_1, running_default: true) - SecurityGroup.make(guid: 'guid2', rules: sg_default_rules_2, running_default: true) - process.space.add_security_group(SecurityGroup.make(guid: 'guid3', rules: sg_for_space_rules)) + create(:security_group, guid: 'guid1', rules: sg_default_rules_1, running_default: true) + create(:security_group, guid: 'guid2', rules: sg_default_rules_2, running_default: true) + process.space.add_security_group(create(:security_group, guid: 'guid3', rules: sg_for_space_rules)) end it 'provides the egress rules in the start message' do @@ -136,7 +138,7 @@ module Diego context 'when the app space has running security groups with the same rule as default running' do before do - security_group = SecurityGroup.make(guid: 'guid4', rules: sg_default_rules_1, running_default: false) + security_group = create(:security_group, guid: 'guid4', rules: sg_default_rules_1, running_default: false) process.space.add_security_group(security_group) end diff --git a/spec/unit/lib/cloud_controller/diego/environment_spec.rb b/spec/unit/lib/cloud_controller/diego/environment_spec.rb index 28942bd544a..93642fabd9b 100644 --- a/spec/unit/lib/cloud_controller/diego/environment_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/environment_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController::Diego RSpec.describe Environment do let(:process) { VCAP::CloudController::ProcessModelFactory.make(environment_json: environment, memory: 200) } - let!(:binding) { VCAP::CloudController::ServiceBinding.make(app: process.app, service_instance: VCAP::CloudController::ManagedServiceInstance.make(space: process.space)) } + let!(:binding) { create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) } let(:environment) do { 'APP_KEY1' => 'APP_VAL1', @@ -70,10 +70,10 @@ module VCAP::CloudController::Diego end context 'when the process has sidecars' do - let!(:sidecar0) { VCAP::CloudController::SidecarModel.make(app: process.app, name: 'my_sidecar1', command: 'athenz', memory: 10) } - let!(:sidecar1) { VCAP::CloudController::SidecarModel.make(app: process.app, name: 'my_sidecar2', command: 'newrelic', memory: 20) } - let!(:sidecar_process_type0) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar0, type: 'web') } - let!(:sidecar_process_type1) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar1, type: 'web') } + let!(:sidecar0) { create(:sidecar_model, app: process.app, name: 'my_sidecar1', command: 'athenz', memory: 10) } + let!(:sidecar1) { create(:sidecar_model, app: process.app, name: 'my_sidecar2', command: 'newrelic', memory: 20) } + let!(:sidecar_process_type0) { create(:sidecar_process_type_model, sidecar: sidecar0, type: 'web') } + let!(:sidecar_process_type1) { create(:sidecar_process_type_model, sidecar: sidecar1, type: 'web') } it 'can produce environment variables for those sidecars' do expect(Environment.new(process).as_json_for_sidecar(sidecar0)). @@ -98,12 +98,10 @@ module VCAP::CloudController::Diego context 'when a sidecar doesnt have a memory limit' do let!(:unconstrained_sidecar) do - VCAP::CloudController::SidecarModel.make( - app: process.app, - name: 'unconstrained', - command: 'consul_agent', - memory: nil - ) + create(:sidecar_model, app: process.app, + name: 'unconstrained', + command: 'consul_agent', + memory: nil) end it 'sidecar env vars inherit the main actions limit' do diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/app_buildpack_lifecycle_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/app_buildpack_lifecycle_spec.rb index f8b4d0529bd..bceee37ff27 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/app_buildpack_lifecycle_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/app_buildpack_lifecycle_spec.rb @@ -12,7 +12,7 @@ module VCAP::CloudController it_behaves_like 'a app lifecycle' describe '#create_lifecycle_data_model' do - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } it 'creates BuildpackLifecycleDataModel' do expect do @@ -34,7 +34,7 @@ module VCAP::CloudController let(:lifecycle_request_data) { { buildpacks: ['custom-bp'] } } before do - Buildpack.make(name: 'custom-bp') + create(:buildpack, name: 'custom-bp') end it 'uses the requested buildpack' do @@ -47,7 +47,7 @@ module VCAP::CloudController let(:lifecycle_request_data) { { buildpacks: ['custom-bp', 'http://buildpack.com', 'http://other.com'] } } before do - Buildpack.make(name: 'custom-bp') + create(:buildpack, name: 'custom-bp') end it 'uses all of the buildpacks' do @@ -86,8 +86,8 @@ module VCAP::CloudController end describe '#update_lifecycle_data_model' do - let(:app) { AppModel.make } - let!(:ruby_buildpack) { Buildpack.make(name: 'ruby_buildpack') } + let(:app) { create(:app_model) } + let!(:ruby_buildpack) { create(:buildpack, name: 'ruby_buildpack') } let(:lifecycle_request_data) { { buildpacks: ['http://oj.com', 'ruby_buildpack'], stack: 'sweetness' } } it 'updates the BuildpackLifecycleDataModel' do diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/app_cnb_lifecycle_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/app_cnb_lifecycle_spec.rb index 776238e5423..08e3d4701fe 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/app_cnb_lifecycle_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/app_cnb_lifecycle_spec.rb @@ -12,7 +12,7 @@ module VCAP::CloudController it_behaves_like 'a app lifecycle' describe '#create_lifecycle_data_model' do - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } it 'creates CNBLifecycleDataModel' do expect do @@ -43,7 +43,7 @@ module VCAP::CloudController let(:lifecycle_request_data) { { buildpacks: ['docker://nodejs', 'http://buildpack.com', 'http://other.com'] } } before do - Buildpack.make(name: 'custom-bp', lifecycle: 'cnb') + create(:buildpack, name: 'custom-bp', lifecycle: 'cnb') end it 'uses all of the buildpacks' do @@ -82,7 +82,7 @@ module VCAP::CloudController end describe '#update_lifecycle_data_model' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:lifecycle_request_data) { { buildpacks: ['http://oj.com', 'http://acme.com'], stack: 'sweetness' } } it 'updates the CNBLifecycleDataModel' do @@ -106,8 +106,8 @@ module VCAP::CloudController context 'with buildpacks' do before do - Buildpack.make(name: 'foo', lifecycle: 'cnb') - Buildpack.make(name: 'bar', lifecycle: 'cnb') + create(:buildpack, name: 'foo', lifecycle: 'cnb') + create(:buildpack, name: 'bar', lifecycle: 'cnb') end let(:lifecycle_request_data) { { buildpacks: ['foo', 'bar', 'docker://nodejs:latest'] } } diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb index 21b9462aa9e..7364bd5540e 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_provider_spec.rb @@ -51,7 +51,7 @@ module VCAP::CloudController end describe '#provide_for_update' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:message) { AppUpdateMessage.new(request) } context 'when lifecycle type is requested on the message' do @@ -86,7 +86,7 @@ module VCAP::CloudController let(:request) { {} } context 'the app is buildpack type' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'returns a AppBuildpackLifecycle' do expect(AppLifecycleProvider.provide_for_update(message, app)).to be_a(AppBuildpackLifecycle) @@ -94,7 +94,7 @@ module VCAP::CloudController end context 'the app is docker type' do - let(:app) { AppModel.make(:docker) } + let(:app) { create(:app_model, :docker) } it 'returns a AppDockerLifecycle' do expect(AppLifecycleProvider.provide_for_update(message, app)).to be_a(AppDockerLifecycle) diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_shared.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_shared.rb index 4166b379ca8..55afb340b54 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_shared.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/app_lifecycle_shared.rb @@ -1,5 +1,5 @@ RSpec.shared_examples_for 'a app lifecycle' do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } it 'creates a lifecycle data model' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_info_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_info_spec.rb index e02fac7d56d..f7882945503 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_info_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_info_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController subject(:info) { BuildpackInfo.new(buildpack_name_or_url, buildpack_record) } let(:buildpack_name_or_url) { buildpack_record.name.upcase } - let(:buildpack_record) { Buildpack.make } + let(:buildpack_record) { create(:buildpack) } it 'returns the correct properties' do expect(info.buildpack).to eq(buildpack_name_or_url) @@ -44,7 +44,7 @@ module VCAP::CloudController describe '#buildpack_enabled?' do context 'when the buildpack is enabled' do - let(:buildpack_record) { Buildpack.make enabled: true } + let(:buildpack_record) { create(:buildpack, enabled: true) } it 'is true' do expect(info).to be_buildpack_enabled @@ -52,7 +52,7 @@ module VCAP::CloudController end context 'when the buildpack is NOT enabled' do - let(:buildpack_record) { Buildpack.make enabled: false } + let(:buildpack_record) { create(:buildpack, enabled: false) } it 'is false' do expect(info).not_to be_buildpack_enabled diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_data_validator_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_data_validator_spec.rb index dcfba43608d..f40f5d90072 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_data_validator_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_data_validator_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe BuildpackLifecycleDataValidator do subject(:validator) { BuildpackLifecycleDataValidator.new({ stack:, buildpack_infos: }) } - let(:stack) { Stack.make } - let(:buildpack) { Buildpack.make } + let(:stack) { create(:stack) } + let(:buildpack) { create(:buildpack) } let(:buildpack_name_or_url) { buildpack.name } let(:buildpack_info) { BuildpackInfo.new(buildpack_name_or_url, buildpack) } let(:buildpack_infos) { [buildpack_info] } @@ -75,7 +75,7 @@ module VCAP::CloudController context 'when given an invalid BuildpackInfo' do let(:buildpack_infos) { [buildpack_info, BuildpackInfo.new('invalid-bp', nil)] } - let(:stack) { Stack.make(name: 'existing_stack') } + let(:stack) { create(:stack, name: 'existing_stack') } it 'includes an error for the invalid buildpack' do expect(validator).not_to be_valid diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_spec.rb index 7868b03de04..ebd9fecefd7 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/buildpack_lifecycle_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe BuildpackLifecycle do - let(:app) { AppModel.create(name: 'some-app', space: Space.make) } - let!(:package) { PackageModel.make(type: PackageModel::BITS_TYPE, app: app) } + let(:app) { AppModel.create(name: 'some-app', space: create(:space)) } + let!(:package) { create(:package_model, type: PackageModel::BITS_TYPE, app: app) } let(:staging_message) { BuildCreateMessage.new(lifecycle: { data: request_data, type: 'buildpack' }) } let(:request_data) { {} } @@ -21,12 +21,12 @@ module VCAP::CloudController end before do - Buildpack.make(name: 'cool-buildpack') - Buildpack.make(name: 'rad-buildpack') + create(:buildpack, name: 'cool-buildpack') + create(:buildpack, name: 'rad-buildpack') end it 'uses the buildpacks from the user' do - build = BuildModel.make + build = create(:build_model) expect do buildpack_lifecycle.create_lifecycle_data_model(build) @@ -40,18 +40,18 @@ module VCAP::CloudController end context 'when the user does not specify buildpacks' do - let(:app) { AppModel.make(name: 'some-app', space: Space.make) } + let(:app) { create(:app_model, name: 'some-app', space: create(:space)) } let(:request_data) { {} } context 'when the app has buildpacks' do before do - Buildpack.make(name: 'cool-buildpack') - Buildpack.make(name: 'rad-buildpack') + create(:buildpack, name: 'cool-buildpack') + create(:buildpack, name: 'rad-buildpack') app.lifecycle_data.update(buildpacks: %w[cool-buildpack rad-buildpack]) end it 'uses the buildpacks on the app' do - build = BuildModel.make + build = create(:build_model) expect do buildpack_lifecycle.create_lifecycle_data_model(build) @@ -66,7 +66,7 @@ module VCAP::CloudController context 'when the app does not have buildpacks' do it 'does not assign any buildpacks' do - build = BuildModel.make + build = create(:build_model) expect do buildpack_lifecycle.create_lifecycle_data_model(build) @@ -86,7 +86,7 @@ module VCAP::CloudController end it 'uses that stack' do - data_model = buildpack_lifecycle.create_lifecycle_data_model(BuildModel.make) + data_model = buildpack_lifecycle.create_lifecycle_data_model(create(:build_model)) expect(data_model.stack).to eq('cool-stack') end end @@ -96,18 +96,19 @@ module VCAP::CloudController context 'when the app has a stack' do before do - BuildpackLifecycleDataModel.make(app: app, stack: 'best-stack') + create(:buildpack_lifecycle_data_model, app: app, stack: 'best-stack') + app.refresh end it 'uses the stack from the app' do - data_model = buildpack_lifecycle.create_lifecycle_data_model(BuildModel.make) + data_model = buildpack_lifecycle.create_lifecycle_data_model(create(:build_model)) expect(data_model.stack).to eq('best-stack') end end context 'when the app does not have a stack' do it 'uses the default stack' do - data_model = buildpack_lifecycle.create_lifecycle_data_model(BuildModel.make) + data_model = buildpack_lifecycle.create_lifecycle_data_model(create(:build_model)) expect(data_model.stack).to eq(Stack.default.name) end end @@ -138,7 +139,8 @@ module VCAP::CloudController context 'when the user does not specify a stack' do context 'and the app has a stack' do before do - BuildpackLifecycleDataModel.make(app: app, stack: 'cooler-stack') + create(:buildpack_lifecycle_data_model, app: app, stack: 'cooler-stack') + app.refresh end it 'uses the value set on the app' do diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/cnb_lifecycle_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/cnb_lifecycle_spec.rb index 96dcac5ef86..0b1c843f75d 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/cnb_lifecycle_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/cnb_lifecycle_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe CNBLifecycle do - let(:app) { AppModel.make(:cnb, name: 'some-app') } - let!(:package) { PackageModel.make(type: PackageModel::BITS_TYPE, app: app) } + let(:app) { create(:app_model, :cnb, name: 'some-app') } + let!(:package) { create(:package_model, type: PackageModel::BITS_TYPE, app: app) } let(:staging_message) { BuildCreateMessage.new(lifecycle: { data: request_data, type: 'cnb' }) } let(:request_data) { {} } @@ -21,12 +21,12 @@ module VCAP::CloudController end before do - Buildpack.make(name: 'cool-buildpack', lifecycle: 'cnb') - Buildpack.make(name: 'rad-buildpack') + create(:buildpack, name: 'cool-buildpack', lifecycle: 'cnb') + create(:buildpack, name: 'rad-buildpack') end it 'uses the buildpacks from the user' do - build = BuildModel.make(:cnb) + build = create(:build_model, :cnb) expect do cnb_lifecycle.create_lifecycle_data_model(build) @@ -40,7 +40,7 @@ module VCAP::CloudController end context 'when the user does not specify buildpacks' do - let(:app) { AppModel.make(:cnb, name: 'some-app') } + let(:app) { create(:app_model, :cnb, name: 'some-app') } let(:request_data) { {} } context 'when the app has buildpacks' do @@ -49,7 +49,7 @@ module VCAP::CloudController end it 'uses the buildpacks on the app' do - build = BuildModel.make(:cnb) + build = create(:build_model, :cnb) expect do cnb_lifecycle.create_lifecycle_data_model(build) @@ -64,7 +64,7 @@ module VCAP::CloudController context 'when the app does not have buildpacks' do it 'does not assign any buildpacks' do - build = BuildModel.make(:cnb) + build = create(:build_model, :cnb) expect do cnb_lifecycle.create_lifecycle_data_model(build) @@ -84,13 +84,13 @@ module VCAP::CloudController end it 'uses those credentials' do - data_model = cnb_lifecycle.create_lifecycle_data_model(BuildModel.make(:cnb)) + data_model = cnb_lifecycle.create_lifecycle_data_model(create(:build_model, :cnb)) expect(data_model.credentials).to eq('{"auth": {}}') end end context 'when the user does not specify credentials' do - let(:app) { AppModel.make(:cnb, name: 'some-app', space: Space.make) } + let(:app) { create(:app_model, :cnb, name: 'some-app', space: create(:space)) } let(:request_data) { {} } before do @@ -98,7 +98,7 @@ module VCAP::CloudController end it 'uses credentials from package' do - data_model = cnb_lifecycle.create_lifecycle_data_model(BuildModel.make(:cnb)) + data_model = cnb_lifecycle.create_lifecycle_data_model(create(:build_model, :cnb)) expect(data_model.credentials).to eq('{"auth": {}}') end end @@ -109,7 +109,7 @@ module VCAP::CloudController end it 'uses that stack' do - data_model = cnb_lifecycle.create_lifecycle_data_model(BuildModel.make(:cnb)) + data_model = cnb_lifecycle.create_lifecycle_data_model(create(:build_model, :cnb)) expect(data_model.stack).to eq('cool-stack') end end @@ -119,18 +119,18 @@ module VCAP::CloudController context 'when the app has a stack' do before do - app.cnb_lifecycle_data = CNBLifecycleDataModel.make(stack: 'best-stack') + app.cnb_lifecycle_data = create(:cnb_lifecycle_data_model, stack: 'best-stack') end it 'uses the stack from the app' do - data_model = cnb_lifecycle.create_lifecycle_data_model(BuildModel.make(:cnb, app:)) + data_model = cnb_lifecycle.create_lifecycle_data_model(create(:build_model, :cnb, app:)) expect(data_model.stack).to eq('best-stack') end end context 'when the app does not have a stack' do it 'uses the default stack' do - data_model = cnb_lifecycle.create_lifecycle_data_model(BuildModel.make(:cnb, app:)) + data_model = cnb_lifecycle.create_lifecycle_data_model(create(:build_model, :cnb, app:)) expect(data_model.stack).to eq(app.lifecycle_data.stack) end end @@ -151,7 +151,7 @@ module VCAP::CloudController context 'when the user does not specify a stack' do context 'and the app has a stack' do before do - app.cnb_lifecycle_data = CNBLifecycleDataModel.make(app: app, stack: 'cooler-stack') + app.cnb_lifecycle_data = create(:cnb_lifecycle_data_model, app: app, stack: 'cooler-stack') end it 'uses the value set on the app' do diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/docker_lifecycle_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/docker_lifecycle_spec.rb index 488d57b67e6..e971d2b5fbf 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/docker_lifecycle_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/docker_lifecycle_spec.rb @@ -5,10 +5,10 @@ module VCAP::CloudController RSpec.describe DockerLifecycle do subject(:lifecycle) { DockerLifecycle.new(package, staging_message) } let(:package) do - PackageModel.make(:docker, - docker_image: 'test-image', - docker_username: 'dockerusername', - docker_password: 'dockerpassword') + create(:package_model, :docker, + docker_image: 'test-image', + docker_username: 'dockerusername', + docker_password: 'dockerpassword') end let(:staging_message) { BuildCreateMessage.new({}) } diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_provider_spec.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_provider_spec.rb index df26827758b..6c17d9662ed 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_provider_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_provider_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe LifecycleProvider do - let(:package) { PackageModel.make } + let(:package) { create(:package_model) } let(:message) { BuildCreateMessage.new(request) } context 'when lifecycle type is requested on the message' do @@ -35,10 +35,10 @@ module VCAP::CloudController context 'when lifecycle type is not requested on the message' do let(:request) { {} } - let(:package) { PackageModel.make(app_guid: app.guid) } + let(:package) { create(:package_model, app_guid: app.guid) } context 'when the app defaults to buildpack' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'returns a BuildpackLifecycle' do expect(LifecycleProvider.provide(package, message)).to be_a(BuildpackLifecycle) @@ -46,7 +46,7 @@ module VCAP::CloudController end context 'when the app defaults to docker' do - let(:app) { AppModel.make(:docker) } + let(:app) { create(:app_model, :docker) } it 'returns a DockerLifecycle' do expect(LifecycleProvider.provide(package, message)).to be_a(DockerLifecycle) @@ -54,7 +54,7 @@ module VCAP::CloudController end context 'when the app defaults to cnb' do - let(:app) { AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } it 'returns a CNBLifecycle' do expect(LifecycleProvider.provide(package, message)).to be_a(CNBLifecycle) diff --git a/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_shared.rb b/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_shared.rb index 7059cb315cd..6c49fb672a0 100644 --- a/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_shared.rb +++ b/spec/unit/lib/cloud_controller/diego/lifecycles/lifecycle_shared.rb @@ -1,5 +1,5 @@ RSpec.shared_examples_for 'a lifecycle' do - let(:build) { VCAP::CloudController::BuildModel.make } + let(:build) { create(:build_model) } it 'creates a lifecycle data model' do expect do diff --git a/spec/unit/lib/cloud_controller/diego/main_lrp_action_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/main_lrp_action_builder_spec.rb index 628d19d1eb2..2bb54b4b278 100644 --- a/spec/unit/lib/cloud_controller/diego/main_lrp_action_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/main_lrp_action_builder_spec.rb @@ -5,10 +5,8 @@ module Diego RSpec.describe MainLRPActionBuilder do describe '.build' do let(:app_model) do - AppModel.make( - droplet: DropletModel.make(state: 'STAGED'), - enable_ssh: false - ) + create(:app_model, droplet: create(:droplet_model, state: 'STAGED'), + enable_ssh: false) end before do @@ -30,20 +28,20 @@ module Diego let(:buildpack_lifecycle_data) { app_model.buildpack_lifecycle_data } let(:process) do - process = ProcessModel.make(:process, - app: app_model, - state: 'STARTED', - diego: true, - guid: 'process-guid', - type: 'web', - health_check_timeout: 12, - instances: 21, - memory: 128, - disk_quota: 256, - command: command, - file_descriptors: 32, - health_check_type: 'port', - enable_ssh: false) + process = create(:process_model, :process, + app: app_model, + state: 'STARTED', + diego: true, + guid: 'process-guid', + type: 'web', + health_check_timeout: 12, + instances: 21, + memory: 128, + disk_quota: 256, + command: command, + file_descriptors: 32, + health_check_type: 'port', + enable_ssh: false) process.this.update(updated_at: Time.at(2)) process.reload process.desired_droplet.execution_metadata = execution_metadata @@ -104,7 +102,7 @@ module Diego end context 'revisions' do - let(:revision) { RevisionModel.make(app: app_model, version: 99) } + let(:revision) { create(:revision_model, app: app_model, version: 99) } before do process.revision = revision @@ -162,8 +160,8 @@ module Diego end context 'when a process has a sidecar' do - let!(:sidecar) { SidecarModel.make(app: app_model, name: 'my_sidecar', command: 'athenz', memory: 10) } - let!(:sidecar_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') } + let!(:sidecar) { create(:sidecar_model, app: app_model, name: 'my_sidecar', command: 'athenz', memory: 10) } + let!(:sidecar_process_type) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') } it 'includes the sidecar process as a codependent run action' do run_actions = MainLRPActionBuilder.build(process, lrp_builder, ssh_key). @@ -183,13 +181,13 @@ module Diego end context 'when a process has multiple sidecars' do - let!(:sidecar1) { SidecarModel.make(app: app_model, name: 'my_sidecar1', command: 'athenz') } - let!(:sidecar2) { SidecarModel.make(app: app_model, name: 'my_sidecar2', command: 'newrelic') } - let!(:sidecar3) { SidecarModel.make(app: app_model, name: 'unused_sidecar', command: 'envoy') } - let!(:sidecar_process_type1) { SidecarProcessTypeModel.make(sidecar: sidecar1, type: 'web') } - let!(:sidecar_process_type2) { SidecarProcessTypeModel.make(sidecar: sidecar2, type: 'web') } - let!(:unused_process_type2a) { SidecarProcessTypeModel.make(sidecar: sidecar2, type: 'worker') } - let!(:irrelevant_sidecar_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar3, type: 'worker') } + let!(:sidecar1) { create(:sidecar_model, app: app_model, name: 'my_sidecar1', command: 'athenz') } + let!(:sidecar2) { create(:sidecar_model, app: app_model, name: 'my_sidecar2', command: 'newrelic') } + let!(:sidecar3) { create(:sidecar_model, app: app_model, name: 'unused_sidecar', command: 'envoy') } + let!(:sidecar_process_type1) { create(:sidecar_process_type_model, sidecar: sidecar1, type: 'web') } + let!(:sidecar_process_type2) { create(:sidecar_process_type_model, sidecar: sidecar2, type: 'web') } + let!(:unused_process_type2a) { create(:sidecar_process_type_model, sidecar: sidecar2, type: 'worker') } + let!(:irrelevant_sidecar_process_type) { create(:sidecar_process_type_model, sidecar: sidecar3, type: 'worker') } it 'includes the sidecar process as a codependent run action' do run_actions = MainLRPActionBuilder.build(process, lrp_builder, ssh_key). diff --git a/spec/unit/lib/cloud_controller/diego/messenger_spec.rb b/spec/unit/lib/cloud_controller/diego/messenger_spec.rb index d5bbc548e72..ac0af92cf0a 100644 --- a/spec/unit/lib/cloud_controller/diego/messenger_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/messenger_spec.rb @@ -20,8 +20,8 @@ module Diego describe '#send_stage_request' do let(:statsd_updater) { instance_double(VCAP::CloudController::Metrics::StatsdUpdater) } let(:prometheus_updater) { instance_double(VCAP::CloudController::Metrics::PrometheusUpdater) } - let(:package) { PackageModel.make } - let(:droplet) { DropletModel.make(package:) } + let(:package) { create(:package_model) } + let(:droplet) { create(:droplet_model, package:) } let(:staging_guid) { droplet.guid } let(:staging_details) do VCAP::CloudController::Diego::StagingDetails.new.tap do |sd| diff --git a/spec/unit/lib/cloud_controller/diego/protocol/app_volume_mounts_spec.rb b/spec/unit/lib/cloud_controller/diego/protocol/app_volume_mounts_spec.rb index 701a7090d0c..6e7c4d7dfd9 100644 --- a/spec/unit/lib/cloud_controller/diego/protocol/app_volume_mounts_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/protocol/app_volume_mounts_spec.rb @@ -7,9 +7,9 @@ class Protocol RSpec.describe AppVolumeMounts do subject(:mounts) { AppVolumeMounts.new(app) } - let(:app) { AppModel.make } - let(:service_instance) { ServiceInstance.make(space: app.space) } - let(:service_instance2) { ServiceInstance.make(space: app.space) } + let(:app) { create(:app_model) } + let(:service_instance) { create(:service_instance, space: app.space) } + let(:service_instance2) { create(:service_instance, space: app.space) } let(:multiple_volume_mounts) do [ @@ -56,8 +56,8 @@ class Protocol end it "is a flat array of all volume mounts in the app's service bindings" do - ServiceBinding.make(app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) - ServiceBinding.make(app: app, service_instance: service_instance2, volume_mounts: single_volume_mount) + create(:service_binding, app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) + create(:service_binding, app: app, service_instance: service_instance2, volume_mounts: single_volume_mount) expect(mounts.as_json).to contain_exactly({ 'container_dir' => '/data/images', @@ -94,8 +94,8 @@ class Protocol end it 'does not include empty entries for service bindings with no volume mounts' do - ServiceBinding.make(app: app, service_instance: service_instance, volume_mounts: single_volume_mount) - ServiceBinding.make(app: app, service_instance: service_instance2) + create(:service_binding, app: app, service_instance: service_instance, volume_mounts: single_volume_mount) + create(:service_binding, app: app, service_instance: service_instance2) expect(mounts.as_json).to contain_exactly({ 'container_dir' => '/data/videos', diff --git a/spec/unit/lib/cloud_controller/diego/protocol/container_network_info_spec.rb b/spec/unit/lib/cloud_controller/diego/protocol/container_network_info_spec.rb index e24aa950832..c91a8f84e5b 100644 --- a/spec/unit/lib/cloud_controller/diego/protocol/container_network_info_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/protocol/container_network_info_spec.rb @@ -4,11 +4,11 @@ module VCAP::CloudController module Diego class Protocol RSpec.describe ContainerNetworkInfo do - let(:app) { AppModel.make } - let!(:web_process) { ProcessModel.make(app: app, type: 'web') } - let!(:deploying_web_process) { ProcessModel.make(app: app, type: 'web') } - let!(:other_process) { ProcessModel.make(app: app, ports: [8765], type: 'meow') } - let!(:no_exposed_port_process) { ProcessModel.make(app: app, type: 'woof') } + let(:app) { create(:app_model) } + let!(:web_process) { create(:process_model, app: app, type: 'web') } + let!(:deploying_web_process) { create(:process_model, app: app, type: 'web') } + let!(:other_process) { create(:process_model, app: app, ports: [8765], type: 'meow') } + let!(:no_exposed_port_process) { create(:process_model, app: app, type: 'woof') } let!(:docker_process) { ProcessModelFactory.make(app: app, type: 'docker', ports: [1111, 2222]) } let(:ports_str) { '1111,2222,8080,8765' } let(:container_workload) { 'im-an-app!' } diff --git a/spec/unit/lib/cloud_controller/diego/protocol/routing_info_spec.rb b/spec/unit/lib/cloud_controller/diego/protocol/routing_info_spec.rb index d74502cf615..7148c93c8d7 100644 --- a/spec/unit/lib/cloud_controller/diego/protocol/routing_info_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/protocol/routing_info_spec.rb @@ -8,16 +8,16 @@ class Protocol subject(:routing_info) { RoutingInfo.new(process) } let(:ri) { routing_info.routing_info } - let(:org) { Organization.make } - let(:space_quota) { SpaceQuotaDefinition.make(organization: org) } - let(:space) { Space.make(organization: org, space_quota_definition: space_quota) } - let(:domain) { PrivateDomain.make(name: 'mydomain.com', owning_organization: org) } + let(:org) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, organization: org) } + let(:space) { create(:space, organization: org, space_quota_definition: space_quota) } + let(:domain) { create(:private_domain, name: 'mydomain.com', owning_organization: org) } let(:process) { ProcessModelFactory.make(space: space, diego: true) } - let(:route_without_service) { Route.make(host: 'host2', domain: domain, space: space, path: '/my%20path') } + let(:route_without_service) { create(:route, host: 'host2', domain: domain, space: space, path: '/my%20path') } let(:route_with_service) do - route = Route.make(host: 'myhost', domain: domain, space: space, path: '/my%20path') - service_instance = ManagedServiceInstance.make(:routing, space:) - RouteBinding.make(route:, service_instance:) + route = create(:route, host: 'myhost', domain: domain, space: space, path: '/my%20path') + service_instance = create(:managed_service_instance, :routing, space:) + create(:route_binding, route:, service_instance:) route end @@ -42,8 +42,9 @@ class Protocol context 'http routes' do context 'with protocol' do before do - RouteMappingModel.make(app: process.app, route: route_with_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED, protocol: 'http2') - RouteMappingModel.make(app: process.app, route: route_without_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, route: route_with_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED, + protocol: 'http2') + create(:route_mapping_model, app: process.app, route: route_without_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) end it 'returns the mapped http routes associated with the app with protocol' do @@ -59,8 +60,8 @@ class Protocol context 'with no app ports specified in route mapping' do before do - RouteMappingModel.make(app: process.app, route: route_with_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) - RouteMappingModel.make(app: process.app, route: route_without_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, route: route_with_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, route: route_without_service, process_type: process.type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) end context 'and app has no ports' do @@ -90,17 +91,15 @@ class Protocol end describe 'docker ports' do - let(:parent_app) { AppModel.make(:docker, space:) } - let(:process) { ProcessModel.make(app: parent_app, diego: true, state: ProcessModel::STARTED) } + let(:parent_app) { create(:app_model, :docker, space:) } + let(:process) { create(:process_model, app: parent_app, diego: true, state: ProcessModel::STARTED) } let(:droplet) do - DropletModel.make( - :docker, - state: DropletModel::STAGED_STATE, - app: parent_app, - execution_metadata: execution_metadata, - docker_receipt_image: 'foo/bar', - package: PackageModel.make(app: parent_app) - ) + create(:droplet_model, :docker, + state: DropletModel::STAGED_STATE, + app: parent_app, + execution_metadata: execution_metadata, + docker_receipt_image: 'foo/bar', + package: create(:package_model, app: parent_app)) end before do @@ -137,7 +136,7 @@ class Protocol context 'when there is a newer droplet (e.g. due to a canceled deployment)' do before do - DropletModel.make(app: parent_app, created_at: droplet.created_at + 1) + create(:droplet_model, app: parent_app, created_at: droplet.created_at + 1, set_as_current_droplet: false) end it 'still uses the correct docker port' do @@ -150,7 +149,7 @@ class Protocol context 'with app port specified in route mapping' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [9090]) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: route_with_service, app_port: 9090) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: route_with_service, app_port: 9090) } it 'returns the app port in routing info' do expected_http = [ @@ -164,8 +163,8 @@ class Protocol context 'with multiple route mapping to same route with different app ports' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [8080, 9090]) } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: route_with_service, app_port: 8080) } - let!(:route_mapping2) { RouteMappingModel.make(app: process.app, route: route_with_service, app_port: 9090) } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: route_with_service, app_port: 8080) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, route: route_with_service, app_port: 9090) } it 'returns the app port in routing info' do expected_http = [ @@ -180,8 +179,8 @@ class Protocol context 'with multiple route mapping to different route with same app port' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [9090]) } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: route_without_service, app_port: 9090) } - let!(:route_mapping2) { RouteMappingModel.make(app: process.app, route: route_with_service, app_port: 9090) } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: route_without_service, app_port: 9090) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, route: route_with_service, app_port: 9090) } it 'returns the app port in routing info' do expected_http = [ @@ -196,8 +195,8 @@ class Protocol context 'with multiple route mapping to different route with different app ports' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [8080, 9090]) } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: route_without_service, app_port: 8080) } - let!(:route_mapping2) { RouteMappingModel.make(app: process.app, route: route_with_service, app_port: 9090) } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: route_without_service, app_port: 8080) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, route: route_with_service, app_port: 9090) } it 'returns the app port in routing info' do expected_http = [ @@ -212,8 +211,8 @@ class Protocol context 'with multiple route mapping to the same route with different apps' do let(:process) { ProcessModelFactory.make(space: space, diego: true) } let(:process2) { ProcessModelFactory.make(space: space, diego: true) } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: route_without_service) } - let!(:route_mapping2) { RouteMappingModel.make(app: process2.app, route: route_without_service) } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: route_without_service) } + let!(:route_mapping2) { create(:route_mapping_model, app: process2.app, route: route_without_service) } it 'returns only one route without duplications' do expected_http = { 'hostname' => route_without_service.uri, 'port' => 8080, 'protocol' => 'http1', 'options' => {} } @@ -225,9 +224,9 @@ class Protocol context 'when using a router group' do let(:router_group_type) { 'http' } - let(:domain) { SharedDomain.make(name: 'httpdomain.com', router_group_guid: router_group_guid) } - let(:http_route) { Route.make(domain: domain, space: space, port: 8080) } - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: http_route) } + let(:domain) { create(:shared_domain, name: 'httpdomain.com', router_group_guid: router_group_guid) } + let(:http_route) { create(:route, domain: domain, space: space, port: 8080) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: http_route) } it 'returns the router group guid in the http routing info' do expect(ri.keys).to contain_exactly('http_routes', 'internal_routes') @@ -240,11 +239,11 @@ class Protocol end context 'when internal routes exist' do - let(:shared_internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let!(:internal_route) { Route.make(host: 'myroute', domain: shared_internal_domain) } + let(:shared_internal_domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let!(:internal_route) { create(:route, host: 'myroute', domain: shared_internal_domain) } before do - RouteMappingModel.make(app: process.app, route: internal_route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: internal_route, process_type: process.type) end it 'does not include the internal routes' do @@ -253,12 +252,12 @@ class Protocol end context 'tcp routes' do - let!(:domain) { SharedDomain.make(name: 'tcpdomain.com', router_group_guid: 'router-group-guid-1') } + let!(:domain) { create(:shared_domain, name: 'tcpdomain.com', router_group_guid: 'router-group-guid-1') } let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [9090]) } - let(:tcp_route) { Route.make(domain: domain, space: space, port: 52_000) } + let(:tcp_route) { create(:route, domain: domain, space: space, port: 52_000) } context 'with only one app port mapped to route' do - let!(:route_mapping) { RouteMappingModel.make(app: process.app, route: tcp_route, app_port: 9090) } + let!(:route_mapping) { create(:route_mapping_model, app: process.app, route: tcp_route, app_port: 9090) } it 'returns the app port in routing info' do expected_tcp = [ @@ -272,8 +271,8 @@ class Protocol context 'with multiple app ports Îmapped to same route' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [9090, 5555]) } - let!(:route_mapping_1) { RouteMappingModel.make(app: process.app, route: tcp_route, app_port: 9090) } - let!(:route_mapping_2) { RouteMappingModel.make(app: process.app, route: tcp_route, app_port: 5555) } + let!(:route_mapping_1) { create(:route_mapping_model, app: process.app, route: tcp_route, app_port: 9090) } + let!(:route_mapping_2) { create(:route_mapping_model, app: process.app, route: tcp_route, app_port: 5555) } it 'returns the app ports in routing info' do expected_tcp = [ @@ -287,10 +286,10 @@ class Protocol end context 'with same app port mapped to different routes' do - let(:tcp_route_1) { Route.make(domain: domain, space: space, port: 52_000) } - let(:tcp_route_2) { Route.make(domain: domain, space: space, port: 52_001) } - let!(:route_mapping_1) { RouteMappingModel.make(app: process.app, route: tcp_route_1, app_port: 9090) } - let!(:route_mapping_2) { RouteMappingModel.make(app: process.app, route: tcp_route_2, app_port: 9090) } + let(:tcp_route_1) { create(:route, domain: domain, space: space, port: 52_000) } + let(:tcp_route_2) { create(:route, domain: domain, space: space, port: 52_001) } + let!(:route_mapping_1) { create(:route_mapping_model, app: process.app, route: tcp_route_1, app_port: 9090) } + let!(:route_mapping_2) { create(:route_mapping_model, app: process.app, route: tcp_route_2, app_port: 9090) } it 'returns the app ports in routing info' do expected_routes = [ @@ -305,10 +304,10 @@ class Protocol context 'with different app ports mapped to different routes' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [9090, 5555]) } - let(:tcp_route_1) { Route.make(domain: domain, space: space, port: 52_000) } - let(:tcp_route_2) { Route.make(domain: domain, space: space, port: 52_001) } - let!(:route_mapping_1) { RouteMappingModel.make(app: process.app, route: tcp_route_1, app_port: 9090) } - let!(:route_mapping_2) { RouteMappingModel.make(app: process.app, route: tcp_route_2, app_port: 5555) } + let(:tcp_route_1) { create(:route, domain: domain, space: space, port: 52_000) } + let(:tcp_route_2) { create(:route, domain: domain, space: space, port: 52_001) } + let!(:route_mapping_1) { create(:route_mapping_model, app: process.app, route: tcp_route_1, app_port: 9090) } + let!(:route_mapping_2) { create(:route_mapping_model, app: process.app, route: tcp_route_2, app_port: 5555) } it 'returns the multiple route mappings in routing info' do expected_routes = [ @@ -324,8 +323,8 @@ class Protocol context 'with multiple route mappings to the same route with different apps' do let(:process) { ProcessModelFactory.make(space: space, diego: true) } let(:process2) { ProcessModelFactory.make(space: space, diego: true) } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: tcp_route, app_port: 9090) } - let!(:route_mapping2) { RouteMappingModel.make(app: process2.app, route: tcp_route, app_port: 9090) } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: tcp_route, app_port: 9090) } + let!(:route_mapping2) { create(:route_mapping_model, app: process2.app, route: tcp_route, app_port: 9090) } it 'returns only one route without duplications' do expected_route = { 'router_group_guid' => domain.router_group_guid, 'external_port' => tcp_route.port, 'container_port' => 9090 } @@ -337,12 +336,12 @@ class Protocol end context 'internal routes' do - let(:shared_internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) } + let(:shared_internal_domain) { create(:shared_domain, name: 'apps.internal', internal: true) } - let!(:internal_route) { Route.make(host: 'myroute', domain: shared_internal_domain) } + let!(:internal_route) { create(:route, host: 'myroute', domain: shared_internal_domain) } before do - RouteMappingModel.make(app: process.app, route: internal_route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: internal_route, process_type: process.type) end it 'returns multiple internal route hostnames' do @@ -362,15 +361,15 @@ class Protocol context 'with both http and tcp routes' do let(:process) { ProcessModelFactory.make(space: space, diego: true, ports: [8080, 9090, 5555]) } - let(:http_domain) { SharedDomain.make(name: 'httpdomain.com', router_group_guid: router_group_guid_1) } - let(:http_route) { Route.make(domain: domain, space: space, port: 8080) } + let(:http_domain) { create(:shared_domain, name: 'httpdomain.com', router_group_guid: router_group_guid_1) } + let(:http_route) { create(:route, domain: domain, space: space, port: 8080) } - let(:tcp_domain) { SharedDomain.make(name: 'tcpdomain.com', router_group_guid: router_group_guid_2) } - let(:tcp_route) { Route.make(domain: tcp_domain, space: space, port: 52_000) } + let(:tcp_domain) { create(:shared_domain, name: 'tcpdomain.com', router_group_guid: router_group_guid_2) } + let(:tcp_route) { create(:route, domain: tcp_domain, space: space, port: 52_000) } - let!(:route_mapping_1) { RouteMappingModel.make(app: process.app, route: http_route, app_port: 8080) } - let!(:route_mapping_2) { RouteMappingModel.make(app: process.app, route: http_route, app_port: 9090) } - let!(:tcp_route_mapping) { RouteMappingModel.make(app: process.app, route: tcp_route, app_port: 5555) } + let!(:route_mapping_1) { create(:route_mapping_model, app: process.app, route: http_route, app_port: 8080) } + let!(:route_mapping_2) { create(:route_mapping_model, app: process.app, route: http_route, app_port: 9090) } + let!(:tcp_route_mapping) { create(:route_mapping_model, app: process.app, route: tcp_route, app_port: 5555) } let(:router_group_guid_1) { 'router-group-guid-1' } let(:router_group_guid_2) { 'router-group-guid-2' } diff --git a/spec/unit/lib/cloud_controller/diego/reporters/instances_stats_reporter_spec.rb b/spec/unit/lib/cloud_controller/diego/reporters/instances_stats_reporter_spec.rb index 925f146fe29..e1100346f8e 100644 --- a/spec/unit/lib/cloud_controller/diego/reporters/instances_stats_reporter_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/reporters/instances_stats_reporter_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController module Diego RSpec.describe InstancesStatsReporter do subject(:instances_reporter) { InstancesStatsReporter.new(bbs_instances_client, log_cache_client) } - let(:app) { AppModel.make } - let(:process) { ProcessModel.make(instances: desired_instances, app: app, state: ProcessModel::STARTED) } + let(:app) { create(:app_model) } + let(:process) { create(:process_model, instances: desired_instances, app: app, state: ProcessModel::STARTED) } let(:desired_instances) { 1 } let(:bbs_instances_client) { instance_double(BbsInstancesClient) } let(:log_cache_client) { instance_double(Logcache::ContainerMetricBatcher) } @@ -799,7 +799,7 @@ def make_actual_lrp(instance_guid:, index:, state:, error:, since:) end context 'with multiple processes' do - let(:second_process) { ProcessModel.make(state: ProcessModel::STARTED) } + let(:second_process) { create(:process_model, state: ProcessModel::STARTED) } let(:second_process_actual_lrp_0) do ::Diego::Bbs::Models::ActualLRP.new( actual_lrp_key: ::Diego::Bbs::Models::ActualLRPKey.new(process_guid: second_process.guid + 'version', index: 0), diff --git a/spec/unit/lib/cloud_controller/diego/runner_spec.rb b/spec/unit/lib/cloud_controller/diego/runner_spec.rb index 415627db103..f589f33ee65 100644 --- a/spec/unit/lib/cloud_controller/diego/runner_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/runner_spec.rb @@ -95,7 +95,7 @@ module Diego let(:process) { ProcessModelFactory.make(state: 'STARTED') } before do - BuildModel.make(app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) + create(:build_model, app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) process.reload end @@ -130,7 +130,7 @@ module Diego let(:process) { ProcessModelFactory.make(state: 'STARTED') } before do - BuildModel.make(app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) + create(:build_model, app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) process.reload end diff --git a/spec/unit/lib/cloud_controller/diego/service_binding_files_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/service_binding_files_builder_spec.rb index 6d17c1f95ef..e0648c4dffb 100644 --- a/spec/unit/lib/cloud_controller/diego/service_binding_files_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/service_binding_files_builder_spec.rb @@ -22,15 +22,13 @@ module VCAP::CloudController::Diego let!(:newer_binding) do # Create binding eagerly to ensure it exists when ServiceBindingFilesBuilder queries app.service_bindings - VCAP::CloudController::ServiceBinding.make( - name: binding_name, - app: app, - credentials: credentials, - service_instance: instance, - syslog_drain_url: syslog_drain_url, - volume_mounts: volume_mounts, - created_at: newer_binding_created_at - ) + create(:service_binding, name: binding_name, + app: app, + credentials: credentials, + service_instance: instance, + syslog_drain_url: syslog_drain_url, + volume_mounts: volume_mounts, + created_at: newer_binding_created_at) end it 'uses the most recent binding' do @@ -100,11 +98,11 @@ module VCAP::CloudController::Diego end RSpec.describe ServiceBindingFilesBuilder do - let(:space) { VCAP::CloudController::Space.make } - let(:app) { VCAP::CloudController::AppModel.make(space:) } - let(:service) { VCAP::CloudController::Service.make(label: 'service-name', tags: %w[a-service-tag another-service-tag]) } - let(:plan) { VCAP::CloudController::ServicePlan.make(name: 'plan-name', service: service) } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(name: 'instance-name', space: space, tags: %w[an-instance-tag another-instance-tag], service_plan: plan) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } + let(:service) { create(:service, label: 'service-name', tags: %w[a-service-tag another-service-tag]) } + let(:plan) { create(:service_plan, name: 'plan-name', service: service) } + let(:instance) { create(:managed_service_instance, name: 'instance-name', space: space, tags: %w[an-instance-tag another-instance-tag], service_plan: plan) } let(:binding_name) { 'binding-name' } let(:binding_created_at) { Time.now.utc - 3.minutes } let(:credentials) do @@ -122,15 +120,13 @@ module VCAP::CloudController::Diego let(:volume_mounts) { nil } let!(:binding) do # Create binding eagerly to ensure it exists when ServiceBindingFilesBuilder queries app.service_bindings - VCAP::CloudController::ServiceBinding.make( - name: binding_name, - app: app, - credentials: credentials, - service_instance: instance, - syslog_drain_url: syslog_drain_url, - volume_mounts: volume_mounts, - created_at: binding_created_at - ) + create(:service_binding, name: binding_name, + app: app, + credentials: credentials, + service_instance: instance, + syslog_drain_url: syslog_drain_url, + volume_mounts: volume_mounts, + created_at: binding_created_at) end let(:directory) { 'binding-name' } @@ -238,7 +234,7 @@ module VCAP::CloudController::Diego end context 'when the instance is user-provided' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(name: 'upsi', space: space, tags: %w[an-upsi-tag another-upsi-tag]) } + let(:instance) { create(:user_provided_service_instance, name: 'upsi', space: space, tags: %w[an-upsi-tag another-upsi-tag]) } include_examples 'mapping of type and provider', 'user-provided' include_examples 'mapping of binding metadata' @@ -266,10 +262,8 @@ module VCAP::CloudController::Diego let(:binding_name) { 'duplicate-name' } before do - VCAP::CloudController::ServiceBinding.make(app: app, - service_instance: VCAP::CloudController::UserProvidedServiceInstance.make( - space: app.space, name: 'duplicate-name' - )) + create(:service_binding, app: app, + service_instance: create(:user_provided_service_instance, space: app.space, name: 'duplicate-name')) end it 'raises an exception' do diff --git a/spec/unit/lib/cloud_controller/diego/stager_spec.rb b/spec/unit/lib/cloud_controller/diego/stager_spec.rb index 75a42539f0c..3e24d8fb2e1 100644 --- a/spec/unit/lib/cloud_controller/diego/stager_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/stager_spec.rb @@ -10,10 +10,10 @@ module Diego let(:messenger) { instance_double(Diego::Messenger) } let(:protocol) { instance_double(Diego::Protocol) } - let(:package) { PackageModel.make } + let(:package) { create(:package_model) } let(:config) { TestConfig.config_instance } - let(:build) { BuildModel.make(package_guid: package.guid) } - let!(:lifecycle_data_model) { BuildpackLifecycleDataModel.make(build:) } + let(:build) { create(:build_model, package_guid: package.guid) } + let!(:lifecycle_data_model) { create(:buildpack_lifecycle_data_model, build:) } let(:environment_variables) { { 'nightshade_vegetable' => 'potato' } } let(:buildpack_completion_handler) { instance_double(Diego::Buildpack::StagingCompletionHandler) } @@ -121,7 +121,7 @@ module Diego let(:staging_response) { {} } context 'buildpack' do - let(:build) { BuildModel.make } + let(:build) { create(:build_model) } it 'delegates to a buildpack staging completion handler' do stager.staging_complete(build, staging_response) @@ -131,7 +131,7 @@ module Diego end context 'docker' do - let(:build) { BuildModel.make(:docker) } + let(:build) { create(:build_model, :docker) } it 'delegates to a docker staging completion handler' do stager.staging_complete(build, staging_response) @@ -141,7 +141,7 @@ module Diego end context 'cnb' do - let(:build) { BuildModel.make(:cnb) } + let(:build) { create(:build_model, :cnb) } it 'delegates to a cnb staging completion handler' do stager.staging_complete(build, staging_response) diff --git a/spec/unit/lib/cloud_controller/diego/staging_request_spec.rb b/spec/unit/lib/cloud_controller/diego/staging_request_spec.rb index 02c0eed23f1..3ee3780ef1c 100644 --- a/spec/unit/lib/cloud_controller/diego/staging_request_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/staging_request_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Diego RSpec.describe StagingRequest do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:process) do VCAP::CloudController::ProcessModelFactory.make( stack: VCAP::CloudController::Stack.default, diff --git a/spec/unit/lib/cloud_controller/diego/task_completion_callback_generator_spec.rb b/spec/unit/lib/cloud_controller/diego/task_completion_callback_generator_spec.rb index e3fd56ece30..fa2fa0bb930 100644 --- a/spec/unit/lib/cloud_controller/diego/task_completion_callback_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/task_completion_callback_generator_spec.rb @@ -7,7 +7,7 @@ module Diego subject(:generator) { TaskCompletionCallbackGenerator.new(TestConfig.config_instance) } describe '#generate' do - let(:task) { TaskModel.make } + let(:task) { create(:task_model) } let(:kubernetes_config) { nil } let(:task_config) do { diff --git a/spec/unit/lib/cloud_controller/diego/task_completion_handler_spec.rb b/spec/unit/lib/cloud_controller/diego/task_completion_handler_spec.rb index 17d483588f2..11e02dc89a3 100644 --- a/spec/unit/lib/cloud_controller/diego/task_completion_handler_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/task_completion_handler_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Diego RSpec.describe TaskCompletionHandler do - let!(:task) { TaskModel.make(:pending) } + let!(:task) { create(:task_model, :pending) } let(:handler) { TaskCompletionHandler.new } let(:logger) { instance_double(Steno::Logger, info: nil, error: nil, warn: nil) } diff --git a/spec/unit/lib/cloud_controller/diego/task_environment_spec.rb b/spec/unit/lib/cloud_controller/diego/task_environment_spec.rb index fb336b0d777..48bc645d0ba 100644 --- a/spec/unit/lib/cloud_controller/diego/task_environment_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/task_environment_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController::Diego RSpec.describe TaskEnvironment do let(:app_env_vars) { { 'ENV_VAR_2' => 'jeff' } } - let(:app) { VCAP::CloudController::AppModel.make(environment_variables: app_env_vars, name: 'utako') } - let(:task) { VCAP::CloudController::TaskModel.make(name: 'my-task', command: 'echo foo', memory_in_mb: 1024) } + let(:app) { create(:app_model, environment_variables: app_env_vars, name: 'utako') } + let(:task) { create(:task_model, name: 'my-task', command: 'echo foo', memory_in_mb: 1024) } let(:space) { app.space } let(:staging_disk_in_mb) { 512 } - let(:service) { VCAP::CloudController::Service.make(label: 'elephantsql-n/a') } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } - let!(:service_binding) { VCAP::CloudController::ServiceBinding.make(app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } + let(:service) { create(:service, label: 'elephantsql-n/a') } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } + let!(:service_binding) { create(:service_binding, app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } let(:expected_vcap_application) do { @@ -79,7 +79,7 @@ module VCAP::CloudController::Diego end context 'when the task is for a buildpack app' do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } it 'sets the LANG environment variable' do constructed_envs = TaskEnvironment.new(app, task, space).build @@ -88,7 +88,7 @@ module VCAP::CloudController::Diego end context 'when the task is for a docker app' do - let(:app) { VCAP::CloudController::AppModel.make(:docker) } + let(:app) { create(:app_model, :docker) } it 'does not set the LANG environment variable' do constructed_envs = TaskEnvironment.new(app, task, space).build @@ -97,7 +97,7 @@ module VCAP::CloudController::Diego end context 'when the task is for a cnb app' do - let(:app) { VCAP::CloudController::AppModel.make(:cnb) } + let(:app) { create(:app_model, :cnb) } it 'sets the LANG environment variable' do constructed_envs = TaskEnvironment.new(app, task, space).build @@ -128,12 +128,12 @@ module VCAP::CloudController::Diego users: nil } end - let(:route1) { VCAP::CloudController::Route.make(space:) } - let(:route2) { VCAP::CloudController::Route.make(space:) } + let(:route1) { create(:route, space:) } + let(:route2) { create(:route, space:) } before do - VCAP::CloudController::RouteMappingModel.make(app: app, route: route1) - VCAP::CloudController::RouteMappingModel.make(app: app, route: route2) + create(:route_mapping_model, app: app, route: route1) + create(:route_mapping_model, app: app, route: route2) end it 'includes the uris as part of vcap application' do diff --git a/spec/unit/lib/cloud_controller/diego/task_environment_variable_collector_spec.rb b/spec/unit/lib/cloud_controller/diego/task_environment_variable_collector_spec.rb index caff5694003..41bc0dbe106 100644 --- a/spec/unit/lib/cloud_controller/diego/task_environment_variable_collector_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/task_environment_variable_collector_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController module Diego RSpec.describe TaskEnvironmentVariableCollector do - let(:task) { TaskModel.make command: command, name: 'my-task' } + let(:task) { create(:task_model, command: command, name: 'my-task') } let(:command) { 'echo "hello"' } let(:environment_json) { { 'RIZ' => 'shirt' } } diff --git a/spec/unit/lib/cloud_controller/diego/task_recipe_builder_spec.rb b/spec/unit/lib/cloud_controller/diego/task_recipe_builder_spec.rb index 1ca13d4650b..9daaf547724 100644 --- a/spec/unit/lib/cloud_controller/diego/task_recipe_builder_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/task_recipe_builder_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController module Diego RSpec.describe TaskRecipeBuilder do subject(:task_recipe_builder) { TaskRecipeBuilder.new } - let(:org) { Organization.make(name: 'MyOrg', guid: 'org-guid') } - let(:space) { Space.make(name: 'MySpace', guid: 'space-guid', organization: org) } - let(:app) { AppModel.make(name: 'MyApp', guid: 'banana-guid', space: space) } + let(:org) { create(:organization, name: 'MyOrg', guid: 'org-guid') } + let(:space) { create(:space, name: 'MySpace', guid: 'space-guid', organization: org) } + let(:app) { create(:app_model, name: 'MyApp', guid: 'banana-guid', space: space) } shared_examples 'IncompatibleBindings error handling' do let(:incompatible_bindings_error) { VCAP::CloudController::Diego::ServiceBindingFilesBuilder::IncompatibleBindings.new('something is wrong') } @@ -26,7 +26,7 @@ module Diego context 'when k8s service bindings are enabled' do before do _app.update(service_binding_k8s_enabled: true) - VCAP::CloudController::ServiceBinding.make(service_instance: ManagedServiceInstance.make(space: _app.space), app: _app) + create(:service_binding, service_instance: create(:managed_service_instance, space: _app.space), app: _app) end it 'includes volume mounted files' do @@ -42,7 +42,7 @@ module Diego context 'when file-based VCAP service bindings are enabled' do before do _app.update(file_based_vcap_services_enabled: true) - VCAP::CloudController::ServiceBinding.make(service_instance: ManagedServiceInstance.make(space: _app.space), app: _app) + create(:service_binding, service_instance: create(:managed_service_instance, space: _app.space), app: _app) end it 'includes the vcap_services file' do @@ -78,7 +78,7 @@ module Diego stack: 'cool-stack' } end - let(:package) { PackageModel.make(app:) } + let(:package) { create(:package_model, app:) } let(:expected_network) do ::Diego::Bbs::Models::Network.new( properties: { @@ -149,21 +149,21 @@ module Diego end before do - SecurityGroup.make(guid: 'guid1', - rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }], - staging_default: true) - SecurityGroup.make(guid: 'guid2', - rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }], - staging_default: true) - security_group = SecurityGroup.make(guid: 'guid3', - rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '0.0.0.0/0', 'log' => true }], - staging_default: false) + create(:security_group, guid: 'guid1', + rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }], + staging_default: true) + create(:security_group, guid: 'guid2', + rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }], + staging_default: true) + security_group = create(:security_group, guid: 'guid3', + rules: [{ 'protocol' => 'tcp', 'ports' => '443', 'destination' => '0.0.0.0/0', 'log' => true }], + staging_default: false) security_group.add_staging_space(app.space) allow(LifecycleProtocol).to receive(:protocol_for_type).with(lifecycle_type).and_return(lifecycle_protocol) end context 'with a buildpack backend' do - let(:droplet) { DropletModel.make(package:, app:) } + let(:droplet) { create(:droplet_model, package:, app:) } let(:buildpack_staging_action) { ::Diego::Bbs::Models::RunAction.new } let(:lifecycle_environment_variables) { [::Diego::Bbs::Models::EnvironmentVariable.new(name: 'the-buildpack-env-var', value: 'the-buildpack-value')] } @@ -260,12 +260,12 @@ module Diego end context 'with a docker backend' do - let(:droplet) { DropletModel.make(:docker, package:, app:) } + let(:droplet) { create(:droplet_model, :docker, package:, app:) } let(:package) do - PackageModel.make(:docker, - app: app, - docker_username: 'dockeruser', - docker_password: 'dockerpass') + create(:package_model, :docker, + app: app, + docker_username: 'dockeruser', + docker_password: 'dockerpass') end let(:docker_staging_action) { ::Diego::Bbs::Models::RunAction.new } @@ -464,9 +464,9 @@ module Diego before do allow(VCAP::CloudController::IsolationSegmentSelector).to receive(:for_space).and_return(isolation_segment) - SecurityGroup.make(guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }], running_default: true) + create(:security_group, guid: 'guid1', rules: [{ 'protocol' => 'udp', 'ports' => '53', 'destination' => '0.0.0.0/0' }], running_default: true) app.space.add_security_group( - SecurityGroup.make(guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }]) + create(:security_group, guid: 'guid2', rules: [{ 'protocol' => 'tcp', 'ports' => '80', 'destination' => '0.0.0.0/0', 'log' => true }]) ) end @@ -500,7 +500,7 @@ module Diego end context 'with a buildpack backend' do - let(:droplet) { DropletModel.make(app:) } + let(:droplet) { create(:droplet_model, app:) } let(:task_action_builder) do instance_double( @@ -569,7 +569,7 @@ module Diego end context 'when a volume mount is provided' do - let(:service_instance) { ManagedServiceInstance.make space: app.space } + let(:service_instance) { create(:managed_service_instance, space: app.space) } let(:multiple_volume_mounts) do [ { @@ -598,7 +598,7 @@ module Diego end before do - ServiceBinding.make(app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) + create(:service_binding, app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) end it 'desires the mount' do @@ -657,12 +657,12 @@ module Diego end context 'with a docker backend' do - let(:package) { PackageModel.make(:docker, app:) } + let(:package) { create(:package_model, :docker, app:) } let(:droplet) do - DropletModel.make(:docker, - app: app, - docker_receipt_username: 'dockerusername', - docker_receipt_password: 'dockerpassword') + create(:droplet_model, :docker, + app: app, + docker_receipt_username: 'dockerusername', + docker_receipt_password: 'dockerpassword') end let(:task_action_builder) do @@ -734,7 +734,7 @@ module Diego end context 'when a volume mount is provided' do - let(:service_instance) { ManagedServiceInstance.make space: app.space } + let(:service_instance) { create(:managed_service_instance, space: app.space) } let(:multiple_volume_mounts) do [ { @@ -763,7 +763,7 @@ module Diego end before do - ServiceBinding.make(app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) + create(:service_binding, app: app, service_instance: service_instance, volume_mounts: multiple_volume_mounts) end it 'desires the mount' do diff --git a/spec/unit/lib/cloud_controller/diego/tasks_sync_spec.rb b/spec/unit/lib/cloud_controller/diego/tasks_sync_spec.rb index e37dda11c7e..b14f77a3136 100644 --- a/spec/unit/lib/cloud_controller/diego/tasks_sync_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/tasks_sync_spec.rb @@ -27,7 +27,7 @@ module Diego end context 'when bbs and CC are in sync' do - let!(:task) { TaskModel.make(:running, created_at: 1.minute.ago) } + let!(:task) { create(:task_model, :running, created_at: 1.minute.ago) } let(:bbs_tasks) do [::Diego::Bbs::Models::Task.new(task_guid: task.guid)] end @@ -46,10 +46,10 @@ module Diego end context 'when a running CC task is missing from BBS' do - let!(:running_task) { TaskModel.make(:running, created_at: 1.minute.ago) } - let!(:canceling_task) { TaskModel.make(:canceling, created_at: 1.minute.ago) } - let!(:start_event_for_running_task) { AppUsageEvent.make(task_guid: running_task.guid, state: 'TASK_STARTED') } - let!(:start_event_for_canceling_task) { AppUsageEvent.make(task_guid: canceling_task.guid, state: 'TASK_STARTED') } + let!(:running_task) { create(:task_model, :running, created_at: 1.minute.ago) } + let!(:canceling_task) { create(:task_model, :canceling, created_at: 1.minute.ago) } + let!(:start_event_for_running_task) { create(:app_usage_event, task_guid: running_task.guid, state: 'TASK_STARTED') } + let!(:start_event_for_canceling_task) { create(:app_usage_event, task_guid: canceling_task.guid, state: 'TASK_STARTED') } let(:bbs_tasks) { [] } before do @@ -103,8 +103,8 @@ def exceptions end context 'when bbs does not know about a pending/succeeded task' do - let!(:pending_task) { TaskModel.make(:pending, created_at: 1.minute.ago) } - let!(:succeeded_task) { TaskModel.make(:succeeded, created_at: 1.minute.ago) } + let!(:pending_task) { create(:task_model, :pending, created_at: 1.minute.ago) } + let!(:succeeded_task) { create(:task_model, :succeeded, created_at: 1.minute.ago) } let(:bbs_tasks) { [] } it 'does not change the succeeded task' do @@ -123,11 +123,11 @@ def exceptions context 'when a pending task has expired' do let!(:expired_pending_task) do - task = TaskModel.make(:pending) + task = create(:task_model, :pending) task.this.update(created_at: 10.minutes.ago) task.reload end - let!(:recent_pending_task) { TaskModel.make(:pending) } + let!(:recent_pending_task) { create(:task_model, :pending) } let(:bbs_tasks) { [] } it 'fails the expired pending task' do @@ -194,7 +194,7 @@ def exceptions end context 'when bbs knows about a running task that CC wants to cancel' do - let!(:canceling_task) { TaskModel.make(:canceling) } + let!(:canceling_task) { create(:task_model, :canceling) } let(:bbs_tasks) do [::Diego::Bbs::Models::Task.new(task_guid: canceling_task.guid)] end @@ -308,7 +308,7 @@ def exceptions before do stub_const('VCAP::CloudController::Diego::TasksSync::BATCH_SIZE', 5) (TasksSync::BATCH_SIZE + 1).times do |_| - task = TaskModel.make(:running, created_at: 1.minute.ago) + task = create(:task_model, :running, created_at: 1.minute.ago) bbs_tasks << ::Diego::Bbs::Models::Task.new(task_guid: task.guid) end end @@ -322,7 +322,7 @@ def exceptions context 'when a new task is created after cc initially fetches tasks from bbs' do context 'and the newly started task does not complete before checking to see if it should fail' do - let!(:cc_task) { TaskModel.make(guid: 'some-task-guid', state: TaskModel::RUNNING_STATE) } + let!(:cc_task) { create(:task_model, guid: 'some-task-guid', state: TaskModel::RUNNING_STATE) } let(:bbs_task) { ::Diego::Bbs::Models::Task.new(task_guid: 'some-task-guid', state: ::Diego::Bbs::Models::Task::State::Running) } before do @@ -350,7 +350,7 @@ def exceptions context 'and the newly started task completes before the iteration completes', isolation: :truncation do # Can't use transactions for isolation because we're using multiple threads - let!(:cc_task) { TaskModel.make(guid: 'some-task-guid', state: TaskModel::RUNNING_STATE) } + let!(:cc_task) { create(:task_model, guid: 'some-task-guid', state: TaskModel::RUNNING_STATE) } let(:bbs_tasks) { [] } before do diff --git a/spec/unit/lib/cloud_controller/diego/windows_environment_sage_spec.rb b/spec/unit/lib/cloud_controller/diego/windows_environment_sage_spec.rb index e3f5b1e4fab..5b6cf9dab17 100644 --- a/spec/unit/lib/cloud_controller/diego/windows_environment_sage_spec.rb +++ b/spec/unit/lib/cloud_controller/diego/windows_environment_sage_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Diego RSpec.describe WindowsEnvironmentSage do - let(:parent_app) { VCAP::CloudController::AppModel.make } + let(:parent_app) { create(:app_model) } let(:credential_refs) { [] } describe '.ponder' do diff --git a/spec/unit/lib/cloud_controller/errands/rotate_database_key_spec.rb b/spec/unit/lib/cloud_controller/errands/rotate_database_key_spec.rb index 392acd8e949..a0373ab6758 100644 --- a/spec/unit/lib/cloud_controller/errands/rotate_database_key_spec.rb +++ b/spec/unit/lib/cloud_controller/errands/rotate_database_key_spec.rb @@ -5,47 +5,47 @@ module VCAP::CloudController describe '#perform' do context 'rotation' do # Apps are an example of a single encrypted field - let(:historical_app) { AppModel.make } - let(:historical_app_with_no_environment) { AppModel.make } - let(:app) { AppModel.make(:all_fields) } - let(:app_the_second) { AppModel.make } - let(:app_new_key_label) { AppModel.make } + let(:historical_app) { create(:app_model) } + let(:historical_app_with_no_environment) { create(:app_model) } + let(:app) { create(:app_model, :all_fields) } + let(:app_the_second) { create(:app_model) } + let(:app_new_key_label) { create(:app_model) } let(:env_vars) { { 'environment' => 'vars', 'PORT' => 344, 'longstring' => 'x' * 4097 } } # PORT is invalid! let(:env_vars_2) { { 'vars' => 'environment' } } # Service bindings are an example of multiple encrypted fields - let(:service_binding) { ServiceBinding.make(syslog_drain_url: Sham.url, name: Sham.name) } - let(:service_binding_new_key_label) { ServiceBinding.make } + let(:service_binding) { create(:service_binding, syslog_drain_url: Sham.url, name: Sham.name) } + let(:service_binding_new_key_label) { create(:service_binding) } let(:credentials) { { 'secret' => 'creds' } } let(:credentials_2) { { 'more' => 'secrets' } } # Service instances are an example of single table inheritance - let(:service_instance) { ManagedServiceInstance.make(:all_fields) } - let(:service_instance_new_key_label) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance, :all_fields) } + let(:service_instance_new_key_label) { create(:managed_service_instance) } let(:instance_credentials) { { 'instance' => 'credentials' } } let(:instance_credentials_2) { { 'instance_credentials' => 'live here' } } - let(:task) { TaskModel.make(disk_in_mb: 256, failure_reason: 'error') } - let(:task_the_second) { TaskModel.make } + let(:task) { create(:task_model, disk_in_mb: 256, failure_reason: 'error') } + let(:task_the_second) { create(:task_model) } - let(:service_broker) { ServiceBroker.make(:space_scoped) } - let(:service_broker_update_request) { ServiceBrokerUpdateRequest.make(service_broker_id: service_broker.id, fk_service_brokers_id: service_broker.id) } + let(:service_broker) { create(:service_broker, :space_scoped) } + let(:service_broker_update_request) { create(:service_broker_update_request, service_broker_id: service_broker.id, fk_service_brokers_id: service_broker.id) } let(:encrypted_models) do { 'VCAP::CloudController::AppModel' => app, - 'VCAP::CloudController::PackageModel' => PackageModel.make(:docker, package_hash: Sham.guid, error: 'a-error', docker_image: 'image', docker_username: 'user'), - 'VCAP::CloudController::DropletModel' => DropletModel.make(:all_fields), - 'VCAP::CloudController::CNBLifecycleDataModel' => CNBLifecycleDataModel.make(:all_fields), - 'VCAP::CloudController::BuildpackLifecycleDataModel' => BuildpackLifecycleDataModel.make(:all_fields), - 'VCAP::CloudController::BuildpackLifecycleBuildpackModel' => BuildpackLifecycleBuildpackModel.make(:all_fields), + 'VCAP::CloudController::PackageModel' => create(:package_model, :docker, package_hash: Sham.guid, error: 'a-error', docker_image: 'image', docker_username: 'user'), + 'VCAP::CloudController::DropletModel' => create(:droplet_model, :all_fields), + 'VCAP::CloudController::CNBLifecycleDataModel' => create(:cnb_lifecycle_data_model, :all_fields), + 'VCAP::CloudController::BuildpackLifecycleDataModel' => create(:buildpack_lifecycle_data_model, :all_fields), + 'VCAP::CloudController::BuildpackLifecycleBuildpackModel' => create(:buildpack_lifecycle_buildpack_model, :all_fields), 'VCAP::CloudController::TaskModel' => task, - 'VCAP::CloudController::EnvironmentVariableGroup' => EnvironmentVariableGroup.make, - 'VCAP::CloudController::RevisionModel' => RevisionModel.make, + 'VCAP::CloudController::EnvironmentVariableGroup' => create(:environment_variable_group), + 'VCAP::CloudController::RevisionModel' => create(:revision_model), 'VCAP::CloudController::ServiceBinding' => service_binding, 'VCAP::CloudController::ServiceInstance' => service_instance, 'VCAP::CloudController::ServiceBroker' => service_broker, 'VCAP::CloudController::ServiceBrokerUpdateRequest' => service_broker_update_request, - 'VCAP::CloudController::ServiceKey' => ServiceKey.make + 'VCAP::CloudController::ServiceKey' => create(:service_key) } end @@ -216,8 +216,8 @@ def nilable_columns(entity) end context 'batching so we do not load entire tables into memory' do - let(:app2) { AppModel.make } - let(:app3) { AppModel.make } + let(:app2) { create(:app_model) } + let(:app3) { create(:app_model) } before do allow(Encryptor).to receive(:current_encryption_key_label) { 'old' } @@ -293,7 +293,7 @@ def nilable_columns(entity) # is distinct from the db connection that `RotateDatabaseKey.perform` is using, not to attempt to update # the TaskModel concurrently Thread.new do - encrypted_new_env_vars = TaskModel.make(salt: task_model.salt, environment_variables: new_environment_variables).environment_variables_without_encryption + encrypted_new_env_vars = create(:task_model, salt: task_model.salt, environment_variables: new_environment_variables).environment_variables_without_encryption db = Sequel.connect(task_model.db.opts) db.run("UPDATE tasks SET encryption_key_label = 'new', encrypted_environment_variables = '#{encrypted_new_env_vars}' where guid = '#{task_model.guid}';") end.join @@ -314,10 +314,10 @@ def nilable_columns(entity) describe 'logging' do let(:logger) { instance_double(Steno::Logger, info: nil, error: nil) } - let!(:app) { AppModel.make } - let!(:task) { TaskModel.make(app:) } - let!(:task_jr) { TaskModel.make(app:) } - let!(:task_the_third) { TaskModel.make(app:) } + let!(:app) { create(:app_model) } + let!(:task) { create(:task_model, app:) } + let!(:task_jr) { create(:task_model, app:) } + let!(:task_the_third) { create(:task_model, app:) } before do allow(Steno).to receive(:logger).and_return(logger) diff --git a/spec/unit/lib/cloud_controller/isolation_segment_selector_spec.rb b/spec/unit/lib/cloud_controller/isolation_segment_selector_spec.rb index a4bbd6ab08a..dabd1768b46 100644 --- a/spec/unit/lib/cloud_controller/isolation_segment_selector_spec.rb +++ b/spec/unit/lib/cloud_controller/isolation_segment_selector_spec.rb @@ -3,11 +3,11 @@ module VCAP::CloudController RSpec.describe IsolationSegmentSelector do describe '.for_space' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } - let(:isolation_segment_model_2) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model_2) { create(:isolation_segment_model) } let(:shared_isolation_segment) do VCAP::CloudController::IsolationSegmentModel.first( guid: VCAP::CloudController::IsolationSegmentModel::SHARED_ISOLATION_SEGMENT_GUID diff --git a/spec/unit/lib/cloud_controller/membership_spec.rb b/spec/unit/lib/cloud_controller/membership_spec.rb index 3c0ee4dc05b..b76339a11be 100644 --- a/spec/unit/lib/cloud_controller/membership_spec.rb +++ b/spec/unit/lib/cloud_controller/membership_spec.rb @@ -2,9 +2,9 @@ module VCAP::CloudController RSpec.describe Membership do - let(:user) { User.make } - let!(:space) { Space.make(organization:) } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let!(:space) { create(:space, organization:) } + let(:organization) { create(:organization) } let(:membership) { Membership.new(user) } @@ -493,10 +493,10 @@ module VCAP::CloudController let(:org_roles) { Permissions::ROLES_FOR_ORG_READING } context 'when the user has an org role' do - let(:other_user) { User.make } - let(:manager_user) { User.make } - let(:auditor_user) { User.make } - let(:billing_user) { User.make } + let(:other_user) { create(:user) } + let(:manager_user) { create(:user) } + let(:auditor_user) { create(:user) } + let(:billing_user) { create(:user) } before do organization.add_user(user) @@ -513,8 +513,8 @@ module VCAP::CloudController end it 'does not include users from other orgs' do - other_org = Organization.make - unrelated_user = User.make + other_org = create(:organization) + unrelated_user = create(:user) other_org.add_user(unrelated_user) user_ids = membership.visible_user_ids_in_orgs(org_roles).select_map(:user_id) @@ -538,7 +538,7 @@ module VCAP::CloudController end describe '#authorized_space_guids' do - let(:user) { User.make } + let(:user) { create(:user) } before do organization.add_user(user) @@ -637,12 +637,12 @@ module VCAP::CloudController end context 'mix of org and space roles' do - let(:org_managed) { Organization.make } - let(:org_audited) { Organization.make } - let!(:space1_in_managed_org) { Space.make(organization: org_managed) } - let!(:space2_in_managed_org) { Space.make(organization: org_managed) } - let!(:space_in_audited_org) { Space.make(organization: org_audited) } - let!(:some_other_space) { Space.make } + let(:org_managed) { create(:organization) } + let(:org_audited) { create(:organization) } + let!(:space1_in_managed_org) { create(:space, organization: org_managed) } + let!(:space2_in_managed_org) { create(:space, organization: org_managed) } + let!(:space_in_audited_org) { create(:space, organization: org_audited) } + let!(:some_other_space) { create(:space) } before do org_managed.add_manager(user) diff --git a/spec/unit/lib/cloud_controller/metrics/periodic_updater_spec.rb b/spec/unit/lib/cloud_controller/metrics/periodic_updater_spec.rb index df7d33fe407..4ef5d98a3f1 100644 --- a/spec/unit/lib/cloud_controller/metrics/periodic_updater_spec.rb +++ b/spec/unit/lib/cloud_controller/metrics/periodic_updater_spec.rb @@ -31,9 +31,9 @@ module VCAP::CloudController::Metrics describe 'number of tasks' do it 'updates the number of running tasks' do - VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::RUNNING_STATE) + create(:task_model, state: VCAP::CloudController::TaskModel::RUNNING_STATE) VCAP::CloudController::TaskModel::TASK_STATES.each do |state| - VCAP::CloudController::TaskModel.make(state:) + create(:task_model, state:) end periodic_updater.update_task_stats @@ -44,9 +44,9 @@ module VCAP::CloudController::Metrics end it 'updates the total memory allocated to tasks' do - VCAP::CloudController::TaskModel.make(state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 512) + create(:task_model, state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 512) VCAP::CloudController::TaskModel::TASK_STATES.each do |state| - VCAP::CloudController::TaskModel.make(state: state, memory_in_mb: 1) + create(:task_model, state: state, memory_in_mb: 1) end periodic_updater.update_task_stats diff --git a/spec/unit/lib/cloud_controller/organization_instance_usage_calculator_spec.rb b/spec/unit/lib/cloud_controller/organization_instance_usage_calculator_spec.rb index a14ab46f476..7272679bf61 100644 --- a/spec/unit/lib/cloud_controller/organization_instance_usage_calculator_spec.rb +++ b/spec/unit/lib/cloud_controller/organization_instance_usage_calculator_spec.rb @@ -3,10 +3,10 @@ module VCAP::CloudController RSpec.describe OrganizationInstanceUsageCalculator do describe '#get_instance_usage' do - let!(:org) { Organization.make } - let!(:space1) { Space.make(organization: org) } - let!(:space2) { Space.make } - let!(:space3) { Space.make(organization: org) } + let!(:org) { create(:organization) } + let!(:space1) { create(:space, organization: org) } + let!(:space2) { create(:space) } + let!(:space3) { create(:space, organization: org) } let!(:started_process1) { ProcessModelFactory.make(space: space1, instances: 3, state: 'STARTED') } let!(:started_process2) { ProcessModelFactory.make(space: space1, instances: 6, state: 'STARTED') } let!(:started_process3) { ProcessModelFactory.make(space: space3, instances: 7, state: 'STARTED') } diff --git a/spec/unit/lib/cloud_controller/organization_quota_usage_spec.rb b/spec/unit/lib/cloud_controller/organization_quota_usage_spec.rb index 0407d7e828d..6acf9633cd8 100644 --- a/spec/unit/lib/cloud_controller/organization_quota_usage_spec.rb +++ b/spec/unit/lib/cloud_controller/organization_quota_usage_spec.rb @@ -2,16 +2,16 @@ module VCAP::CloudController RSpec.describe OrganizationQuotaUsage do - let(:org) { Organization.make } - let(:space1) { Space.make(organization: org) } - let(:space2) { Space.make } - let(:space3) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space1) { create(:space, organization: org) } + let(:space2) { create(:space) } + let(:space3) { create(:space, organization: org) } subject(:org_usage) { OrganizationQuotaUsage.new(org) } describe '#routes' do before do - [space1, space1, space2, space3].each { |s| Route.make(space: s) } + [space1, space1, space2, space3].each { |s| create(:route, space: s) } end it 'returns the number of routes in all spaces under the org' do @@ -21,8 +21,8 @@ module VCAP::CloudController describe '#service_instances' do before do - [space1, space1, space2, space3].each { |s| ManagedServiceInstance.make(space: s) } - UserProvidedServiceInstance.make(space: space1) + [space1, space1, space2, space3].each { |s| create(:managed_service_instance, space: s) } + create(:user_provided_service_instance, space: space1) end it 'returns the number of service instances in all spaces under the org' do @@ -32,7 +32,7 @@ module VCAP::CloudController describe '#private_domains' do before do - [space1, space1, space2, space3].each { |s| Domain.make(owning_organization: s.organization) } + [space1, space1, space2, space3].each { |s| create(:domain, owning_organization: s.organization) } end it 'returns the number of private domains in all spaces under the org' do @@ -42,7 +42,7 @@ module VCAP::CloudController describe '#service_keys' do before do - [space1, space1, space2, space3].each { |s| ServiceKey.make(service_instance: ServiceInstance.make(space: s)) } + [space1, space1, space2, space3].each { |s| create(:service_key, service_instance: create(:service_instance, space: s)) } end it 'returns the number of service keys in all spaces under the org' do @@ -56,8 +56,8 @@ module VCAP::CloudController router_group = instance_double(RoutingApi::RouterGroup, type: 'tcp', reservable_ports: reservable_ports) routing_api_client = instance_double(RoutingApi::Client, router_group: router_group, enabled?: true) allow(CloudController::DependencyLocator.instance).to receive(:routing_api_client).and_return(routing_api_client) - domain = SharedDomain.make(router_group_guid: 'some-router-group') - [space1, space1, space2, space3].each_with_index { |s, i| Route.make(space: s, domain: domain, host: '', port: reservable_ports[i]) } + domain = create(:shared_domain, router_group_guid: 'some-router-group') + [space1, space1, space2, space3].each_with_index { |s, i| create(:route, space: s, domain: domain, host: '', port: reservable_ports[i]) } end it 'returns the number of reserved route ports in all spaces under the org' do @@ -67,9 +67,9 @@ module VCAP::CloudController describe '#app_tasks' do before do - [space1, space1, space2, space3].each { |s| TaskModel.make(app: AppModel.make(space: s), state: TaskModel::RUNNING_STATE) } - TaskModel.make(app: AppModel.make(space: space1), state: TaskModel::PENDING_STATE) - TaskModel.make(app: AppModel.make(space: space1), state: TaskModel::CANCELING_STATE) + [space1, space1, space2, space3].each { |s| create(:task_model, app: create(:app_model, space: s), state: TaskModel::RUNNING_STATE) } + create(:task_model, app: create(:app_model, space: space1), state: TaskModel::PENDING_STATE) + create(:task_model, app: create(:app_model, space: space1), state: TaskModel::CANCELING_STATE) end it 'returns the number of app tasks in all spaces under the org' do diff --git a/spec/unit/lib/cloud_controller/packager/local_bits_packer_spec.rb b/spec/unit/lib/cloud_controller/packager/local_bits_packer_spec.rb index 1b0846a6e77..5868f696eca 100644 --- a/spec/unit/lib/cloud_controller/packager/local_bits_packer_spec.rb +++ b/spec/unit/lib/cloud_controller/packager/local_bits_packer_spec.rb @@ -215,7 +215,7 @@ module CloudController::Packager context 'when the resource_matching feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'resource_matching', enabled: false) + create(:feature_flag, name: 'resource_matching', enabled: false) end it 'does not upload any app bits to the app bit cache' do diff --git a/spec/unit/lib/cloud_controller/packager/package_upload_handler_spec.rb b/spec/unit/lib/cloud_controller/packager/package_upload_handler_spec.rb index 620773f67d3..196ae0382ba 100644 --- a/spec/unit/lib/cloud_controller/packager/package_upload_handler_spec.rb +++ b/spec/unit/lib/cloud_controller/packager/package_upload_handler_spec.rb @@ -5,7 +5,7 @@ module CloudController::Packager RSpec.describe PackageUploadHandler do subject(:packer) { PackageUploadHandler.new(package.guid, uploaded_files_path, cached_files_fingerprints) } - let(:package) { VCAP::CloudController::PackageModel.make(state: VCAP::CloudController::PackageModel::PENDING_STATE) } + let(:package) { create(:package_model, state: VCAP::CloudController::PackageModel::PENDING_STATE) } let(:uploaded_files_path) { File.expand_path('../../../fixtures/good.zip', File.dirname(__FILE__)) } let(:cached_files_fingerprints) { [{ 'sha1' => 'abcde', 'fn' => 'lib.rb' }] } diff --git a/spec/unit/lib/cloud_controller/paging/list_paginator_spec.rb b/spec/unit/lib/cloud_controller/paging/list_paginator_spec.rb index 7618aaf3320..1739f6bc28e 100644 --- a/spec/unit/lib/cloud_controller/paging/list_paginator_spec.rb +++ b/spec/unit/lib/cloud_controller/paging/list_paginator_spec.rb @@ -9,8 +9,8 @@ module VCAP::CloudController describe '#get_page' do let(:list) { [app_model1, app_model2] } let(:default_options) { { order_by: 'id', order_direction: 'asc', page: 1, per_page: per_page } } - let!(:app_model1) { AppModel.make(name: 'zora') } - let!(:app_model2) { AppModel.make(name: 'dora') } + let!(:app_model1) { create(:app_model, name: 'zora') } + let!(:app_model2) { create(:app_model, name: 'dora') } let(:per_page) { 1 } it 'finds all records from the page upto the per_page limit' do diff --git a/spec/unit/lib/cloud_controller/paging/sequel_paginator_spec.rb b/spec/unit/lib/cloud_controller/paging/sequel_paginator_spec.rb index c1ef2d196cd..fb213439509 100644 --- a/spec/unit/lib/cloud_controller/paging/sequel_paginator_spec.rb +++ b/spec/unit/lib/cloud_controller/paging/sequel_paginator_spec.rb @@ -10,13 +10,13 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end describe '#get_page' do let(:dataset) { AppModel.dataset } - let!(:space) { Space.make } - let!(:app_model1) { AppModel.make(space:) } - let!(:app_model2) { AppModel.make } - let!(:app_model3) { AppModel.make } - let!(:app_model4) { AppModel.make } - let!(:space_manager_model) { SpaceManager.make } - let!(:space_developer_model) { SpaceDeveloper.make } + let!(:space) { create(:space) } + let!(:app_model1) { create(:app_model, space:) } + let!(:app_model2) { create(:app_model) } + let!(:app_model3) { create(:app_model) } + let!(:app_model4) { create(:app_model) } + let!(:space_manager_model) { create(:space_manager) } + let!(:space_developer_model) { create(:space_developer) } let(:page) { 1 } let(:per_page) { 1 } @@ -63,7 +63,7 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end end it 'works with a multi table result set' do - PackageModel.make(app: app_model1) + create(:package_model, app: app_model1) options = { page:, per_page: } pagination_options = PaginationOptions.new(options) new_dataset = dataset.join(PackageModel.table_name, "#{PackageModel.table_name}__app_guid": :"#{AppModel.table_name}__guid") @@ -144,10 +144,10 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end end it 'orders by secondary_default_order_by if using default order_by' do - Space.make(guid: '1') - Space.make(guid: '2') - Space.make(guid: '3') - Space.make(guid: '4') + create(:space, guid: '1') + create(:space, guid: '2') + create(:space, guid: '3') + create(:space, guid: '4') options = { page: page, per_page: 4, order_direction: 'asc' } app_model1.update(guid: '1', space_guid: '2', name: 'yourapp') app_model2.update(guid: '2', space_guid: '1', name: 'yourapp') @@ -166,10 +166,10 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end end it 'does not order by secondary_default_order_by if order_by is set' do - Space.make(guid: '1') - Space.make(guid: '2') - Space.make(guid: '3') - Space.make(guid: '4') + create(:space, guid: '1') + create(:space, guid: '2') + create(:space, guid: '3') + create(:space, guid: '4') options = { page: page, order_by: 'name', per_page: 4, order_direction: 'asc' } app_model1.update(guid: '1', space_guid: '2', name: 'yourapp') app_model2.update(guid: '2', space_guid: '1', name: 'yourapp') @@ -294,10 +294,10 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end context 'events table' do let(:dataset) { Event.dataset } - let!(:event_1) { Event.make(guid: '1', created_at: '2022-12-20T10:47:01Z') } - let!(:event_2) { Event.make(guid: '2', created_at: '2022-12-20T10:47:02Z') } - let!(:event_3) { Event.make(guid: '3', created_at: '2022-12-20T10:47:03Z') } - let!(:event_4) { Event.make(guid: '4', created_at: '2022-12-20T10:47:04Z') } + let!(:event_1) { create(:event, guid: '1', created_at: '2022-12-20T10:47:01Z') } + let!(:event_2) { create(:event, guid: '2', created_at: '2022-12-20T10:47:02Z') } + let!(:event_3) { create(:event, guid: '3', created_at: '2022-12-20T10:47:03Z') } + let!(:event_4) { create(:event, guid: '4', created_at: '2022-12-20T10:47:04Z') } it 'does not use window function' do options = { page:, per_page: } @@ -313,10 +313,10 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end context 'AppUsageEvents table' do before do - AppUsageEvent.make(guid: '1', created_at: '2022-12-20T10:47:01Z') - AppUsageEvent.make(guid: '2', created_at: '2022-12-20T10:47:02Z') - AppUsageEvent.make(guid: '3', created_at: '2022-12-20T10:47:03Z') - AppUsageEvent.make(guid: '4', created_at: '2022-12-20T10:47:04Z') + create(:app_usage_event, guid: '1', created_at: '2022-12-20T10:47:01Z') + create(:app_usage_event, guid: '2', created_at: '2022-12-20T10:47:02Z') + create(:app_usage_event, guid: '3', created_at: '2022-12-20T10:47:03Z') + create(:app_usage_event, guid: '4', created_at: '2022-12-20T10:47:04Z') end it 'does not use window function' do @@ -333,10 +333,10 @@ class TableWithoutGuid < Sequel::Model(:table_without_guid); end context 'enable_paginate_window config flag' do let(:dataset) { AppModel.dataset } - let!(:app_1) { AppModel.make(guid: '1', created_at: '2024-05-15T17:23:01Z') } - let!(:app_2) { AppModel.make(guid: '2', created_at: '2024-05-15T17:23:02Z') } - let!(:app_3) { AppModel.make(guid: '3', created_at: '2024-05-15T17:23:03Z') } - let!(:app_4) { AppModel.make(guid: '4', created_at: '2024-05-15T17:23:04Z') } + let!(:app_1) { create(:app_model, guid: '1', created_at: '2024-05-15T17:23:01Z') } + let!(:app_2) { create(:app_model, guid: '2', created_at: '2024-05-15T17:23:02Z') } + let!(:app_3) { create(:app_model, guid: '3', created_at: '2024-05-15T17:23:03Z') } + let!(:app_4) { create(:app_model, guid: '4', created_at: '2024-05-15T17:23:04Z') } context 'not defined' do it 'uses window function if supported' do diff --git a/spec/unit/lib/cloud_controller/permissions_spec.rb b/spec/unit/lib/cloud_controller/permissions_spec.rb index 9a3c92cd9a6..aa67f0d5368 100644 --- a/spec/unit/lib/cloud_controller/permissions_spec.rb +++ b/spec/unit/lib/cloud_controller/permissions_spec.rb @@ -2,9 +2,9 @@ module VCAP::CloudController RSpec.describe Permissions do - let(:user) { User.make } - let(:space) { Space.make(organization: org) } - let(:org) { Organization.make } + let(:user) { create(:user) } + let(:space) { create(:space, organization: org) } + let(:org) { create(:organization) } let(:space_guid) { space.guid } let(:org_guid) { org.guid } let(:permissions) { Permissions.new(user) } @@ -773,9 +773,9 @@ module VCAP::CloudController end describe '#readable_event_dataset' do - let!(:unscoped_event) { Event.make(actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } - let!(:org_scoped_event) { Event.make(created_at: Time.now + 100, type: 'audit.organization.create', actee: org_guid, organization_guid: org_guid) } - let!(:space_scoped_event) { Event.make(space_guid: space_guid, actee: space_guid, type: 'audit.app.restart') } + let!(:unscoped_event) { create(:event, actee: 'dir/key', type: 'blob.remove_orphan', organization_guid: '') } + let!(:org_scoped_event) { create(:event, created_at: Time.now + 100, type: 'audit.organization.create', actee: org_guid, organization_guid: org_guid) } + let!(:space_scoped_event) { create(:event, space_guid: space_guid, actee: space_guid, type: 'audit.app.restart') } it 'returns all events for admins' do user = set_current_user_as_admin @@ -824,7 +824,7 @@ module VCAP::CloudController end describe '#can_read_from_isolation_segment?' do - let(:isolation_segment) { IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } before do @@ -1059,12 +1059,12 @@ module VCAP::CloudController user = set_current_user_as_admin subject = Permissions.new(user) - org1 = Organization.make - space1 = Space.make(organization: org1) - app1 = AppModel.make(space: space1) - org2 = Organization.make - space2 = Space.make(organization: org2) - app2 = AppModel.make(space: space2) + org1 = create(:organization) + space1 = create(:space, organization: org1) + app1 = create(:app_model, space: space1) + org2 = create(:organization) + space2 = create(:space, organization: org2) + app2 = create(:app_model, space: space2) app_guids = subject.readable_app_guids @@ -1076,12 +1076,12 @@ module VCAP::CloudController user = set_current_user_as_admin_read_only subject = Permissions.new(user) - org1 = Organization.make - space1 = Space.make(organization: org1) - app1 = AppModel.make(space: space1) - org2 = Organization.make - space2 = Space.make(organization: org2) - app2 = AppModel.make(space: space2) + org1 = create(:organization) + space1 = create(:space, organization: org1) + app1 = create(:app_model, space: space1) + org2 = create(:organization) + space2 = create(:space, organization: org2) + app2 = create(:app_model, space: space2) app_guids = subject.readable_app_guids @@ -1093,12 +1093,12 @@ module VCAP::CloudController user = set_current_user_as_global_auditor subject = Permissions.new(user) - org1 = Organization.make - space1 = Space.make(organization: org1) - app1 = AppModel.make(space: space1) - org2 = Organization.make - space2 = Space.make(organization: org2) - app2 = AppModel.make(space: space2) + org1 = create(:organization) + space1 = create(:space, organization: org1) + app1 = create(:app_model, space: space1) + org2 = create(:organization) + space2 = create(:space, organization: org2) + app2 = create(:app_model, space: space2) app_guids = subject.readable_app_guids @@ -1107,24 +1107,24 @@ module VCAP::CloudController end it 'returns app guids where the user has an appropriate org membership' do - manager_org = Organization.make - manager_space = Space.make(organization: manager_org) - manager_app = AppModel.make(space: manager_space) + manager_org = create(:organization) + manager_space = create(:space, organization: manager_org) + manager_app = create(:app_model, space: manager_space) manager_org.add_manager(user) - auditor_org = Organization.make - auditor_space = Space.make(organization: auditor_org) - auditor_app = AppModel.make(space: auditor_space) + auditor_org = create(:organization) + auditor_space = create(:space, organization: auditor_org) + auditor_app = create(:app_model, space: auditor_space) auditor_org.add_auditor(user) - billing_manager_org = Organization.make - billing_manager_space = Space.make(organization: billing_manager_org) - billing_manager_app = AppModel.make(space: billing_manager_space) + billing_manager_org = create(:organization) + billing_manager_space = create(:space, organization: billing_manager_org) + billing_manager_app = create(:app_model, space: billing_manager_space) billing_manager_org.add_billing_manager(user) - member_org = Organization.make - member_space = Space.make(organization: member_org) - member_app = AppModel.make(space: member_space) + member_org = create(:organization) + member_space = create(:space, organization: member_org) + member_app = create(:app_model, space: member_space) member_org.add_user(user) app_guids = permissions.readable_app_guids @@ -1136,19 +1136,19 @@ module VCAP::CloudController end it 'returns app guids where the user has an appropriate space membership' do - org = Organization.make + org = create(:organization) org.add_user(user) - developer_space = Space.make(organization: org) - developer_app = AppModel.make(space: developer_space) + developer_space = create(:space, organization: org) + developer_app = create(:app_model, space: developer_space) developer_space.add_developer(user) - manager_space = Space.make(organization: org) - manager_app = AppModel.make(space: manager_space) + manager_space = create(:space, organization: org) + manager_app = create(:app_model, space: manager_space) manager_space.add_manager(user) - auditor_space = Space.make(organization: org) - auditor_app = AppModel.make(space: auditor_space) + auditor_space = create(:space, organization: org) + auditor_app = create(:app_model, space: auditor_space) auditor_space.add_auditor(user) app_guids = permissions.readable_app_guids @@ -1161,7 +1161,7 @@ module VCAP::CloudController context 'when user is an admin' do it 'returns all users' do set_current_user(user, { admin: true }) - other_user = User.make + other_user = create(:user) result = permissions.readable_users_query guids = result.select_map(:guid) @@ -1173,7 +1173,7 @@ module VCAP::CloudController context 'when user is a read-only admin' do it 'returns all users' do set_current_user(user, { admin_read_only: true }) - other_user = User.make + other_user = create(:user) guids = permissions.readable_users_query.select_map(:guid) expect(guids).to include(user.guid) @@ -1182,9 +1182,9 @@ module VCAP::CloudController end context 'when user has an org membership' do - let(:other_user) { User.make } - let(:unrelated_user) { User.make } - let(:other_org) { Organization.make } + let(:other_user) { create(:user) } + let(:unrelated_user) { create(:user) } + let(:other_org) { create(:organization) } before do org.add_user(user) @@ -1270,13 +1270,13 @@ module VCAP::CloudController end describe '#readable_space_quota_guids' do - let(:org1) { Organization.make } - let(:org2) { Organization.make } - let(:squota1) { SpaceQuotaDefinition.make(organization: org1, guid: 'q1') } - let!(:squota2) { SpaceQuotaDefinition.make(organization: org1, guid: 'q2') } - let(:squota3) { SpaceQuotaDefinition.make(organization: org2, guid: 'q3') } - let!(:space1) { Space.make(organization: org1, space_quota_definition: squota1) } - let!(:space2) { Space.make(organization: org2, space_quota_definition: squota3) } + let(:org1) { create(:organization) } + let(:org2) { create(:organization) } + let(:squota1) { create(:space_quota_definition, organization: org1, guid: 'q1') } + let!(:squota2) { create(:space_quota_definition, organization: org1, guid: 'q2') } + let(:squota3) { create(:space_quota_definition, organization: org2, guid: 'q3') } + let!(:space1) { create(:space, organization: org1, space_quota_definition: squota1) } + let!(:space2) { create(:space, organization: org2, space_quota_definition: squota3) } it 'returns all the space quota guids for any global read role' do global_roles = [set_current_user_as_admin, set_current_user_as_global_auditor, set_current_user_as_admin_read_only] diff --git a/spec/unit/lib/cloud_controller/port_generator_spec.rb b/spec/unit/lib/cloud_controller/port_generator_spec.rb index dde43131177..cac207c72bb 100644 --- a/spec/unit/lib/cloud_controller/port_generator_spec.rb +++ b/spec/unit/lib/cloud_controller/port_generator_spec.rb @@ -8,9 +8,9 @@ module VCAP::CloudController let(:router_group_guid1) { 'router-group-guid1' } let(:domain_guid1) { domain1.guid } - let(:domain1) { SharedDomain.make(router_group_guid: router_group_guid1) } - let(:space_quota) { SpaceQuotaDefinition.make } - let(:space) { Space.make(organization: space_quota.organization, space_quota_definition: space_quota) } + let(:domain1) { create(:shared_domain, router_group_guid: router_group_guid1) } + let(:space_quota) { create(:space_quota_definition) } + let(:space) { create(:space, organization: space_quota.organization, space_quota_definition: space_quota) } let(:dependency_double) { double('dependency_locator', routing_api_client:) } before do @@ -28,7 +28,7 @@ module VCAP::CloudController it 'runs out of ports' do 3.times do port = PortGenerator.generate_port(domain_guid1, Array(1024..1026)) - Route.make(domain: domain1, port: port, space: space) + create(:route, domain: domain1, port: port, space: space) end port = PortGenerator.generate_port(domain_guid1, Array(1024..1026)) @@ -39,11 +39,11 @@ module VCAP::CloudController let(:router_group_guid2) { 'router-group-guid2' } let(:router_group2) { double('router_group2', type: router_group_type, guid: router_group_guid2) } - let(:domain2) { SharedDomain.make(router_group_guid: router_group_guid2) } + let(:domain2) { create(:shared_domain, router_group_guid: router_group_guid2) } it 'hands out the same port for multiple router groups' do - Route.make(domain: domain1, port: 60_001, space: space) - Route.make(domain: domain2, port: 60_001, space: space) + create(:route, domain: domain1, port: 60_001, space: space) + create(:route, domain: domain2, port: 60_001, space: space) port1 = PortGenerator.generate_port(domain2.guid, Array(60_001..60_002)) port2 = PortGenerator.generate_port(domain2.guid, Array(60_001..60_002)) diff --git a/spec/unit/lib/cloud_controller/process_observer_spec.rb b/spec/unit/lib/cloud_controller/process_observer_spec.rb index 87a5859f83d..ddbabf6ce34 100644 --- a/spec/unit/lib/cloud_controller/process_observer_spec.rb +++ b/spec/unit/lib/cloud_controller/process_observer_spec.rb @@ -111,9 +111,9 @@ module VCAP::CloudController end context 'when revisions are enabled' do - let(:process) { ProcessModel.make } + let(:process) { create(:process_model) } let(:app) { process.app } - let!(:revision) { RevisionModel.make(app:) } + let!(:revision) { create(:revision_model, app:) } before do app.update(revisions_enabled: true) diff --git a/spec/unit/lib/cloud_controller/route_validator_spec.rb b/spec/unit/lib/cloud_controller/route_validator_spec.rb index 3429ad3f311..e93943f3720 100644 --- a/spec/unit/lib/cloud_controller/route_validator_spec.rb +++ b/spec/unit/lib/cloud_controller/route_validator_spec.rb @@ -2,15 +2,15 @@ module VCAP::CloudController RSpec.describe RouteValidator do - let(:space_quota) { SpaceQuotaDefinition.make } - let(:space) { Space.make(space_quota_definition: space_quota, organization: space_quota.organization) } + let(:space_quota) { create(:space_quota_definition) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: space_quota.organization) } let(:route) { Route.new port:, host:, path:, domain:, space: } let(:validator) { RouteValidator.new(route) } let(:routing_api_client) { double('routing_api', router_group: router_group, enabled?: true) } let(:router_group) { double(:router_group, type: router_group_type, guid: router_group_guid, reservable_ports: [3, 4, 5, 8080]) } let(:router_group_type) { 'tcp' } let(:router_group_guid) { 'router-group-guid' } - let(:domain) { SharedDomain.make(router_group_guid:) } + let(:domain) { create(:shared_domain, router_group_guid:) } let(:port) { 8080 } let(:host) { '' } let(:path) { '' } @@ -29,7 +29,7 @@ module VCAP::CloudController let(:port) { nil } context 'with a tcp domain' do - let(:domain) { SharedDomain.make(router_group_guid:) } + let(:domain) { create(:shared_domain, router_group_guid:) } it 'adds port_required error to the route' do validator.validate @@ -39,7 +39,7 @@ module VCAP::CloudController end context 'when creating an internal route' do - let(:domain) { SharedDomain.make(internal: true) } + let(:domain) { create(:shared_domain, internal: true) } context 'and the path value is not null' do let(:path) { '/path' } @@ -71,7 +71,7 @@ module VCAP::CloudController context 'when creating a route with a port value that is not null' do context 'with a domain without a router_group_guid' do - let(:domain) { SharedDomain.make(router_group_guid: nil) } + let(:domain) { create(:shared_domain, router_group_guid: nil) } it 'adds port_unsupported error to the route' do validator.validate @@ -146,8 +146,8 @@ module VCAP::CloudController end context 'in different domain' do - let(:another_domain) { SharedDomain.make(router_group_guid:) } - let(:another_route) { Route.new(domain: another_domain, port: port, space: Space.make) } + let(:another_domain) { create(:shared_domain, router_group_guid:) } + let(:another_route) { Route.new(domain: another_domain, port: port, space: create(:space)) } before do TestConfig.override(kubernetes: nil) @@ -162,8 +162,8 @@ module VCAP::CloudController end context 'when port is already taken in a different router group' do - let(:domain_in_different_router_group) { SharedDomain.make(router_group_guid: 'different-router-group') } - let(:another_route) { Route.new(domain: domain_in_different_router_group, port: port, space: Space.make) } + let(:domain_in_different_router_group) { create(:shared_domain, router_group_guid: 'different-router-group') } + let(:another_route) { Route.new(domain: domain_in_different_router_group, port: port, space: create(:space)) } before do TestConfig.override(kubernetes: nil) @@ -178,7 +178,7 @@ module VCAP::CloudController end context 'with a domain without a router_group_guid' do - let(:domain) { SharedDomain.make(router_group_guid: nil) } + let(:domain) { create(:shared_domain, router_group_guid: nil) } it 'adds port_unsupported error to the route model' do validator.validate diff --git a/spec/unit/lib/cloud_controller/security/security_context_configurer_spec.rb b/spec/unit/lib/cloud_controller/security/security_context_configurer_spec.rb index f2c55060af8..7137438b677 100644 --- a/spec/unit/lib/cloud_controller/security/security_context_configurer_spec.rb +++ b/spec/unit/lib/cloud_controller/security/security_context_configurer_spec.rb @@ -40,7 +40,7 @@ module Security let(:token_information) { { 'user_id' => user_id, 'client_id' => 'foobar' } } context 'when the specified user already exists (without information about client-ness)' do - let!(:user) { User.make(guid: user_id, is_oauth_client: nil) } + let!(:user) { create(:user, guid: user_id, is_oauth_client: nil) } it 'sets that user on security context' do configurer.configure(auth_token) @@ -52,7 +52,7 @@ module Security end context 'when the specified user already exists as a client' do - let!(:user) { User.make(guid: user_id, is_oauth_client: true) } + let!(:user) { create(:user, guid: user_id, is_oauth_client: true) } it 'sets invalid token' do configurer.configure(auth_token) @@ -76,7 +76,7 @@ module Security context 'when the specified user is created after verifying it does not exist' do it 'finds the created user' do - User.make(guid: user_id) + create(:user, guid: user_id) allow(User).to receive(:find) do allow(User).to receive(:find).and_call_original nil @@ -89,7 +89,7 @@ module Security context 'when only a client_id is present' do let(:token_information) { { 'client_id' => user_id } } - let!(:user) { User.make(guid: user_id) } + let!(:user) { create(:user, guid: user_id) } let(:uaa_client) { double(UaaClient) } before do @@ -143,7 +143,7 @@ module Security end context 'theres a user with the same id' do - let!(:user) { User.make(guid: user_id, is_oauth_client: false) } + let!(:user) { create(:user, guid: user_id, is_oauth_client: false) } before do expect(uaa_client).not_to receive(:usernames_for_ids) diff --git a/spec/unit/lib/cloud_controller/seeds_spec.rb b/spec/unit/lib/cloud_controller/seeds_spec.rb index 7cb621bcd7e..751ab9fffda 100644 --- a/spec/unit/lib/cloud_controller/seeds_spec.rb +++ b/spec/unit/lib/cloud_controller/seeds_spec.rb @@ -51,7 +51,7 @@ module VCAP::CloudController end context 'and the name is already taken' do - let(:isolation_segment_model) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } # this means that it will fail our deployment. To correct this issue we could # redeploy with what the old 'shared' isolation segment name @@ -185,7 +185,7 @@ module VCAP::CloudController context 'when default quota definition exists' do before do - QuotaDefinition.make(name: 'default') + create(:quota_definition, name: 'default') end it 'creates the system organization when the organization does not already exist' do @@ -201,7 +201,7 @@ module VCAP::CloudController it 'warns when the system organization exists and has a different quota' do Seeds.create_seed_organizations(config) org = Organization.find(name: 'the-system_domain-org-name') - QuotaDefinition.make(name: 'runaway') + create(:quota_definition, name: 'runaway') org.quota_definition = QuotaDefinition.find(name: 'runaway') org.save(validate: false) # See tracker story #61090364 @@ -240,7 +240,7 @@ module VCAP::CloudController Domain.dataset.destroy Organization.dataset.destroy QuotaDefinition.dataset.destroy - QuotaDefinition.make(name: 'default') + create(:quota_definition, name: 'default') Seeds.create_seed_organizations(config) end @@ -272,7 +272,7 @@ module VCAP::CloudController PrivateDomain.create( name: config.get(:system_domain), - owning_organization: Organization.make + owning_organization: create(:organization) ) Seeds.create_seed_domains(config, system_org) end @@ -303,7 +303,7 @@ module VCAP::CloudController let(:system_domain) { 'system.example.com' } before do - SharedDomain.make(name: 'system.example.com') + create(:shared_domain, name: 'system.example.com') end it 'that shared domain is not modified' do @@ -319,7 +319,7 @@ module VCAP::CloudController before do TestConfig.override(system_hostnames: %w[api uaa]) - SharedDomain.make(name: 'example.com') + create(:shared_domain, name: 'example.com') end it 'returns an error about app domain overlapping with system hostnames' do @@ -545,7 +545,7 @@ module VCAP::CloudController context 'when there are exisiting security groups' do before do - SecurityGroup.make(name: 'EXISTING SECURITY GROUP') + create(:security_group, name: 'EXISTING SECURITY GROUP') end it 'does nothing' do diff --git a/spec/unit/lib/cloud_controller/stack_state_validator_spec.rb b/spec/unit/lib/cloud_controller/stack_state_validator_spec.rb index ebb239b89c7..eafe2e6dfd5 100644 --- a/spec/unit/lib/cloud_controller/stack_state_validator_spec.rb +++ b/spec/unit/lib/cloud_controller/stack_state_validator_spec.rb @@ -4,7 +4,7 @@ module VCAP::CloudController RSpec.describe StackStateValidator do describe '.validate_for_new_app!' do context 'when stack is Active' do - let(:stack) { Stack.make(state: StackStates::STACK_ACTIVE, description: 'My ACTIVE stack') } + let(:stack) { create(:stack, state: StackStates::STACK_ACTIVE, description: 'My ACTIVE stack') } it 'returns empty warnings' do result = StackStateValidator.validate_for_new_app!(stack) @@ -17,7 +17,7 @@ module VCAP::CloudController end context 'when stack is DEPRECATED' do - let(:stack) { Stack.make(state: StackStates::STACK_DEPRECATED, description: 'My DEPRECATED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_DEPRECATED, description: 'My DEPRECATED stack') } it 'returns a warning message' do result = StackStateValidator.validate_for_new_app!(stack) @@ -39,7 +39,7 @@ module VCAP::CloudController end context 'when stack is RESTRICTED' do - let(:stack) { Stack.make(state: StackStates::STACK_RESTRICTED, description: 'My RESTRICTED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_RESTRICTED, description: 'My RESTRICTED stack') } it 'raise RestrictedStackError' do expect do @@ -61,7 +61,7 @@ module VCAP::CloudController end context 'when stack is DISABLED' do - let(:stack) { Stack.make(state: StackStates::STACK_DISABLED, description: 'My DEPRECATED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_DISABLED, description: 'My DEPRECATED stack') } it 'returns a disabled error message' do expect do @@ -79,7 +79,7 @@ module VCAP::CloudController describe '.validate_for_restaging_app!' do context 'when stack is Active' do - let(:stack) { Stack.make(state: StackStates::STACK_ACTIVE, description: 'My ACTIVE stack') } + let(:stack) { create(:stack, state: StackStates::STACK_ACTIVE, description: 'My ACTIVE stack') } it 'for restaging returns empty warnings' do result = StackStateValidator.validate_for_restaging!(stack) @@ -92,7 +92,7 @@ module VCAP::CloudController end context 'when stack is DEPRECATED' do - let(:stack) { Stack.make(state: StackStates::STACK_DEPRECATED, description: 'My DEPRECATED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_DEPRECATED, description: 'My DEPRECATED stack') } it 'returns a warning message' do result = StackStateValidator.validate_for_restaging!(stack) @@ -114,7 +114,7 @@ module VCAP::CloudController end context 'when stack is RESTRICTED' do - let(:stack) { Stack.make(state: StackStates::STACK_RESTRICTED, description: 'My RESTRICTED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_RESTRICTED, description: 'My RESTRICTED stack') } it 'returns warnings for restaging' do result = StackStateValidator.validate_for_restaging!(stack) @@ -129,7 +129,7 @@ module VCAP::CloudController end context 'when stack is DISABLED' do - let(:stack) { Stack.make(state: StackStates::STACK_DISABLED, description: 'My DEPRECATED stack') } + let(:stack) { create(:stack, state: StackStates::STACK_DISABLED, description: 'My DEPRECATED stack') } it 'returns a disabled error message' do expect do @@ -146,7 +146,7 @@ module VCAP::CloudController end describe '.build_deprecation_warning' do - let(:stack) { Stack.make(name: 'cflinuxfs3', description: 'End of life December 2025') } + let(:stack) { create(:stack, name: 'cflinuxfs3', description: 'End of life December 2025') } it 'returns formatted warning string' do warning = StackStateValidator.build_stack_warning(stack, StackStates::STACK_DEPRECATED) @@ -171,7 +171,7 @@ module VCAP::CloudController describe 'state_reason in messages' do describe '.build_stack_warning' do context 'when state_reason is present' do - let(:stack) { Stack.make(name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: 'EOL on 2026-12-31') } + let(:stack) { create(:stack, name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: 'EOL on 2026-12-31') } it 'includes state_reason in warning message' do warning = StackStateValidator.build_stack_warning(stack, StackStates::STACK_DEPRECATED) @@ -182,7 +182,7 @@ module VCAP::CloudController end context 'when state_reason is nil' do - let(:stack) { Stack.make(name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: nil) } + let(:stack) { create(:stack, name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: nil) } it 'does not append state_reason to warning message' do warning = StackStateValidator.build_stack_warning(stack, StackStates::STACK_DEPRECATED) @@ -193,7 +193,7 @@ module VCAP::CloudController end context 'when state_reason is empty string' do - let(:stack) { Stack.make(name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: '') } + let(:stack) { create(:stack, name: 'old-stack', state: StackStates::STACK_DEPRECATED, state_reason: '') } it 'does not append state_reason to warning message' do warning = StackStateValidator.build_stack_warning(stack, StackStates::STACK_DEPRECATED) @@ -204,7 +204,7 @@ module VCAP::CloudController describe '.build_stack_error' do context 'when state_reason is present' do - let(:stack) { Stack.make(name: 'disabled-stack', state: StackStates::STACK_DISABLED, state_reason: 'Security vulnerability') } + let(:stack) { create(:stack, name: 'disabled-stack', state: StackStates::STACK_DISABLED, state_reason: 'Security vulnerability') } it 'includes state_reason in error message' do error = StackStateValidator.build_stack_error(stack, StackStates::STACK_DISABLED) @@ -215,7 +215,7 @@ module VCAP::CloudController end context 'when state_reason is nil' do - let(:stack) { Stack.make(name: 'disabled-stack', state: StackStates::STACK_DISABLED, state_reason: nil) } + let(:stack) { create(:stack, name: 'disabled-stack', state: StackStates::STACK_DISABLED, state_reason: nil) } it 'does not append state_reason to error message' do error = StackStateValidator.build_stack_error(stack, StackStates::STACK_DISABLED) @@ -228,7 +228,7 @@ module VCAP::CloudController describe 'integration with validation methods' do context 'when deprecated stack has state_reason' do - let(:stack) { Stack.make(state: StackStates::STACK_DEPRECATED, state_reason: 'Use cflinuxfs5 instead') } + let(:stack) { create(:stack, state: StackStates::STACK_DEPRECATED, state_reason: 'Use cflinuxfs5 instead') } it 'includes state_reason in warning for new app' do warnings = StackStateValidator.validate_for_new_app!(stack) @@ -242,7 +242,7 @@ module VCAP::CloudController end context 'when disabled stack has state_reason' do - let(:stack) { Stack.make(state: StackStates::STACK_DISABLED, state_reason: 'Critical security issue') } + let(:stack) { create(:stack, state: StackStates::STACK_DISABLED, state_reason: 'Critical security issue') } it 'includes state_reason in error for new app' do expect do @@ -258,7 +258,7 @@ module VCAP::CloudController end context 'when restricted stack has state_reason' do - let(:stack) { Stack.make(state: StackStates::STACK_RESTRICTED, state_reason: 'Limited availability') } + let(:stack) { create(:stack, state: StackStates::STACK_RESTRICTED, state_reason: 'Limited availability') } it 'includes state_reason in error for new app' do expect do @@ -275,10 +275,10 @@ module VCAP::CloudController end describe 'state behavior matrix' do - let(:active_stack) { Stack.make(state: StackStates::STACK_ACTIVE) } - let(:deprecated_stack) { Stack.make(state: StackStates::STACK_DEPRECATED) } - let(:restricted_stack) { Stack.make(state: StackStates::STACK_RESTRICTED) } - let(:disabled_stack) { Stack.make(state: StackStates::STACK_DISABLED) } + let(:active_stack) { create(:stack, state: StackStates::STACK_ACTIVE) } + let(:deprecated_stack) { create(:stack, state: StackStates::STACK_DEPRECATED) } + let(:restricted_stack) { create(:stack, state: StackStates::STACK_RESTRICTED) } + let(:disabled_stack) { create(:stack, state: StackStates::STACK_DISABLED) } describe 'new app creation' do it 'allows ACTIVE without warnings' do diff --git a/spec/unit/lib/cloud_controller/validate_database_keys_spec.rb b/spec/unit/lib/cloud_controller/validate_database_keys_spec.rb index fbb938c92e0..330122ad118 100644 --- a/spec/unit/lib/cloud_controller/validate_database_keys_spec.rb +++ b/spec/unit/lib/cloud_controller/validate_database_keys_spec.rb @@ -15,12 +15,12 @@ module VCAP::CloudController describe '.can_decrypt_all_rows!' do let(:space) { Space.first } - let(:historical_app) { AppModel.make(space:) } - let(:app1) { AppModel.make } - let(:app2) { AppModel.make } - let(:app3) { AppModel.make } - let(:service_instance) { ServiceInstance.make(space:) } - let(:service_binding) { ServiceBinding.make(service_instance: service_instance, app: historical_app) } + let(:historical_app) { create(:app_model, space:) } + let(:app1) { create(:app_model) } + let(:app2) { create(:app_model) } + let(:app3) { create(:app_model) } + let(:service_instance) { create(:service_instance, space:) } + let(:service_binding) { create(:service_binding, service_instance: service_instance, app: historical_app) } let(:label1) { 'encryption_key_label_1' } let(:label2) { 'encryption_key_label_2' } let(:label3) { 'encryption_key_label_3' } diff --git a/spec/unit/lib/database/batch_delete_spec.rb b/spec/unit/lib/database/batch_delete_spec.rb index 06d738036df..cb728bd5064 100644 --- a/spec/unit/lib/database/batch_delete_spec.rb +++ b/spec/unit/lib/database/batch_delete_spec.rb @@ -6,7 +6,7 @@ before do 10.times do |t| date = t.days.ago - VCAP::CloudController::Event.make(created_at: date) + create(:event, created_at: date) end end diff --git a/spec/unit/lib/database/old_record_cleanup_spec.rb b/spec/unit/lib/database/old_record_cleanup_spec.rb index 7b2258bbaec..070b5abda81 100644 --- a/spec/unit/lib/database/old_record_cleanup_spec.rb +++ b/spec/unit/lib/database/old_record_cleanup_spec.rb @@ -3,10 +3,10 @@ RSpec.describe Database::OldRecordCleanup do describe '#delete' do - let!(:stale_event1) { VCAP::CloudController::Event.make(created_at: 1.day.ago - 1.minute) } - let!(:stale_event2) { VCAP::CloudController::Event.make(created_at: 2.days.ago) } + let!(:stale_event1) { create(:event, created_at: 1.day.ago - 1.minute) } + let!(:stale_event2) { create(:event, created_at: 2.days.ago) } - let!(:fresh_event) { VCAP::CloudController::Event.make(created_at: 1.day.ago + 1.minute) } + let!(:fresh_event) { create(:event, created_at: 1.day.ago + 1.minute) } it 'deletes records older than specified days' do record_cleanup = Database::OldRecordCleanup.new(VCAP::CloudController::Event, 1) diff --git a/spec/unit/lib/rest_controller/object_renderer_spec.rb b/spec/unit/lib/rest_controller/object_renderer_spec.rb index d84799ef2f1..2750b3c738f 100644 --- a/spec/unit/lib/rest_controller/object_renderer_spec.rb +++ b/spec/unit/lib/rest_controller/object_renderer_spec.rb @@ -11,7 +11,7 @@ module VCAP::CloudController::RestController let(:controller) { VCAP::CloudController::TestModelSecondLevelsController } let(:opts) { {} } - let(:instance) { VCAP::CloudController::TestModelSecondLevel.make } + let(:instance) { create(:test_model_second_level) } context 'when asked inline_relations_depth is more than max inline_relations_depth' do before do @@ -51,7 +51,7 @@ module VCAP::CloudController::RestController end describe 'object transformer' do - let(:instance) { VCAP::CloudController::TestModel.make } + let(:instance) { create(:test_model) } let(:object_transformer) { double(:object_transformer) } before do @@ -70,23 +70,23 @@ module VCAP::CloudController::RestController end context 'service_plan renderer' do - let(:user) { VCAP::CloudController::User.make } - let(:organization) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization:) } + let(:user) { create(:user) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } let(:controller) { VCAP::CloudController::ServicePlansController } let(:opts) { {} } - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: broker) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, public: false, active: false) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } + let(:service_plan) { create(:service_plan, service: service, public: false, active: false) } before do space.organization.add_user(user) space.add_developer(user) - set_current_user_as_admin + set_current_user_as_admin(user: create(:user)) end it 'renders a service plan accessible via user\'s service instance only' do - VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) + create(:managed_service_instance, space:, service_plan:) set_current_user(user) result = Oj.load(subject.render_json_with_read_privileges(controller, service_plan, opts)) expect(result['entity']['service_guid']).to eq(service.guid) diff --git a/spec/unit/lib/rest_controller/paginated_collection_renderer_spec.rb b/spec/unit/lib/rest_controller/paginated_collection_renderer_spec.rb index 328845b7c6b..e7b7d6edefa 100644 --- a/spec/unit/lib/rest_controller/paginated_collection_renderer_spec.rb +++ b/spec/unit/lib/rest_controller/paginated_collection_renderer_spec.rb @@ -53,8 +53,8 @@ module VCAP::CloudController::RestController let(:serializer) { instance_double(PreloadedObjectSerializer) } before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) counter = 0 allow(serializer).to receive(:serialize).with(any_args) do if counter == 0 @@ -101,8 +101,8 @@ module VCAP::CloudController::RestController context 'was not specified' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) end let(:default_results_per_page) { 1 } @@ -190,9 +190,9 @@ module VCAP::CloudController::RestController context 'when orphan_relations' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) end let(:page) { 2 } @@ -236,9 +236,9 @@ module VCAP::CloudController::RestController context 'when exclude-relations' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) end let(:opts) do @@ -274,9 +274,9 @@ module VCAP::CloudController::RestController context 'when include-relations' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) end let(:opts) do @@ -312,9 +312,9 @@ module VCAP::CloudController::RestController context 'order-direction' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) end let(:opts) do @@ -366,9 +366,9 @@ module VCAP::CloudController::RestController context 'order-by' do before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) end let(:opts) do @@ -407,7 +407,7 @@ module VCAP::CloudController::RestController context 'when collection_transformer is given' do let(:collection_transformer) { double('collection_transformer') } - let!(:test_model) { VCAP::CloudController::TestModel.make } + let!(:test_model) { create(:test_model) } it 'passes the populated dataset to the transformer' do expect(collection_transformer).to receive(:transform) do |collection| @@ -430,9 +430,9 @@ module VCAP::CloudController::RestController let(:results_per_page) { 1 } before do - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make - VCAP::CloudController::TestModel.make + create(:test_model) + create(:test_model) + create(:test_model) opts[:q] = 'organization_guid:1234' end diff --git a/spec/unit/lib/services/service_brokers/service_broker_registration_spec.rb b/spec/unit/lib/services/service_brokers/service_broker_registration_spec.rb index 0efa478b3e0..46a761b0cdd 100644 --- a/spec/unit/lib/services/service_brokers/service_broker_registration_spec.rb +++ b/spec/unit/lib/services/service_brokers/service_broker_registration_spec.rb @@ -11,7 +11,7 @@ module VCAP::Services::ServiceBrokers let(:basic_auth) { %w[cc auth1234] } describe 'initializing' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } its(:broker) { is_expected.to eq(broker) } its(:warnings) { is_expected.to eq([]) } @@ -224,7 +224,7 @@ module VCAP::Services::ServiceBrokers before do allow(catalog).to receive(:valid?).and_return(true) allow(client_manager).to receive(:synchronize_clients_with_catalog) { - VCAP::CloudController::ServiceDashboardClient.make(uaa_id: 'my-uaa-id', service_broker_id: broker.id) + create(:service_dashboard_client, uaa_id: 'my-uaa-id', service_broker_id: broker.id) } allow(service_manager).to receive(:sync_services_and_plans).and_raise(CloudController::Errors::ApiError.new_from_details('ServiceBrokerCatalogInvalid', 'omg it broke')) end @@ -318,12 +318,10 @@ module VCAP::Services::ServiceBrokers describe '#update' do let(:old_broker_host) { 'broker.example.com' } let!(:broker) do - VCAP::CloudController::ServiceBroker.make( - name: 'Cool Broker', - broker_url: "http://#{old_broker_host}", - auth_username: 'cc', - auth_password: 'auth1234' - ) + create(:service_broker, name: 'Cool Broker', + broker_url: "http://#{old_broker_host}", + auth_username: 'cc', + auth_password: 'auth1234') end let(:new_broker_host) { 'new-broker.com' } diff --git a/spec/unit/lib/services/service_brokers/service_broker_remover_spec.rb b/spec/unit/lib/services/service_brokers/service_broker_remover_spec.rb index b02084643f6..b170d9b5f73 100644 --- a/spec/unit/lib/services/service_brokers/service_broker_remover_spec.rb +++ b/spec/unit/lib/services/service_brokers/service_broker_remover_spec.rb @@ -6,10 +6,10 @@ module VCAP::Services::ServiceBrokers let(:services_events_repository) do VCAP::CloudController::Repositories::ServiceEventRepository.new(VCAP::CloudController::UserAuditInfo.new(user_guid: user.guid, user_email: email)) end - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:dashboard_client_manager) { instance_double(VCAP::Services::SSO::DashboardClientManager) } let(:security_context) { class_double(VCAP::CloudController::SecurityContext, current_user: user, current_user_email: email) } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:email) { 'email@example.com' } before do @@ -42,8 +42,8 @@ module VCAP::Services::ServiceBrokers end it 'records service and service plan deletion events' do - service = VCAP::CloudController::Service.make(service_broker: broker) - plan = VCAP::CloudController::ServicePlan.make(service:) + service = create(:service, service_broker: broker) + plan = create(:service_plan, service:) remover.delete(brokers) @@ -77,8 +77,8 @@ module VCAP::Services::ServiceBrokers end it 'records service and service_plan deletion events' do - service = VCAP::CloudController::Service.make(service_broker: broker) - plan = VCAP::CloudController::ServicePlan.make(service:) + service = create(:service, service_broker: broker) + plan = create(:service_plan, service:) remover.remove(broker) diff --git a/spec/unit/lib/services/service_brokers/service_client_provider_spec.rb b/spec/unit/lib/services/service_brokers/service_client_provider_spec.rb index c7e1ca9f00a..df1fa7ad81f 100644 --- a/spec/unit/lib/services/service_brokers/service_client_provider_spec.rb +++ b/spec/unit/lib/services/service_brokers/service_client_provider_spec.rb @@ -4,7 +4,7 @@ describe '#provide' do context 'service instances' do context 'when the instance is a UserProvidedServiceInstance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } before do allow(VCAP::Services::ServiceBrokers::UserProvided::Client).to receive(:new).and_call_original @@ -17,7 +17,7 @@ end context 'when the instance is a ManagedServiceInstance' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:expected_attrs) do { url: service_instance.service_broker.broker_url, @@ -38,7 +38,7 @@ end context 'service brokers' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:expected_attrs) do { url: broker.broker_url, diff --git a/spec/unit/lib/services/service_brokers/service_manager_spec.rb b/spec/unit/lib/services/service_brokers/service_manager_spec.rb index 29af9d7fe0c..0c9cb511178 100644 --- a/spec/unit/lib/services/service_brokers/service_manager_spec.rb +++ b/spec/unit/lib/services/service_brokers/service_manager_spec.rb @@ -5,7 +5,7 @@ module VCAP::Services::ServiceBrokers RSpec.describe ServiceManager do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:service_id) { Sham.guid } let(:service_name) { Sham.name } @@ -101,7 +101,7 @@ module VCAP::Services::ServiceBrokers 'email' => user_email } end - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } before do VCAP::CloudController::SecurityContext.set(user, token) @@ -445,10 +445,8 @@ module VCAP::Services::ServiceBrokers context 'when a service already exists' do let!(:service) do - VCAP::CloudController::Service.make( - service_broker: broker, - unique_id: service_id - ) + create(:service, service_broker: broker, + unique_id: service_id) end it 'updates the existing service' do @@ -465,14 +463,12 @@ module VCAP::Services::ServiceBrokers end context 'when the broker is different' do - let(:different_broker) { VCAP::CloudController::ServiceBroker.make } + let(:different_broker) { create(:service_broker) } context 'and when there is a single service exposed from a different broker' do let!(:service) do - VCAP::CloudController::Service.make( - service_broker: different_broker, - unique_id: service_id - ) + create(:service, service_broker: different_broker, + unique_id: service_id) end it 'creates the new plan' do @@ -492,10 +488,8 @@ module VCAP::Services::ServiceBrokers context 'and when there are two service with identical ids exposed from different brokers' do let!(:service_2) do - VCAP::CloudController::Service.make( - service_broker: different_broker, - unique_id: service_id - ) + create(:service, service_broker: different_broker, + unique_id: service_id) end it 'updates the service for the correct broker' do @@ -529,11 +523,9 @@ module VCAP::Services::ServiceBrokers context 'when a service is renamed and a new service is added with the old name' do let!(:service) do - VCAP::CloudController::Service.make( - label: service_name, - service_broker: broker, - unique_id: service_id - ) + create(:service, label: service_name, + service_broker: broker, + unique_id: service_id) end let(:catalog_hash) do @@ -586,16 +578,14 @@ module VCAP::Services::ServiceBrokers context 'and a plan already exists' do let!(:plan) do - VCAP::CloudController::ServicePlan.make( - service: service, - unique_id: plan_id, - free: true, - bindable: false, - maximum_polling_duration: 0, - maintenance_info: nil, - create_instance_schema: nil, - update_instance_schema: nil - ) + create(:service_plan, service: service, + unique_id: plan_id, + free: true, + bindable: false, + maximum_polling_duration: 0, + maintenance_info: nil, + create_instance_schema: nil, + update_instance_schema: nil) end it 'updates the existing plan' do @@ -656,14 +646,12 @@ module VCAP::Services::ServiceBrokers end context 'when the plan belongs to a different service' do - let(:different_service) { VCAP::CloudController::Service.make } + let(:different_service) { create(:service) } context 'and when there is only one plan exposed from that service' do let!(:plan) do - VCAP::CloudController::ServicePlan.make( - service: different_service, - unique_id: plan_id - ) + create(:service_plan, service: different_service, + unique_id: plan_id) end it 'creates a new plan associated with the service and keeps the old unchanged' do @@ -687,10 +675,8 @@ module VCAP::Services::ServiceBrokers context 'when there are two plans with the same id that belong to different services' do let!(:plan_2) do - VCAP::CloudController::ServicePlan.make( - service: different_service, - unique_id: plan_id - ) + create(:service_plan, service: different_service, + unique_id: plan_id) end it 'updates the plan that belongs to the corresponding service and keeps the other unchanged' do @@ -710,15 +696,13 @@ module VCAP::Services::ServiceBrokers context 'when a plan is renamed and a new plan is added with the old name' do let!(:plan) do - VCAP::CloudController::ServicePlan.make( - name: plan_name, - service: service, - unique_id: plan_id, - free: true, - bindable: false, - create_instance_schema: nil, - update_instance_schema: nil - ) + create(:service_plan, name: plan_name, + service: service, + unique_id: plan_id, + free: true, + bindable: false, + create_instance_schema: nil, + update_instance_schema: nil) end let(:catalog_hash) do @@ -805,11 +789,9 @@ module VCAP::Services::ServiceBrokers context 'and a plan exists that has been removed from the broker catalog' do let(:missing_plan_name) { '111' } let!(:missing_plan) do - VCAP::CloudController::ServicePlan.make( - service: service, - unique_id: 'nolongerexists', - name: missing_plan_name - ) + create(:service_plan, service: service, + unique_id: 'nolongerexists', + name: missing_plan_name) end it 'deletes the plan from the db' do @@ -841,10 +823,10 @@ module VCAP::Services::ServiceBrokers let(:missing_service2_plan_name) { '111-B' } before do - VCAP::CloudController::ManagedServiceInstance.make(service_plan: missing_plan) + create(:managed_service_instance, service_plan: missing_plan) - missing_plan2 = VCAP::CloudController::ServicePlan.make(service: service, unique_id: 'plan2_nolongerexists', name: missing_plan2_name) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: missing_plan2) + missing_plan2 = create(:service_plan, service: service, unique_id: 'plan2_nolongerexists', name: missing_plan2_name) + create(:managed_service_instance, service_plan: missing_plan2) end it 'marks the existing plan as inactive' do @@ -858,9 +840,9 @@ module VCAP::Services::ServiceBrokers context 'when there are existing service instances' do before do - missing_service2 = VCAP::CloudController::Service.make(service_broker: broker, label: missing_service2_name) - missing_service2_plan = VCAP::CloudController::ServicePlan.make(service: missing_service2, unique_id: 'i_be_gone', name: missing_service2_plan_name) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: missing_service2_plan) + missing_service2 = create(:service, service_broker: broker, label: missing_service2_name) + missing_service2_plan = create(:service_plan, service: missing_service2, unique_id: 'i_be_gone', name: missing_service2_plan_name) + create(:managed_service_instance, service_plan: missing_service2_plan) end it 'adds a formatted warning' do @@ -897,20 +879,16 @@ module VCAP::Services::ServiceBrokers context 'when a service no longer exists' do let!(:service) do - VCAP::CloudController::Service.make( - service_broker: broker, - unique_id: 'nolongerexists', - label: 'was-an-awesome-service' - ) + create(:service, service_broker: broker, + unique_id: 'nolongerexists', + label: 'was-an-awesome-service') end let!(:service_owned_by_other_broker) do - other_service_broker = VCAP::CloudController::ServiceBroker.make + other_service_broker = create(:service_broker) - VCAP::CloudController::Service.make( - service_broker: other_service_broker, - unique_id: 'other-service-id' - ) + create(:service, service_broker: other_service_broker, + unique_id: 'other-service-id') end it 'deletes the service' do @@ -942,17 +920,13 @@ module VCAP::Services::ServiceBrokers context 'but it has an active plan' do before do - plan = VCAP::CloudController::ServicePlan.make( - service: service, - unique_id: 'also_no_longer_in_catalog' - ) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: plan) + plan = create(:service_plan, service: service, + unique_id: 'also_no_longer_in_catalog') + create(:managed_service_instance, service_plan: plan) - other_broker_plan = VCAP::CloudController::ServicePlan.make( - service: service_owned_by_other_broker, - unique_id: 'in-another-brokers-catalog' - ) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: other_broker_plan) + other_broker_plan = create(:service_plan, service: service_owned_by_other_broker, + unique_id: 'in-another-brokers-catalog') + create(:managed_service_instance, service_plan: other_broker_plan) end it 'marks the existing service as inactive' do @@ -976,8 +950,8 @@ module VCAP::Services::ServiceBrokers end context 'when a sql validtion error is thrown' do - let!(:service_offering) { VCAP::CloudController::Service.make(service_broker: broker, unique_id: service_id) } - let!(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering, name: plan_name, unique_id: Sham.guid) } + let!(:service_offering) { create(:service, service_broker: broker, unique_id: service_id) } + let!(:service_plan) { create(:service_plan, service: service_offering, name: plan_name, unique_id: Sham.guid) } after do service_plan.destroy diff --git a/spec/unit/lib/services/service_brokers/user_provided/client_spec.rb b/spec/unit/lib/services/service_brokers/user_provided/client_spec.rb index 282f5269cdb..e0900acb8a6 100644 --- a/spec/unit/lib/services/service_brokers/user_provided/client_spec.rb +++ b/spec/unit/lib/services/service_brokers/user_provided/client_spec.rb @@ -6,7 +6,7 @@ module VCAP::Services subject(:client) { ServiceBrokers::UserProvided::Client.new } describe '#provision' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:instance) { create(:user_provided_service_instance) } it 'exists' do client.provision(instance) @@ -14,11 +14,11 @@ module VCAP::Services end describe '#bind' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:instance) { create(:user_provided_service_instance) } context 'when binding to an app' do let(:binding) do - VCAP::CloudController::ServiceBinding.make(service_instance: instance) + create(:service_binding, service_instance: instance) end it 'sets relevant attributes of the instance' do @@ -32,7 +32,7 @@ module VCAP::Services end context 'when binding to a service with a route_service_url' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing) } + let(:instance) { create(:user_provided_service_instance, :routing) } it 'sets relevant attributes of the instance' do attributes = client.bind(binding) @@ -47,12 +47,10 @@ module VCAP::Services end context 'when binding to a route' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make(:routing) } + let(:instance) { create(:user_provided_service_instance, :routing) } let(:binding) do - VCAP::CloudController::RouteBinding.make( - service_instance: instance - ) + create(:route_binding, service_instance: instance) end it 'sets relevant attributes of the instance' do diff --git a/spec/unit/lib/services/service_brokers/v2/catalog_service_spec.rb b/spec/unit/lib/services/service_brokers/v2/catalog_service_spec.rb index df91caf8a10..d361761ed20 100644 --- a/spec/unit/lib/services/service_brokers/v2/catalog_service_spec.rb +++ b/spec/unit/lib/services/service_brokers/v2/catalog_service_spec.rb @@ -448,7 +448,7 @@ def build_valid_dashboard_client_attrs(opts={}) end describe '#cc_service' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:broker_provided_id) { SecureRandom.uuid } let(:catalog_service) do CatalogService.new(service_broker, @@ -461,10 +461,8 @@ def build_valid_dashboard_client_attrs(opts={}) context 'when a Service exists with the same service broker and broker provided id' do let!(:cc_service) do - VCAP::CloudController::Service.make( - unique_id: broker_provided_id, - service_broker: service_broker - ) + create(:service, unique_id: broker_provided_id, + service_broker: service_broker) end it 'is that Service' do @@ -474,7 +472,7 @@ def build_valid_dashboard_client_attrs(opts={}) context 'when a Service exists with a different service broker, but the same broker provided id' do let!(:cc_service) do - VCAP::CloudController::Service.make(unique_id: broker_provided_id) + create(:service, unique_id: broker_provided_id) end it 'is nil' do @@ -484,7 +482,7 @@ def build_valid_dashboard_client_attrs(opts={}) end describe '#route_service?' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } context 'when requires include "route_forwarding"' do let(:service) { CatalogService.new(service_broker, 'requires' => ['route_forwarding']) } diff --git a/spec/unit/lib/services/service_brokers/v2/catalog_spec.rb b/spec/unit/lib/services/service_brokers/v2/catalog_spec.rb index 654b81ce07f..a26fa4654cc 100644 --- a/spec/unit/lib/services/service_brokers/v2/catalog_spec.rb +++ b/spec/unit/lib/services/service_brokers/v2/catalog_spec.rb @@ -2,7 +2,7 @@ module VCAP::Services::ServiceBrokers::V2 RSpec.describe Catalog do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } def service_entry(opts={}) { @@ -127,14 +127,14 @@ def build_service(attrs={}) } end let(:broker) do - broker = VCAP::CloudController::ServiceBroker.make - old_service = VCAP::CloudController::Service.make(label: 'clashing-service-name', service_broker: broker) - old_plan = VCAP::CloudController::ServicePlan.make(service: old_service) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: old_plan) + broker = create(:service_broker) + old_service = create(:service, label: 'clashing-service-name', service_broker: broker) + old_plan = create(:service_plan, service: old_service) + create(:managed_service_instance, service_plan: old_plan) - old_service = VCAP::CloudController::Service.make(label: 'clashing-service-name2', service_broker: broker) - old_plan = VCAP::CloudController::ServicePlan.make(service: old_service) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: old_plan) + old_service = create(:service, label: 'clashing-service-name2', service_broker: broker) + old_plan = create(:service_plan, service: old_service) + create(:managed_service_instance, service_plan: old_plan) broker end @@ -158,9 +158,9 @@ def build_service(attrs={}) 'services' => [build_service('id' => '1', 'name' => 'clashing-service-name')] } end - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:old_service) { VCAP::CloudController::Service.make(label: 'clashing-service-name', service_broker: broker) } - let!(:old_plan) { VCAP::CloudController::ServicePlan.make(service: old_service) } + let(:broker) { create(:service_broker) } + let(:old_service) { create(:service, label: 'clashing-service-name', service_broker: broker) } + let!(:old_plan) { create(:service_plan, service: old_service) } it 'is valid' do catalog = Catalog.new(broker, new_catalog_hash) @@ -171,15 +171,15 @@ def build_service(attrs={}) end context 'when ids provided by the broker are the same' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:old_service) { VCAP::CloudController::Service.make(label: 'clashing-service-name', service_broker: broker) } + let(:broker) { create(:service_broker) } + let(:old_service) { create(:service, label: 'clashing-service-name', service_broker: broker) } let(:new_catalog_hash) do { 'services' => [build_service('id' => old_service.unique_id, 'name' => old_service.label)] } end - let(:old_plan) { VCAP::CloudController::ServicePlan.make(service: old_service) } - let!(:instance) { VCAP::CloudController::ManagedServiceInstance.make(service_plan: old_plan) } + let(:old_plan) { create(:service_plan, service: old_service) } + let!(:instance) { create(:managed_service_instance, service_plan: old_plan) } it 'is valid' do catalog = Catalog.new(broker, new_catalog_hash) @@ -195,13 +195,13 @@ def build_service(attrs={}) 'services' => [build_service('id' => '1'), build_service('id' => '2')] } end - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:another_broker) do - broker = VCAP::CloudController::ServiceBroker.make - old_service = VCAP::CloudController::Service.make(name: '1', service_broker: broker) - old_plan = VCAP::CloudController::ServicePlan.make(service: old_service) - VCAP::CloudController::ManagedServiceInstance.make(service_plan: old_plan) + broker = create(:service_broker) + old_service = create(:service, name: '1', service_broker: broker) + old_plan = create(:service_plan, service: old_service) + create(:managed_service_instance, service_plan: old_plan) broker end diff --git a/spec/unit/lib/services/service_brokers/v2/client_spec.rb b/spec/unit/lib/services/service_brokers/v2/client_spec.rb index 209834eb7f0..780848c10d4 100644 --- a/spec/unit/lib/services/service_brokers/v2/client_spec.rb +++ b/spec/unit/lib/services/service_brokers/v2/client_spec.rb @@ -2,7 +2,7 @@ module VCAP::Services::ServiceBrokers::V2 RSpec.describe Client do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:client_attrs) do { @@ -117,15 +117,13 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#provision' do - let(:plan) { VCAP::CloudController::ServicePlan.make } - let(:space) { VCAP::CloudController::Space.make } - let(:service_instance_operation) { VCAP::CloudController::ServiceInstanceOperation.make } + let(:plan) { create(:service_plan) } + let(:space) { create(:space) } + let(:service_instance_operation) { create(:service_instance_operation) } let(:instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - space: space, - name: 'instance-007' - ) + create(:managed_service_instance, service_plan: plan, + space: space, + name: 'instance-007') end let(:response_data) do @@ -193,16 +191,16 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when annotations are set' do - let!(:private_org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) } + let!(:private_org_annotation) { create(:organization_annotation_model, key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) } let!(:public_org_annotation) do - VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) + create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) end - let!(:private_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'bar', value: 'wow', space: instance.space) } - let!(:public_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } - let!(:public_legacy_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } - let!(:private_instance_annotation) { VCAP::CloudController::ServiceInstanceAnnotationModel.make(key_name: 'baz', value: 'wow', service_instance: instance) } + let!(:private_space_annotation) { create(:space_annotation_model, key_name: 'bar', value: 'wow', space: instance.space) } + let!(:public_space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } + let!(:public_legacy_space_annotation) { create(:space_annotation_model, key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } + let!(:private_instance_annotation) { create(:service_instance_annotation_model, key_name: 'baz', value: 'wow', service_instance: instance) } let!(:public_instance_annotation) do - VCAP::CloudController::ServiceInstanceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', service_instance: instance) + create(:service_instance_annotation_model, key_prefix: 'pre.fix', key_name: 'baz', value: 'wow', service_instance: instance) end it 'sends the annotations in the context' do @@ -520,13 +518,11 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#fetch_service_instance_last_operation' do - let(:plan) { VCAP::CloudController::ServicePlan.make } - let(:space) { VCAP::CloudController::Space.make } + let(:plan) { create(:service_plan) } + let(:space) { create(:space) } let(:instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - space: space - ) + create(:managed_service_instance, service_plan: plan, + space: space) end let(:response_data) do @@ -715,23 +711,19 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#update' do - let(:old_plan) { VCAP::CloudController::ServicePlan.make } - let(:new_plan) { VCAP::CloudController::ServicePlan.make } + let(:old_plan) { create(:service_plan) } + let(:new_plan) { create(:service_plan) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:last_operation) do - VCAP::CloudController::ServiceInstanceOperation.make( - type: 'create', - state: 'succeeded' - ) + create(:service_instance_operation, type: 'create', + state: 'succeeded') end let(:instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: old_plan, - space: space, - name: 'instance-007' - ) + create(:managed_service_instance, service_plan: old_plan, + space: space, + name: 'instance-007') end let(:service_plan_guid) { new_plan.guid } @@ -804,15 +796,15 @@ module VCAP::Services::ServiceBrokers::V2 context 'when annotations are set' do let!(:public_org_annotation1) do - VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) + create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) end let!(:public_org_annotation2) do - VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'bar', value: 'foo', resource_guid: instance.organization.guid) + create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'bar', value: 'foo', resource_guid: instance.organization.guid) end - let!(:private_org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_name: 'baz', value: 'wow', resource_guid: instance.organization.guid) } - let!(:public_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } - let!(:public_legacy_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } - let!(:private_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'bar', value: 'wow', space: instance.space) } + let!(:private_org_annotation) { create(:organization_annotation_model, key_name: 'baz', value: 'wow', resource_guid: instance.organization.guid) } + let!(:public_space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } + let!(:public_legacy_space_annotation) { create(:space_annotation_model, key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } + let!(:private_space_annotation) { create(:space_annotation_model, key_name: 'bar', value: 'wow', space: instance.space) } it 'sends the annotations in the context' do client.update(instance, new_plan, previous_values: { plan_id: '1234' }) @@ -1210,12 +1202,10 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#create_service_key' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:key) do - VCAP::CloudController::ServiceKey.make( - name: 'fake-service_key', - service_instance: instance - ) + create(:service_key, name: 'fake-service_key', + service_instance: instance) end let(:response_data) do @@ -1420,14 +1410,12 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#bind' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } - let(:app) { VCAP::CloudController::AppModel.make(space: instance.space) } + let(:instance) { create(:managed_service_instance) } + let(:app) { create(:app_model, space: instance.space) } let(:binding) do - VCAP::CloudController::ServiceBinding.make( - service_instance: instance, - app: app, - type: 'app' - ) + create(:service_binding, service_instance: instance, + app: app, + type: 'app') end let(:arbitrary_parameters) { {} } @@ -1490,15 +1478,15 @@ module VCAP::Services::ServiceBrokers::V2 context 'when annotations are set' do let!(:public_org_annotation1) do - VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) + create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'foo', value: 'bar', resource_guid: instance.organization.guid) end let!(:public_org_annotation2) do - VCAP::CloudController::OrganizationAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'bar', value: 'foo', resource_guid: instance.organization.guid) + create(:organization_annotation_model, key_prefix: 'pre.fix', key_name: 'bar', value: 'foo', resource_guid: instance.organization.guid) end - let!(:private_org_annotation) { VCAP::CloudController::OrganizationAnnotationModel.make(key_name: 'baz', value: 'wow', resource_guid: instance.organization.guid) } - let!(:public_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } - let!(:public_legacy_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } - let!(:private_space_annotation) { VCAP::CloudController::SpaceAnnotationModel.make(key_name: 'bar', value: 'wow', space: instance.space) } + let!(:private_org_annotation) { create(:organization_annotation_model, key_name: 'baz', value: 'wow', resource_guid: instance.organization.guid) } + let!(:public_space_annotation) { create(:space_annotation_model, key_prefix: 'pre.fix', key_name: 'bar', value: 'wow', space: instance.space) } + let!(:public_legacy_space_annotation) { create(:space_annotation_model, key_name: 'pre.fix/wow', value: 'bar', space: instance.space) } + let!(:private_space_annotation) { create(:space_annotation_model, key_name: 'bar', value: 'wow', space: instance.space) } it 'sends the annotations in the context' do client.bind(binding) @@ -1631,9 +1619,9 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when the app has annotations' do - let!(:annotation1) { VCAP::CloudController::AppAnnotationModel.make(key_name: 'baz', value: 'wow', app: app) } - let!(:annotation2) { VCAP::CloudController::AppAnnotationModel.make(key_prefix: 'prefix-here.org', key_name: 'foo', value: 'bar', app: app) } - let!(:annotation3) { VCAP::CloudController::AppAnnotationModel.make(key_name: 'prefix-here.org/wow', value: 'foo', app: app) } + let!(:annotation1) { create(:app_annotation_model, key_name: 'baz', value: 'wow', app: app) } + let!(:annotation2) { create(:app_annotation_model, key_prefix: 'prefix-here.org', key_name: 'foo', value: 'bar', app: app) } + let!(:annotation3) { create(:app_annotation_model, key_name: 'prefix-here.org/wow', value: 'foo', app: app) } it 'sends empty annotations object' do client.bind(binding) @@ -1654,7 +1642,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'key service binding' do - let(:binding) { VCAP::CloudController::ServiceKey.make } + let(:binding) { create(:service_key) } context 'when cc_service_key_client is configured' do it 'includes the optional credential_client_id parameter' do @@ -1696,7 +1684,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'route service binding' do - let(:binding) { VCAP::CloudController::RouteBinding.make } + let(:binding) { create(:route_binding) } it 'sends route bind resource' do client.bind(binding) @@ -1813,7 +1801,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when binding fails' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:uri) { 'some-uri.com/v2/service_instances/instance-guid/service_bindings/binding-guid' } let(:response) { HttpResponse.new(body: nil, message: nil, code: nil) } @@ -1910,13 +1898,13 @@ module VCAP::Services::ServiceBrokers::V2 end context 'app binding' do - let(:binding) { VCAP::CloudController::ServiceBinding.make } + let(:binding) { create(:service_binding) } it_behaves_like 'binding error handling' end context 'key binding' do - let(:binding) { VCAP::CloudController::ServiceKey.make } + let(:binding) { create(:service_key) } it_behaves_like 'binding error handling' end @@ -1924,7 +1912,7 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#unbind' do - let(:binding) { VCAP::CloudController::ServiceBinding.make } + let(:binding) { create(:service_binding) } let(:response_data) { {} } @@ -2065,7 +2053,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'for a route binding' do - let(:binding) { VCAP::CloudController::RouteBinding.make } + let(:binding) { create(:route_binding) } it 'propagates the error as a ConcurrencyError' do expect { client.unbind(binding) }.to raise_error(Errors::ConcurrencyError) @@ -2075,7 +2063,7 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#deprovision' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:response_data) { {} } @@ -2213,7 +2201,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when the broker returns an error' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:code) { 204 } let(:response_data) do { 'description' => 'Could not delete instance' } @@ -2259,14 +2247,12 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#fetch_service_binding' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } - let(:app) { VCAP::CloudController::AppModel.make(space: instance.space) } + let(:instance) { create(:managed_service_instance) } + let(:app) { create(:app_model, space: instance.space) } let(:binding) do - VCAP::CloudController::ServiceBinding.make( - service_instance: instance, - app: app, - type: 'app' - ) + create(:service_binding, service_instance: instance, + app: app, + type: 'app') end let(:broker_response) { HttpResponse.new(code: 200, body: { foo: 'bar' }.to_json) } @@ -2302,7 +2288,7 @@ module VCAP::Services::ServiceBrokers::V2 end describe '#fetch_service_instance' do - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:instance) { create(:managed_service_instance) } let(:broker_response) { HttpResponse.new(code: 200, body: { foo: 'bar' }.to_json) } before do @@ -2342,8 +2328,8 @@ module VCAP::Services::ServiceBrokers::V2 'description' => '10%' } end - let(:service_binding) { VCAP::CloudController::ServiceBinding.make } - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make } + let(:service_binding) { create(:service_binding) } + let(:binding_operation) { create(:service_binding_operation) } let(:broker_response) { HttpResponse.new(code: code, body: response_body) } let(:response_body) { response_data.to_json } let(:code) { 200 } @@ -2391,7 +2377,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when the broker provides operation data' do - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make(broker_provided_operation: '123') } + let(:binding_operation) { create(:service_binding_operation, broker_provided_operation: '123') } it 'makes a get request with the correct path' do client.fetch_service_binding_last_operation(service_binding) @@ -2461,8 +2447,8 @@ module VCAP::Services::ServiceBrokers::V2 'description' => '10%' } end - let(:service_binding) { VCAP::CloudController::ServiceBinding.make } - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make } + let(:service_binding) { create(:service_binding) } + let(:binding_operation) { create(:service_binding_operation) } let(:code) { 200 } let(:response_body) { response_data.to_json } @@ -2496,7 +2482,7 @@ module VCAP::Services::ServiceBrokers::V2 end context 'when the broker provides operation data' do - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make(broker_provided_operation: '123') } + let(:binding_operation) { create(:service_binding_operation, broker_provided_operation: '123') } it 'passes operation data in query params' do client.fetch_and_handle_service_binding_last_operation(service_binding) diff --git a/spec/unit/lib/services/service_brokers/v2/orphan_mitigator_spec.rb b/spec/unit/lib/services/service_brokers/v2/orphan_mitigator_spec.rb index 515367be8cb..9066ff36ac8 100644 --- a/spec/unit/lib/services/service_brokers/v2/orphan_mitigator_spec.rb +++ b/spec/unit/lib/services/service_brokers/v2/orphan_mitigator_spec.rb @@ -3,11 +3,11 @@ module VCAP::Services module ServiceBrokers::V2 RSpec.describe OrphanMitigator do - let(:plan) { VCAP::CloudController::ServicePlan.make } - let(:space) { VCAP::CloudController::Space.make } + let(:plan) { create(:service_plan) } + let(:space) { create(:space) } let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.new(service_plan: plan, space: space) } - let(:service_binding) { VCAP::CloudController::ServiceBinding.make } - let(:service_key) { VCAP::CloudController::ServiceKey.make } + let(:service_binding) { create(:service_binding) } + let(:service_key) { create(:service_key) } let(:name) { 'fake-name' } describe 'cleanup_failed_provision' do diff --git a/spec/unit/lib/services/service_brokers/v2/response_parser_spec.rb b/spec/unit/lib/services/service_brokers/v2/response_parser_spec.rb index 19a6c8096a6..901488ac668 100644 --- a/spec/unit/lib/services/service_brokers/v2/response_parser_spec.rb +++ b/spec/unit/lib/services/service_brokers/v2/response_parser_spec.rb @@ -271,9 +271,9 @@ def self.test_case(operation, code, body, opts={}) validators = opts[:validators] context "making a #{operation} request that returns code #{code} and body #{body}" do - let!(:syslog_service) { VCAP::CloudController::Service.make(:v2, requires: ['syslog_drain']) } - let!(:non_syslog_non_volume_mounts_service) { VCAP::CloudController::Service.make(:v2, requires: []) } - let!(:volume_mounts_service) { VCAP::CloudController::Service.make(:v2, requires: ['volume_mount']) } + let!(:syslog_service) { create(:service, :v2, requires: ['syslog_drain']) } + let!(:non_syslog_non_volume_mounts_service) { create(:service, :v2, requires: []) } + let!(:volume_mounts_service) { create(:service, :v2, requires: ['volume_mount']) } let(:response_parser) { ResponseParser.new('service-broker.com', log_errors: true, log_validators: true) } let(:fake_response) { instance_double(VCAP::Services::ServiceBrokers::V2::HttpResponse) } let(:body) { body } diff --git a/spec/unit/lib/services/sso/dashboard_client_manager_spec.rb b/spec/unit/lib/services/sso/dashboard_client_manager_spec.rb index 67a6a01523e..d2ba531fa54 100644 --- a/spec/unit/lib/services/sso/dashboard_client_manager_spec.rb +++ b/spec/unit/lib/services/sso/dashboard_client_manager_spec.rb @@ -3,7 +3,7 @@ module VCAP::Services::SSO RSpec.describe DashboardClientManager do let(:client_manager) { double('client_manager') } - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:email) { 'email@example.com' } let(:security_context) { double(:security_context, current_user: user, current_user_email: email) } let(:services_event_repository) do @@ -13,7 +13,7 @@ module VCAP::Services::SSO end context 'for service brokers' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:manager) { DashboardClientManager.new(service_broker, services_event_repository) } describe '#synchronize_clients_with_catalog' do @@ -613,7 +613,7 @@ module VCAP::Services::SSO end context 'for service instances' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:service_broker) { service_instance.service_plan.service.service_broker } let(:dashboard_client) { VCAP::CloudController::ServiceInstanceDashboardClient } let(:manager) { DashboardClientManager.new(service_instance, services_event_repository, dashboard_client) } diff --git a/spec/unit/lib/vcap/rest_api/query_spec.rb b/spec/unit/lib/vcap/rest_api/query_spec.rb index 086521ad645..94458de8f55 100644 --- a/spec/unit/lib/vcap/rest_api/query_spec.rb +++ b/spec/unit/lib/vcap/rest_api/query_spec.rb @@ -476,8 +476,8 @@ class Subscriber < Sequel::Model end describe 'semicolon escaping' do - let!(:one_semi) { VCAP::CloudController::TestModel.make(unique_value: 'one_semi;', required_attr: true) } - let!(:multiple_semi) { VCAP::CloudController::TestModel.make(unique_value: 'two;;semis and one;semi') } + let!(:one_semi) { create(:test_model, unique_value: 'one_semi;', required_attr: true) } + let!(:multiple_semi) { create(:test_model, unique_value: 'two;;semis and one;semi') } let(:queryable_attributes) { Set.new(%w[unique_value required_attr]) } describe '#filtered_dataset_from_query_params' do diff --git a/spec/unit/lib/vcap/vars_builder_spec.rb b/spec/unit/lib/vcap/vars_builder_spec.rb index e83f5e5c66b..432267961ab 100644 --- a/spec/unit/lib/vcap/vars_builder_spec.rb +++ b/spec/unit/lib/vcap/vars_builder_spec.rb @@ -4,14 +4,14 @@ module VCAP::CloudController RSpec.describe 'VarsBuilder' do describe 'vcap_application' do - let(:space) { VCAP::CloudController::Space.make } - let(:v3_app_model) { AppModel.make(name: 'v3-app-name', space: space) } + let(:space) { create(:space) } + let(:v3_app_model) { create(:app_model, name: 'v3-app-name', space: space) } let(:process) { ProcessModelFactory.make(app: v3_app_model, memory: 259, disk_quota: 799, file_descriptors: 1234) } before do - shared_domain = SharedDomain.make(name: 'shared.domain') - route_with_path = Route.make(space: space, domain: shared_domain, host: 'some-host', path: '/some-path') - RouteMappingModel.make(app: v3_app_model, route: route_with_path) + shared_domain = create(:shared_domain, name: 'shared.domain') + route_with_path = create(:route, space: space, domain: shared_domain, host: 'some-host', path: '/some-path') + create(:route_mapping_model, app: v3_app_model, route: route_with_path) end describe 'building hash for a v2 app model (ProcessModel)' do diff --git a/spec/unit/messages/app_manifest_message_spec.rb b/spec/unit/messages/app_manifest_message_spec.rb index dc1143172e9..b69883767d8 100644 --- a/spec/unit/messages/app_manifest_message_spec.rb +++ b/spec/unit/messages/app_manifest_message_spec.rb @@ -246,7 +246,7 @@ module VCAP::CloudController describe 'buildpack' do context 'when providing a valid buildpack name' do - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpack: buildpack.name } } it 'is valid' do @@ -295,8 +295,8 @@ module VCAP::CloudController describe 'buildpacks' do context 'when providing valid buildpack names' do - let(:buildpack) { Buildpack.make } - let(:buildpack2) { Buildpack.make } + let(:buildpack) { create(:buildpack) } + let(:buildpack2) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpacks: [buildpack.name, buildpack2.name] } } it 'is valid' do @@ -307,7 +307,7 @@ module VCAP::CloudController end context 'when one of the buildpacks is not a string' do - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpacks: [buildpack.name, 99] } } it 'is not valid' do @@ -320,7 +320,7 @@ module VCAP::CloudController end context 'when both buildpack and buildpacks are requested' do - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpacks: [buildpack.name], buildpack: 'some-buildpack' } } it 'is not valid' do @@ -338,7 +338,7 @@ module VCAP::CloudController context 'when docker is enabled' do before do - FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end it 'is valid' do @@ -350,7 +350,7 @@ module VCAP::CloudController context 'when docker is disabled' do before do - FeatureFlag.make(name: 'diego_docker', enabled: false, error_message: 'I am a banana') + create(:feature_flag, name: 'diego_docker', enabled: false, error_message: 'I am a banana') end it 'is not valid' do @@ -1058,10 +1058,10 @@ module VCAP::CloudController describe 'combination errors' do context 'when docker and buildpack is provided' do before do - FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpack: buildpack.name, docker: { image: 'my/image' } } } it 'is not valid' do @@ -1076,11 +1076,11 @@ module VCAP::CloudController context 'when docker and buildpacks is provided' do before do - FeatureFlag.make(name: 'diego_docker', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_docker', enabled: true, error_message: nil) end - let(:buildpack) { Buildpack.make } - let(:buildpack2) { Buildpack.make } + let(:buildpack) { create(:buildpack) } + let(:buildpack2) { create(:buildpack) } let(:params_from_yaml) { { name: 'eugene', buildpacks: [buildpack.name, buildpack2.name], docker: { image: 'my/image' } } } it 'is not valid' do @@ -1989,8 +1989,8 @@ module VCAP::CloudController end describe '#app_update_message' do - let(:buildpack) { VCAP::CloudController::Buildpack.make } - let(:stack) { VCAP::CloudController::Stack.make } + let(:buildpack) { create(:buildpack) } + let(:stack) { create(:stack) } let(:parsed_yaml) { { 'buildpack' => buildpack.name, 'stack' => stack.name } } context 'when neither buildpack or docker is specified' do @@ -2081,7 +2081,7 @@ module VCAP::CloudController context 'when cnb is enabled' do before do - FeatureFlag.make(name: 'diego_cnb', enabled: true, error_message: nil) + create(:feature_flag, name: 'diego_cnb', enabled: true, error_message: nil) end it 'is valid' do @@ -2147,7 +2147,7 @@ module VCAP::CloudController context 'when cnb is disabled' do before do - FeatureFlag.make(name: 'diego_cnb', enabled: false, error_message: 'I am a banana') + create(:feature_flag, name: 'diego_cnb', enabled: false, error_message: 'I am a banana') end it 'is not valid' do diff --git a/spec/unit/messages/manifest_routes_update_message_spec.rb b/spec/unit/messages/manifest_routes_update_message_spec.rb index 11d719fd686..485b0a5f9bf 100644 --- a/spec/unit/messages/manifest_routes_update_message_spec.rb +++ b/spec/unit/messages/manifest_routes_update_message_spec.rb @@ -320,7 +320,7 @@ module VCAP::CloudController context 'hash options validation' do context 'when hash_based_routing feature flag is disabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: false) + create(:feature_flag, name: 'hash_based_routing', enabled: false) end context 'when a route contains loadbalancing=hash' do @@ -430,7 +430,7 @@ module VCAP::CloudController context 'when hash_based_routing feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end context 'when a route contains hash_header with hash loadbalancing' do diff --git a/spec/unit/messages/package_create_message_spec.rb b/spec/unit/messages/package_create_message_spec.rb index 0ab83cba05a..0c2749cbbec 100644 --- a/spec/unit/messages/package_create_message_spec.rb +++ b/spec/unit/messages/package_create_message_spec.rb @@ -163,7 +163,7 @@ module VCAP::CloudController end describe '#audit_hash' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:relationships) { { app: { data: { guid: app.guid } } } } context 'when a data field is present' do diff --git a/spec/unit/messages/route_create_message_spec.rb b/spec/unit/messages/route_create_message_spec.rb index c77b9c6d15e..5dd6574f6aa 100644 --- a/spec/unit/messages/route_create_message_spec.rb +++ b/spec/unit/messages/route_create_message_spec.rb @@ -499,7 +499,7 @@ module VCAP::CloudController context 'when hash_based_routing feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end context 'when hash_header is longer than 128 characters' do diff --git a/spec/unit/messages/route_options_message_spec.rb b/spec/unit/messages/route_options_message_spec.rb index 57646d21950..ccde930b18b 100644 --- a/spec/unit/messages/route_options_message_spec.rb +++ b/spec/unit/messages/route_options_message_spec.rb @@ -66,7 +66,7 @@ module VCAP::CloudController context 'when hash_based_routing feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end describe 'loadbalancing algorithm' do diff --git a/spec/unit/messages/route_update_message_spec.rb b/spec/unit/messages/route_update_message_spec.rb index 6c7b1e3f65a..01899a21da6 100644 --- a/spec/unit/messages/route_update_message_spec.rb +++ b/spec/unit/messages/route_update_message_spec.rb @@ -64,7 +64,7 @@ module VCAP::CloudController context 'when hash_based_routing feature flag is enabled' do before do - VCAP::CloudController::FeatureFlag.make(name: 'hash_based_routing', enabled: true) + create(:feature_flag, name: 'hash_based_routing', enabled: true) end it 'does not accept hash_header longer than 128 characters' do diff --git a/spec/unit/middleware/service_broker_rate_limiter_spec.rb b/spec/unit/middleware/service_broker_rate_limiter_spec.rb index c2f34b6c65a..93deb3a6d68 100644 --- a/spec/unit/middleware/service_broker_rate_limiter_spec.rb +++ b/spec/unit/middleware/service_broker_rate_limiter_spec.rb @@ -5,7 +5,7 @@ module Middleware RSpec.describe ServiceBrokerRateLimiter, isolation: :truncation do let(:app) { double(:app) } let(:logger) { double } - let(:instance) { VCAP::CloudController::Service.make(instances_retrievable: true) } + let(:instance) { create(:service, instances_retrievable: true) } let(:path_info) { '/v2/service_instances' } let(:user_guid) { SecureRandom.uuid } let(:user_env) { { 'cf.user_guid' => user_guid, 'PATH_INFO' => path_info } } diff --git a/spec/unit/models/runtime/app_annotation_model_spec.rb b/spec/unit/models/runtime/app_annotation_model_spec.rb index 533e74346c9..07579a6f2ae 100644 --- a/spec/unit/models/runtime/app_annotation_model_spec.rb +++ b/spec/unit/models/runtime/app_annotation_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - app = AppModel.make(name: 'dora') - AppAnnotationModel.make(resource_guid: app.guid, key_prefix: 'something', key_name: 'release', value: 'stable') + app = create(:app_model, name: 'dora') + create(:app_annotation_model, resource_guid: app.guid, key_prefix: 'something', key_name: 'release', value: 'stable') expect(AppAnnotationModel.find(key_prefix: 'something', key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/app_label_model_spec.rb b/spec/unit/models/runtime/app_label_model_spec.rb index 15fab63aa7f..eeab382f125 100644 --- a/spec/unit/models/runtime/app_label_model_spec.rb +++ b/spec/unit/models/runtime/app_label_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - app = AppModel.make(name: 'dora') - AppLabelModel.make(resource_guid: app.guid, key_name: 'release', value: 'stable') + app = create(:app_model, name: 'dora') + create(:app_label_model, resource_guid: app.guid, key_name: 'release', value: 'stable') expect(AppLabelModel.find(key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/app_model_spec.rb b/spec/unit/models/runtime/app_model_spec.rb index 934b6e1707c..0b4025faf67 100644 --- a/spec/unit/models/runtime/app_model_spec.rb +++ b/spec/unit/models/runtime/app_model_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe AppModel do let(:app_model) { AppModel.create(space: space, name: 'some-name') } - let(:space) { Space.make } + let(:space) { create(:space) } describe '#oldest_web_process' do context 'when there are no web processes' do @@ -14,22 +14,18 @@ module VCAP::CloudController context 'when there are multiple web processes' do let!(:web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'old command!', - instances: 3, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 24.hours - ) + create(:process_model, app: app_model, + command: 'old command!', + instances: 3, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 24.hours) end let!(:newer_web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 23.hours - ) + create(:process_model, app: app_model, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 23.hours) end it 'returns the oldest one' do @@ -49,31 +45,25 @@ module VCAP::CloudController let(:created_at_for_new_processes) { Time.now - 23.hours } let!(:web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'old command!', - instances: 3, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 24.hours - ) + create(:process_model, app: app_model, + command: 'old command!', + instances: 3, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 24.hours) end let!(:newer_web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: created_at_for_new_processes - ) + create(:process_model, app: app_model, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: created_at_for_new_processes) end let!(:most_newest_web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: created_at_for_new_processes - ) + create(:process_model, app: app_model, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: created_at_for_new_processes) end it 'returns the newest one' do @@ -84,9 +74,9 @@ module VCAP::CloudController end describe '#latest_revision' do - let!(:revision1) { RevisionModel.make(app: app_model, created_at: 10.minutes.ago) } - let!(:revision2) { RevisionModel.make(app: app_model, created_at: Time.now) } - let!(:revision3) { RevisionModel.make(app: app_model, created_at: 5.minutes.ago) } + let!(:revision1) { create(:revision_model, app: app_model, created_at: 10.minutes.ago) } + let!(:revision2) { create(:revision_model, app: app_model, created_at: Time.now) } + let!(:revision3) { create(:revision_model, app: app_model, created_at: 5.minutes.ago) } context 'when revisions are enabled' do before do @@ -98,7 +88,7 @@ module VCAP::CloudController end context 'when two were created in the same second' do - let!(:revision4) { RevisionModel.make(app: app_model, created_at: revision2.created_at) } + let!(:revision4) { create(:revision_model, app: app_model, created_at: revision2.created_at) } it 'prefers the one with the higher id' do expect(app_model.latest_revision).to eq(revision4) @@ -119,7 +109,7 @@ module VCAP::CloudController describe '#staging_in_progress' do context 'when a build is in staging state' do - let!(:build) { BuildModel.make(app_guid: app_model.guid, state: BuildModel::STAGING_STATE) } + let!(:build) { create(:build_model, app_guid: app_model.guid, state: BuildModel::STAGING_STATE) } it 'returns true' do expect(app_model.staging_in_progress?).to be(true) @@ -127,7 +117,7 @@ module VCAP::CloudController end context 'when a build is not in neither pending or staging state' do - let!(:build) { BuildModel.make(app_guid: app_model.guid, state: BuildModel::STAGED_STATE) } + let!(:build) { create(:build_model, app_guid: app_model.guid, state: BuildModel::STAGED_STATE) } it 'returns false' do expect(app_model.staging_in_progress?).to be(false) @@ -178,13 +168,13 @@ module VCAP::CloudController describe 'name' do let(:space_guid) { space.guid } - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'uniqueness is case insensitive' do - AppModel.make(name: 'lowercase', space_guid: space_guid) + create(:app_model, name: 'lowercase', space_guid: space_guid) expect do - AppModel.make(name: 'lowerCase', space_guid: space_guid) + create(:app_model, name: 'lowerCase', space_guid: space_guid) end.to raise_error(Sequel::ValidationFailed, "App with the name 'lowerCase' already exists.") end @@ -228,24 +218,24 @@ module VCAP::CloudController it 'name can be reused in different spaces' do name = 'zach' - space1 = Space.make - space2 = Space.make + space1 = create(:space) + space2 = create(:space) - AppModel.make(name: name, space_guid: space1.guid) + create(:app_model, name: name, space_guid: space1.guid) expect do - AppModel.make(name: name, space_guid: space2.guid) + create(:app_model, name: name, space_guid: space2.guid) end.not_to raise_error end it 'name is unique in the same space' do name = 'zach' - space = Space.make + space = create(:space) - AppModel.make(name: name, space_guid: space.guid) + create(:app_model, name: name, space_guid: space.guid) expect do - AppModel.make(name: name, space_guid: space.guid) + create(:app_model, name: name, space_guid: space.guid) end.to raise_error(Sequel::ValidationFailed, "App with the name 'zach' already exists.") end end @@ -253,13 +243,13 @@ module VCAP::CloudController describe 'environment_variables' do it 'validates them' do expect do - AppModel.make(environment_variables: '') + create(:app_model, environment_variables: '') end.to raise_error(Sequel::ValidationFailed, /must be an object/) end end describe 'droplet' do - let(:droplet) { DropletModel.make(app: app_model) } + let(:droplet) { create(:droplet_model, app: app_model) } it 'does not allow droplets that are not STAGED' do states = DropletModel::DROPLET_STATES - [DropletModel::STAGED_STATE] @@ -287,14 +277,14 @@ module VCAP::CloudController it 'validates lifecycle_type is one of buildpack, cnb, or docker' do expect do - AppModel.make(lifecycle_type: 'invalid') + create(:app_model, lifecycle_type: 'invalid') end.to raise_error(Sequel::ValidationFailed, /lifecycle_type/) end it 'accepts valid lifecycle_type values' do %w[buildpack cnb docker].each do |type| expect do - AppModel.make(lifecycle_type: type) + create(:app_model, lifecycle_type: type) end.not_to raise_error end end @@ -307,7 +297,7 @@ module VCAP::CloudController end context 'when there is buildpack_lifecycle_data associated to the app' do - before { BuildpackLifecycleDataModel.make(app: app_model) } + before { create(:buildpack_lifecycle_data_model, app: app_model) } it 'returns the string "buildpack"' do app_model.reload @@ -316,7 +306,7 @@ module VCAP::CloudController end context 'when there is cnb_lifecycle_data associated to the app' do - before { CNBLifecycleDataModel.make(app: app_model) } + before { create(:cnb_lifecycle_data_model, app: app_model) } it 'returns the string "cnb"' do app_model.reload @@ -333,7 +323,7 @@ module VCAP::CloudController describe '#lifecycle_data' do context 'buildpack_lifecycle_data' do - let!(:app_model) { AppModel.make } + let!(:app_model) { create(:app_model) } it 'returns a buildpack lifecycle data model' do expect(app_model.lifecycle_data).to be_a(BuildpackLifecycleDataModel) @@ -349,7 +339,7 @@ module VCAP::CloudController end context 'cnb_lifecycle_data' do - let!(:app_model) { AppModel.make(:cnb) } + let!(:app_model) { create(:app_model, :cnb) } it 'returns a cnb lifecycle data model' do expect(app_model.lifecycle_data).to be_a(CNBLifecycleDataModel) @@ -365,7 +355,7 @@ module VCAP::CloudController end context 'neither buildpack_lifecycle_data, nor cnb_lifecycle_data' do - let(:app_model) { AppModel.make(:docker) } + let(:app_model) { create(:app_model, :docker) } it 'returns a docker lifecycle data model' do expect(app_model.lifecycle_data).to be_a(DockerLifecycleDataModel) @@ -376,18 +366,18 @@ module VCAP::CloudController end describe '#database_uri' do - let(:parent_app) { AppModel.make(environment_variables: { 'jesse' => 'awesome' }, space: space) } - let(:process) { ProcessModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, environment_variables: { 'jesse' => 'awesome' }, space: space) } + let(:process) { create(:process_model, app: parent_app) } context 'when there are database-like services' do before do - sql_service_plan = ServicePlan.make(service: Service.make(label: 'elephantsql-n/a')) - sql_service_instance = ManagedServiceInstance.make(space: space, service_plan: sql_service_plan, name: 'elephantsql-vip-uat') - ServiceBinding.make(app: parent_app, service_instance: sql_service_instance, credentials: { 'uri' => 'mysql://foo.com' }) + sql_service_plan = create(:service_plan, service: create(:service, label: 'elephantsql-n/a')) + sql_service_instance = create(:managed_service_instance, space: space, service_plan: sql_service_plan, name: 'elephantsql-vip-uat') + create(:service_binding, app: parent_app, service_instance: sql_service_instance, credentials: { 'uri' => 'mysql://foo.com' }) - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) end it 'returns database uri' do @@ -397,13 +387,13 @@ module VCAP::CloudController context 'when there are non-database-like services' do before do - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) - uncredentialed_service_plan = ServicePlan.make(service: Service.make(label: 'mysterious-n/a')) - uncredentialed_service_instance = ManagedServiceInstance.make(space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') - ServiceBinding.make(app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) + uncredentialed_service_plan = create(:service_plan, service: create(:service, label: 'mysterious-n/a')) + uncredentialed_service_instance = create(:managed_service_instance, space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') + create(:service_binding, app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) end it 'returns nil' do @@ -419,9 +409,9 @@ module VCAP::CloudController context 'when the service binding credentials is nil' do before do - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: nil) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: nil) end it 'returns nil' do @@ -431,18 +421,18 @@ module VCAP::CloudController end describe '#windows_gmsa_credential_refs' do - let(:parent_app) { AppModel.make(space:) } + let(:parent_app) { create(:app_model, space:) } let(:gmsa_credhub_ref) { 'some-gmsa-credhub-reference' } context 'when there are windows-gmsa-credential services' do before do - gmsa_service_plan = ServicePlan.make(service: Service.make(label: 'windows-gmsa')) - gmsa_service_instance = ManagedServiceInstance.make(space: space, service_plan: gmsa_service_plan, name: 'windows-gmsa-creds') - ServiceBinding.make(app: parent_app, service_instance: gmsa_service_instance, credentials: { 'credhub-windows-gmsa-credential-ref' => gmsa_credhub_ref }) + gmsa_service_plan = create(:service_plan, service: create(:service, label: 'windows-gmsa')) + gmsa_service_instance = create(:managed_service_instance, space: space, service_plan: gmsa_service_plan, name: 'windows-gmsa-creds') + create(:service_binding, app: parent_app, service_instance: gmsa_service_instance, credentials: { 'credhub-windows-gmsa-credential-ref' => gmsa_credhub_ref }) - non_gmsa_service_plan = ServicePlan.make(service: Service.make(label: 'incom-test-service')) - non_gmsa_service_instance = ManagedServiceInstance.make(space: space, service_plan: non_gmsa_service_plan, name: 't65-b-test-instance') - ServiceBinding.make(app: parent_app, service_instance: non_gmsa_service_instance, credentials: { 'something' => 'else' }) + non_gmsa_service_plan = create(:service_plan, service: create(:service, label: 'incom-test-service')) + non_gmsa_service_instance = create(:managed_service_instance, space: space, service_plan: non_gmsa_service_plan, name: 't65-b-test-instance') + create(:service_binding, app: parent_app, service_instance: non_gmsa_service_instance, credentials: { 'something' => 'else' }) end it 'returns the credential reference' do @@ -452,13 +442,13 @@ module VCAP::CloudController context 'when there are only non-gmsa-credential services' do before do - non_gmsa_service_plan = ServicePlan.make(service: Service.make(label: 'incom-test-service')) - non_gmsa_service_instance = ManagedServiceInstance.make(space: space, service_plan: non_gmsa_service_plan, name: 't65-b-test-instance') - ServiceBinding.make(app: parent_app, service_instance: non_gmsa_service_instance, credentials: { 'something' => 'else' }) + non_gmsa_service_plan = create(:service_plan, service: create(:service, label: 'incom-test-service')) + non_gmsa_service_instance = create(:managed_service_instance, space: space, service_plan: non_gmsa_service_plan, name: 't65-b-test-instance') + create(:service_binding, app: parent_app, service_instance: non_gmsa_service_instance, credentials: { 'something' => 'else' }) - uncredentialed_service_plan = ServicePlan.make(service: Service.make(label: 'mysterious-n/a')) - uncredentialed_service_instance = ManagedServiceInstance.make(space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') - ServiceBinding.make(app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) + uncredentialed_service_plan = create(:service_plan, service: create(:service, label: 'mysterious-n/a')) + uncredentialed_service_instance = create(:managed_service_instance, space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') + create(:service_binding, app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) end it 'returns an empty array' do @@ -474,9 +464,9 @@ module VCAP::CloudController context 'when the service binding credentials is nil' do before do - uncredentialed_service_plan = ServicePlan.make(service: Service.make(label: 'mysterious-n/a')) - uncredentialed_service_instance = ManagedServiceInstance.make(space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') - ServiceBinding.make(app: parent_app, service_instance: uncredentialed_service_instance, credentials: nil) + uncredentialed_service_plan = create(:service_plan, service: create(:service, label: 'mysterious-n/a')) + uncredentialed_service_instance = create(:managed_service_instance, space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') + create(:service_binding, app: parent_app, service_instance: uncredentialed_service_instance, credentials: nil) end it 'returns an empty array' do @@ -488,10 +478,10 @@ module VCAP::CloudController describe 'default enable_ssh' do context 'when enable_ssh is set explicitly' do it 'does not overwrite it with the default' do - app1 = AppModel.make(enable_ssh: true) + app1 = create(:app_model, enable_ssh: true) expect(app1.enable_ssh).to be(true) - app2 = AppModel.make(enable_ssh: false) + app2 = create(:app_model, enable_ssh: false) expect(app2.enable_ssh).to be(false) end end @@ -502,7 +492,7 @@ module VCAP::CloudController end it 'sets enable_ssh to true' do - app = AppModel.make + app = create(:app_model) expect(app.enable_ssh).to be(true) end end @@ -513,14 +503,14 @@ module VCAP::CloudController end it 'sets enable_ssh to false' do - app = AppModel.make + app = create(:app_model) expect(app.enable_ssh).to be(false) end end end describe '#user_visibility_filter' do - let!(:other_app) { AppModel.make } + let!(:other_app) { create(:app_model) } context "when a user is a developer in the app's space" do let(:user) { make_developer_for_space(app_model.space) } @@ -555,7 +545,7 @@ module VCAP::CloudController end context "when a user has no visibility to the app's space" do - let(:user) { User.make } + let(:user) { create(:user) } it 'the service binding is not visible' do expect(AppModel.user_visible(user).all).to be_empty @@ -565,10 +555,10 @@ module VCAP::CloudController describe '#current_package' do context 'when the app has a current droplet assigned' do - let(:package) { PackageModel.make } + let(:package) { create(:package_model) } before do - app_model.update(droplet: DropletModel.make(package:)) + app_model.update(droplet: create(:droplet_model, package:)) end it 'returns the package from the current droplet' do @@ -589,18 +579,18 @@ module VCAP::CloudController end it 'returns false when the app has no deployments that are being deployed' do - VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYED', app: app_model) - VCAP::CloudController::DeploymentModel.make(state: 'CANCELING', app: app_model) - VCAP::CloudController::DeploymentModel.make(state: 'CANCELED', app: app_model) + create(:deployment_model, state: 'DEPLOYED', app: app_model) + create(:deployment_model, state: 'CANCELING', app: app_model) + create(:deployment_model, state: 'CANCELED', app: app_model) expect(app_model.deploying?).to be(false) end it 'returns true when the app has a deployment that is being deployed' do - VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYED', app: app_model) - VCAP::CloudController::DeploymentModel.make(state: 'CANCELING', app: app_model) - VCAP::CloudController::DeploymentModel.make(state: 'DEPLOYING', app: app_model) - VCAP::CloudController::DeploymentModel.make(state: 'CANCELED', app: app_model) + create(:deployment_model, state: 'DEPLOYED', app: app_model) + create(:deployment_model, state: 'CANCELING', app: app_model) + create(:deployment_model, state: 'DEPLOYING', app: app_model) + create(:deployment_model, state: 'CANCELED', app: app_model) expect(app_model.deploying?).to be(true) end diff --git a/spec/unit/models/runtime/build_model_spec.rb b/spec/unit/models/runtime/build_model_spec.rb index 8fd7faeca19..eb3d8400607 100644 --- a/spec/unit/models/runtime/build_model_spec.rb +++ b/spec/unit/models/runtime/build_model_spec.rb @@ -2,15 +2,13 @@ module VCAP::CloudController RSpec.describe BuildModel do - let(:package) { PackageModel.make(state: PackageModel::READY_STATE) } - let(:build_model) { BuildModel.make(package:) } + let(:package) { create(:package_model, state: PackageModel::READY_STATE) } + let(:build_model) { create(:build_model, package:) } describe 'associations' do let!(:buildpack_lifecycle_data) do - BuildpackLifecycleDataModel.make( - build: build_model, - buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net'] - ) + create(:buildpack_lifecycle_data_model, build: build_model, + buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net']) end before do @@ -19,8 +17,8 @@ module VCAP::CloudController end it 'has a foreign key to app' do - app = AppModel.make - BuildModel.make(app:) + app = create(:app_model) + create(:build_model, app:) expect do app.delete end.to raise_error Sequel::ForeignKeyConstraintViolation @@ -28,10 +26,8 @@ module VCAP::CloudController describe 'space' do let!(:buildpack_lifecycle_data) do - BuildpackLifecycleDataModel.make( - build: build_model, - buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net'] - ) + create(:buildpack_lifecycle_data_model, build: build_model, + buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net']) end before do @@ -40,9 +36,9 @@ module VCAP::CloudController end it 'gets its space from the containing app' do - space = Space.make - app = AppModel.make(space:) - build = BuildModel.make(app:) + space = create(:space) + app = create(:app_model, space:) + build = create(:build_model, app:) expect(build.space).to eq(space) end end @@ -55,7 +51,7 @@ module VCAP::CloudController end context 'when there is buildpack_lifecycle_data associated to the build' do - let(:build_model) { BuildModel.make(app: nil) } + let(:build_model) { create(:build_model, app: nil) } it 'returns the string "buildpack"' do expect(build_model.lifecycle_type).to eq('buildpack') @@ -63,7 +59,7 @@ module VCAP::CloudController end context 'when there is cnb_lifecycle_data associated to the build' do - let(:build_model) { BuildModel.make(:cnb, app: nil) } + let(:build_model) { create(:build_model, :cnb, app: nil) } it 'returns the string "cnb"' do expect(build_model.lifecycle_type).to eq('cnb') @@ -71,7 +67,7 @@ module VCAP::CloudController end context 'when there is no lifecycle data associated to the build' do - let(:build_model) { BuildModel.make(:docker, app: nil) } + let(:build_model) { create(:build_model, :docker, app: nil) } it 'returns the string "docker"' do expect(build_model.lifecycle_type).to eq('docker') @@ -81,13 +77,13 @@ module VCAP::CloudController describe '#before_create' do it 'inherits lifecycle_type from app if not set' do - app = AppModel.make(:cnb) + app = create(:app_model, :cnb) build = BuildModel.create(app: app, state: BuildModel::STAGING_STATE) expect(build[:lifecycle_type]).to eq('cnb') end it 'uses explicit lifecycle_type if set' do - app = AppModel.make + app = create(:app_model) build = BuildModel.create(app: app, state: BuildModel::STAGING_STATE, lifecycle_type: 'docker') expect(build[:lifecycle_type]).to eq('docker') end @@ -96,14 +92,14 @@ module VCAP::CloudController describe 'validations' do it 'validates lifecycle_type is one of buildpack, cnb, or docker' do expect do - BuildModel.make(lifecycle_type: 'invalid') + create(:build_model, lifecycle_type: 'invalid') end.to raise_error(Sequel::ValidationFailed, /lifecycle_type/) end it 'accepts valid lifecycle_type values' do %w[buildpack cnb docker].each do |type| expect do - BuildModel.make(lifecycle_type: type) + create(:build_model, lifecycle_type: type) end.not_to raise_error end end @@ -111,7 +107,7 @@ module VCAP::CloudController describe '#lifecycle_data' do context 'buildpack_lifecycle_data' do - let!(:build_model) { BuildModel.make(app: nil) } + let!(:build_model) { create(:build_model, app: nil) } it 'returns a buildpack lifecycle data model' do expect(build_model.lifecycle_data).to be_a(BuildpackLifecycleDataModel) @@ -127,7 +123,7 @@ module VCAP::CloudController end context 'cnb_lifecycle_data' do - let!(:build_model) { BuildModel.make(:cnb, app: nil) } + let!(:build_model) { create(:build_model, :cnb, app: nil) } it 'returns a cnb lifecycle data model' do expect(build_model.lifecycle_data).to be_a(CNBLifecycleDataModel) @@ -143,7 +139,7 @@ module VCAP::CloudController end context 'neither buildpack_lifecycle_data, nor cnb_lifecycle_data' do - let(:build_model) { BuildModel.make(:docker, app: nil) } + let(:build_model) { create(:build_model, :docker, app: nil) } it 'returns a docker lifecycle data model' do expect(build_model.lifecycle_data).to be_a(DockerLifecycleDataModel) @@ -209,7 +205,7 @@ module VCAP::CloudController end context 'when the build is already in the FAILED state' do - let(:previously_failed_build) { BuildModel.make(package: package, state: BuildModel::FAILED_STATE) } + let(:previously_failed_build) { create(:build_model, package: package, state: BuildModel::FAILED_STATE) } it 'creates an app usage event for STAGING_STOPPED' do expect do @@ -290,10 +286,8 @@ module VCAP::CloudController describe '#record_staging_stopped' do let!(:buildpack_lifecycle_data) do - BuildpackLifecycleDataModel.make( - build: build_model, - buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net'] - ) + create(:buildpack_lifecycle_data_model, build: build_model, + buildpacks: ['http://some-buildpack.com', 'http://another-buildpack.net']) end before do @@ -331,8 +325,8 @@ module VCAP::CloudController end describe 'metadata' do - let!(:label) { VCAP::CloudController::BuildLabelModel.make(key_name: 'string', value: 'string2', resource_guid: build_model.guid) } - let!(:annotation) { VCAP::CloudController::BuildAnnotationModel.make(key_name: 'string', value: 'string2', resource_guid: build_model.guid) } + let!(:label) { create(:build_label_model, key_name: 'string', value: 'string2', resource_guid: build_model.guid) } + let!(:annotation) { create(:build_annotation_model, key_name: 'string', value: 'string2', resource_guid: build_model.guid) } it 'can access its annotations and labels' do expect(label.resource_guid).to eq(build_model.guid) diff --git a/spec/unit/models/runtime/buildpack_lifecycle_buildpack_model_spec.rb b/spec/unit/models/runtime/buildpack_lifecycle_buildpack_model_spec.rb index 97fc4dc6449..f1fb4e46032 100644 --- a/spec/unit/models/runtime/buildpack_lifecycle_buildpack_model_spec.rb +++ b/spec/unit/models/runtime/buildpack_lifecycle_buildpack_model_spec.rb @@ -3,15 +3,15 @@ module VCAP::CloudController RSpec.describe BuildpackLifecycleBuildpackModel do subject(:buildpack) { BuildpackLifecycleBuildpackModel.new } - let(:buildpack_lifecycle_data) { BuildpackLifecycleDataModel.make(buildpacks: ['ruby']) } + let(:buildpack_lifecycle_data) { create(:buildpack_lifecycle_data_model, buildpacks: ['ruby']) } before do - Buildpack.make(name: 'ruby') + create(:buildpack, name: 'ruby') buildpack.buildpack_lifecycle_data = buildpack_lifecycle_data end it_behaves_like 'a model with an encrypted attribute' do - let(:model_factory) { -> { BuildpackLifecycleBuildpackModel.make(:custom_buildpack) } } + let(:model_factory) { -> { create(:buildpack_lifecycle_buildpack_model, :custom_buildpack) } } let(:value_to_encrypt) { 'https://acme-buildpack.com' } let(:encrypted_attr) { :buildpack_url } let(:storage_column) { :encrypted_buildpack_url } @@ -49,7 +49,7 @@ module VCAP::CloudController end context 'when a cnb buildpack is used' do - let(:cnb_lifecycle_data) { CNBLifecycleDataModel.make(buildpacks: ['docker://nginx:latest']) } + let(:cnb_lifecycle_data) { create(:cnb_lifecycle_data_model, buildpacks: ['docker://nginx:latest']) } before do buildpack.buildpack_lifecycle_data = nil diff --git a/spec/unit/models/runtime/buildpack_lifecycle_data_model_spec.rb b/spec/unit/models/runtime/buildpack_lifecycle_data_model_spec.rb index bc67c1767ec..854a6acc37c 100644 --- a/spec/unit/models/runtime/buildpack_lifecycle_data_model_spec.rb +++ b/spec/unit/models/runtime/buildpack_lifecycle_data_model_spec.rb @@ -31,10 +31,10 @@ module VCAP::CloudController describe '#buildpacks' do before do - Buildpack.make(name: 'another-buildpack') - Buildpack.make(name: 'new-buildpack') - Buildpack.make(name: 'ruby') - Buildpack.make(name: 'some-buildpack') + create(:buildpack, name: 'another-buildpack') + create(:buildpack, name: 'new-buildpack') + create(:buildpack, name: 'ruby') + create(:buildpack, name: 'some-buildpack') end context 'when passed in nil' do @@ -99,11 +99,11 @@ module VCAP::CloudController let(:buildpack1_name) { 'pleasant-valley-buildpack' } let(:buildpack1_other_name) { 'valley' } let(:buildpack1_version) { '3.1' } - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(name: buildpack1_name, sha256_checksum: 'mammoth') } + let!(:buildpack1) { create(:buildpack, name: buildpack1_name, sha256_checksum: 'mammoth') } let(:buildpack2_name) { 'stepping-stone-buildpack' } let(:buildpack2_other_name) { 'gilooley' } let(:buildpack2_version) { '95' } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(name: buildpack2_name, sha256_checksum: 'languid') } + let!(:buildpack2) { create(:buildpack, name: buildpack2_name, sha256_checksum: 'languid') } let(:buildpack3_key) { 'git://my-buildpacks.tv/fred/barney.git' } let(:buildpack3_other_name) { 'hilltop' } @@ -213,7 +213,7 @@ module VCAP::CloudController end context 'admin buildpack name' do - let(:buildpack) { Buildpack.make(name: 'ruby') } + let(:buildpack) { create(:buildpack, name: 'ruby') } it 'persists the buildpack' do lifecycle_data.buildpacks = ['ruby'] @@ -241,7 +241,7 @@ module VCAP::CloudController end context 'when the buildpacks are a mixture of admin and custom buildpacks' do - let(:admin_buildpack) { Buildpack.make(name: 'minbari') } + let(:admin_buildpack) { create(:buildpack, name: 'minbari') } let(:buildpack1_url) { 'http://example.com/buildpack1' } let(:buildpack2_url) { 'http://example.com/buildpack2' } @@ -258,7 +258,7 @@ module VCAP::CloudController context 'when the buildpack is set via the legacy_* fields' do context 'when the buildpack is an admin buildpack' do - let(:admin_buildpack) { Buildpack.make(name: 'susperia') } + let(:admin_buildpack) { create(:buildpack, name: 'susperia') } before do lifecycle_data.legacy_admin_buildpack_name = admin_buildpack.name @@ -284,7 +284,7 @@ module VCAP::CloudController end describe '#legacy_buildpack_model' do - let!(:admin_buildpack) { Buildpack.make(name: 'bob') } + let!(:admin_buildpack) { create(:buildpack, name: 'bob') } context 'when the buildpack is nil' do subject(:lifecycle_data) { BuildpackLifecycleDataModel.new(buildpacks: nil) } @@ -390,7 +390,7 @@ module VCAP::CloudController let(:stack) { 'cflinuxfs4' } before do - Buildpack.make(name: 'ruby') + create(:buildpack, name: 'ruby') lifecycle_data.stack = stack lifecycle_data.buildpacks = buildpacks lifecycle_data.save @@ -427,8 +427,8 @@ module VCAP::CloudController describe '#valid?' do it 'cannot be associated with both an app and a build' do - build = BuildModel.make - app = AppModel.make + build = create(:build_model) + app = create(:app_model) lifecycle_data.build = build lifecycle_data.app = app expect(lifecycle_data.valid?).to be(false) @@ -436,8 +436,8 @@ module VCAP::CloudController end it 'cannot be associated with both an app and a droplet' do - droplet = DropletModel.make - app = AppModel.make + droplet = create(:droplet_model) + app = create(:app_model) lifecycle_data.droplet = droplet lifecycle_data.app = app expect(lifecycle_data.valid?).to be(false) @@ -445,7 +445,7 @@ module VCAP::CloudController end it 'cannot contain invalid buildpacks' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.buildpacks = [nil, nil] expect(lifecycle_data.valid?).to be(false) @@ -454,7 +454,7 @@ module VCAP::CloudController end it 'adds BuildpackLifecyleBuildpack errors to the BuildpackLifecycleDataModels' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.buildpacks = ['invalid_buildpack_name'] expect(lifecycle_data.valid?).to be(false) @@ -465,21 +465,21 @@ module VCAP::CloudController describe 'associations' do it 'can be associated with a droplet' do - droplet = DropletModel.make + droplet = create(:droplet_model) lifecycle_data.droplet = droplet lifecycle_data.save expect(lifecycle_data.reload.droplet).to eq(droplet) end it 'can be associated with apps' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.save expect(lifecycle_data.reload.app).to eq(app) end it 'can be associated with a build' do - build = BuildModel.make + build = create(:build_model) lifecycle_data.build = build lifecycle_data.save expect(lifecycle_data.reload.build).to eq(build) diff --git a/spec/unit/models/runtime/buildpack_spec.rb b/spec/unit/models/runtime/buildpack_spec.rb index b21e910276a..966b3d62faa 100644 --- a/spec/unit/models/runtime/buildpack_spec.rb +++ b/spec/unit/models/runtime/buildpack_spec.rb @@ -10,18 +10,18 @@ def ordered_buildpacks describe 'Validations' do describe 'stack' do - let(:stack) { Stack.make(name: 'happy') } + let(:stack) { create(:stack, name: 'happy') } it 'can be changed if not set' do buildpack = Buildpack.create(name: 'test', stack: nil) - buildpack.stack = Stack.make.name + buildpack.stack = create(:stack).name expect(buildpack).to be_valid end it 'cannot be changed once it is set' do - buildpack = Buildpack.create(name: 'test', stack: Stack.make.name) - buildpack.stack = Stack.make.name + buildpack = Buildpack.create(name: 'test', stack: create(:stack).name) + buildpack.stack = create(:stack).name expect(buildpack).not_to be_valid expect(buildpack.errors.on(:stack)).to include(:buildpack_cant_change_stacks) @@ -79,7 +79,7 @@ def ordered_buildpacks end context 'when unique constraint violation occures' do - let(:stack) { Stack.make } + let(:stack) { create(:stack) } it 'raises validation error when name, stack and lifecyle is same' do Buildpack.create(name: 'oscar', stack: stack.name, lifecycle: 'cnb') @@ -134,16 +134,16 @@ def ordered_buildpacks context 'with prioritized buildpacks' do before do buildpack_blobstore.cp_to_blobstore(buildpack_file_1.path, 'a key') - Buildpack.make(key: 'a key', position: 2) + create(:buildpack, key: 'a key', position: 2) buildpack_blobstore.cp_to_blobstore(buildpack_file_cnb.path, 'cnb key') - @cnb_buildpack = Buildpack.make(key: 'cnb key', position: 1, lifecycle: 'cnb') + @cnb_buildpack = create(:buildpack, key: 'cnb key', position: 1, lifecycle: 'cnb') buildpack_blobstore.cp_to_blobstore(buildpack_file_2.path, 'b key') - Buildpack.make(key: 'b key', position: 1) + create(:buildpack, key: 'b key', position: 1) buildpack_blobstore.cp_to_blobstore(buildpack_file_3.path, 'c key') - @another_buildpack = Buildpack.make(key: 'c key', position: 3) + @another_buildpack = create(:buildpack, key: 'c key', position: 3) end it { is_expected.to have(3).items } @@ -179,7 +179,7 @@ def ordered_buildpacks end context 'and there are buildpacks with null keys' do - let!(:null_buildpack) { Buildpack.create(name: 'nil_key_custom_buildpack', stack: Stack.make.name, position: 0) } + let!(:null_buildpack) { Buildpack.create(name: 'nil_key_custom_buildpack', stack: create(:stack).name, position: 0) } it 'only returns buildpacks with non-null keys' do expect(Buildpack.all).to include(null_buildpack) @@ -189,7 +189,7 @@ def ordered_buildpacks end context 'and there are buildpacks with empty keys' do - let!(:empty_buildpack) { Buildpack.create(name: 'nil_key_custom_buildpack', stack: Stack.make.name, key: '', position: 0) } + let!(:empty_buildpack) { Buildpack.create(name: 'nil_key_custom_buildpack', stack: create(:stack).name, key: '', position: 0) } it 'only returns buildpacks with non-null keys' do expect(Buildpack.all).to include(empty_buildpack) @@ -206,8 +206,8 @@ def ordered_buildpacks end context 'when there are disabled buildpacks' do - let!(:enabled_buildpack) { Buildpack.make(key: 'enabled-buildpack', enabled: true) } - let!(:disabled_buildpack) { Buildpack.make(key: 'disabled-buildpack', enabled: false) } + let!(:enabled_buildpack) { create(:buildpack, key: 'enabled-buildpack', enabled: true) } + let!(:disabled_buildpack) { create(:buildpack, key: 'disabled-buildpack', enabled: false) } it 'includes them in the list' do expect(all_buildpacks).to contain_exactly(enabled_buildpack, disabled_buildpack) @@ -217,21 +217,21 @@ def ordered_buildpacks context 'with a stack' do let(:cnb_buildpacks) { Buildpack.list_admin_buildpacks('stack2', 'cnb') } subject(:all_buildpacks) { Buildpack.list_admin_buildpacks('stack1') } - let!(:stack1) { Stack.make(name: 'stack1') } - let!(:stack2) { Stack.make(name: 'stack2') } + let!(:stack1) { create(:stack, name: 'stack1') } + let!(:stack2) { create(:stack, name: 'stack2') } before do buildpack_blobstore.cp_to_blobstore(buildpack_file_1.path, 'a key') - Buildpack.make(key: 'a key', position: 2, stack: 'stack1') + create(:buildpack, key: 'a key', position: 2, stack: 'stack1') buildpack_blobstore.cp_to_blobstore(buildpack_file_2.path, 'b key') - Buildpack.make(key: 'b key', position: 1, stack: 'stack2') + create(:buildpack, key: 'b key', position: 1, stack: 'stack2') buildpack_blobstore.cp_to_blobstore(buildpack_file_cnb.path, 'cnb key') - Buildpack.make(key: 'cnb key', position: 1, stack: 'stack2', lifecycle: 'cnb') + create(:buildpack, key: 'cnb key', position: 1, stack: 'stack2', lifecycle: 'cnb') buildpack_blobstore.cp_to_blobstore(buildpack_file_3.path, 'c key') - @another_buildpack = Buildpack.make(key: 'c key', position: 3, stack: nil) + @another_buildpack = create(:buildpack, key: 'c key', position: 3, stack: nil) end it { is_expected.to have(2).items } @@ -248,14 +248,14 @@ def ordered_buildpacks describe 'staging_message' do it 'contains the buildpack key' do - buildpack = Buildpack.make + buildpack = create(:buildpack) expect(buildpack.staging_message).to eql(buildpack_key: buildpack.key) end end describe '#update' do let!(:buildpacks) do - Array.new(4) { |i| Buildpack.create(name: "name_#{100 - i}", stack: Stack.make.name, position: i + 1) } + Array.new(4) { |i| Buildpack.create(name: "name_#{100 - i}", stack: create(:stack).name, position: i + 1) } end it 'does not modify the frozen hash provided by Sequel' do @@ -266,8 +266,8 @@ def ordered_buildpacks end describe '#destroy' do - let!(:buildpack1) { VCAP::CloudController::Buildpack.create({ name: 'first_buildpack', stack: Stack.make.name, key: 'xyz', position: 1 }) } - let!(:buildpack2) { VCAP::CloudController::Buildpack.create({ name: 'second_buildpack', stack: Stack.make.name, key: 'xyz', position: 2 }) } + let!(:buildpack1) { VCAP::CloudController::Buildpack.create({ name: 'first_buildpack', stack: create(:stack).name, key: 'xyz', position: 1 }) } + let!(:buildpack2) { VCAP::CloudController::Buildpack.create({ name: 'second_buildpack', stack: create(:stack).name, key: 'xyz', position: 2 }) } it 'removes the specified buildpack' do expect do @@ -295,8 +295,8 @@ def ordered_buildpacks end describe '#state' do - let!(:buildpack1) { VCAP::CloudController::Buildpack.create({ name: 'first_buildpack', stack: Stack.make.name, key: 'xyz', position: 1, filename: '/some/file' }) } - let!(:buildpack2) { VCAP::CloudController::Buildpack.create({ name: 'second_buildpack', stack: Stack.make.name, key: 'xyz', position: 2, filename: nil }) } + let!(:buildpack1) { VCAP::CloudController::Buildpack.create({ name: 'first_buildpack', stack: create(:stack).name, key: 'xyz', position: 1, filename: '/some/file' }) } + let!(:buildpack2) { VCAP::CloudController::Buildpack.create({ name: 'second_buildpack', stack: create(:stack).name, key: 'xyz', position: 2, filename: nil }) } it 'returns ready when the buildpack has a filename' do expect(buildpack1.state).to eq('READY') diff --git a/spec/unit/models/runtime/cnb_lifecycle_data_model_spec.rb b/spec/unit/models/runtime/cnb_lifecycle_data_model_spec.rb index 038b7eaeb69..470e1094738 100644 --- a/spec/unit/models/runtime/cnb_lifecycle_data_model_spec.rb +++ b/spec/unit/models/runtime/cnb_lifecycle_data_model_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe CNBLifecycleDataModel do - subject(:lifecycle_data) { CNBLifecycleDataModel.make([]) } + subject(:lifecycle_data) { create(:cnb_lifecycle_data_model) } describe 'buildpack_lifecycle_buildpacks association' do it 'orders by id via the default_order_by_id extension' do @@ -22,10 +22,10 @@ module VCAP::CloudController describe '#buildpacks' do before do - Buildpack.make(name: 'another-buildpack') - Buildpack.make(name: 'new-buildpack') - Buildpack.make(name: 'ruby') - Buildpack.make(name: 'some-buildpack') + create(:buildpack, name: 'another-buildpack') + create(:buildpack, name: 'new-buildpack') + create(:buildpack, name: 'ruby') + create(:buildpack, name: 'some-buildpack') end context 'when passed in nil' do @@ -173,8 +173,8 @@ module VCAP::CloudController describe '#valid?' do it 'cannot be associated with both an app and a build' do - build = BuildModel.make - app = AppModel.make + build = create(:build_model) + app = create(:app_model) lifecycle_data.build = build lifecycle_data.app = app expect(lifecycle_data.valid?).to be(false) @@ -182,8 +182,8 @@ module VCAP::CloudController end it 'cannot be associated with both an app and a droplet' do - droplet = DropletModel.make - app = AppModel.make + droplet = create(:droplet_model) + app = create(:app_model) lifecycle_data.droplet = droplet lifecycle_data.app = app expect(lifecycle_data.valid?).to be(false) @@ -191,7 +191,7 @@ module VCAP::CloudController end it 'cannot contain invalid buildpacks' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.buildpacks = [nil, nil] expect(lifecycle_data.valid?).to be(false) @@ -200,7 +200,7 @@ module VCAP::CloudController end it 'adds CNBLifecyleBuildpack errors to the BuildpackLifecycleBuildpacksDataModels' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.buildpacks = ['https://example.com', 'invalid_buildpack_name'] lifecycle_data.buildpack_lifecycle_buildpacks.each { |b| b.cnb_lifecycle_data = lifecycle_data } @@ -211,7 +211,7 @@ module VCAP::CloudController end it 'is valid' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.buildpacks = ['docker://gcr.io/acme', 'https://example.com'] expect(lifecycle_data.valid?).to be(true) @@ -220,21 +220,21 @@ module VCAP::CloudController describe 'associations' do it 'can be associated with a droplet' do - droplet = DropletModel.make + droplet = create(:droplet_model) lifecycle_data.droplet = droplet lifecycle_data.save expect(lifecycle_data.reload.droplet).to eq(droplet) end it 'can be associated with apps' do - app = AppModel.make + app = create(:app_model) lifecycle_data.app = app lifecycle_data.save expect(lifecycle_data.reload.app).to eq(app) end it 'can be associated with a build' do - build = BuildModel.make + build = create(:build_model) lifecycle_data.build = build lifecycle_data.save expect(lifecycle_data.reload.build).to eq(build) diff --git a/spec/unit/models/runtime/constraints/max_app_instances_policy_spec.rb b/spec/unit/models/runtime/constraints/max_app_instances_policy_spec.rb index fd8c79c6d11..1d5a9ce7c7c 100644 --- a/spec/unit/models/runtime/constraints/max_app_instances_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/max_app_instances_policy_spec.rb @@ -6,7 +6,7 @@ let(:max_apps) { 8 } let(:current_org_instances) { 3 } let(:process) { VCAP::CloudController::ProcessModelFactory.make(instances: 1, state: 'STARTED') } - let(:org_space) { VCAP::CloudController::Space.make organization: process.organization } + let(:org_space) { create(:space, organization: process.organization) } let!(:org_process) { VCAP::CloudController::ProcessModelFactory.make(space: org_space, instances: current_org_instances, state: 'STARTED') } let(:quota_definition) { double(app_instance_limit: max_apps) } let(:error_name) { :app_instance_limit_error } diff --git a/spec/unit/models/runtime/constraints/max_app_tasks_policy_spec.rb b/spec/unit/models/runtime/constraints/max_app_tasks_policy_spec.rb index 63c323879aa..24ce5dae426 100644 --- a/spec/unit/models/runtime/constraints/max_app_tasks_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/max_app_tasks_policy_spec.rb @@ -3,10 +3,10 @@ RSpec.describe MaxAppTasksPolicy do subject(:validator) { MaxAppTasksPolicy.new(task, org, error_name) } - let(:quota_definition) { VCAP::CloudController::QuotaDefinition.make(app_task_limit: 1) } + let(:quota_definition) { create(:quota_definition, app_task_limit: 1) } let(:org) { space.organization } - let(:space) { VCAP::CloudController::Space.make } - let(:app) { VCAP::CloudController::AppModel.make(space_guid: space.guid) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space_guid: space.guid) } let(:task) { VCAP::CloudController::TaskModel.new(app:) } let(:error_name) { :app_task_limit_error } @@ -35,7 +35,7 @@ end context 'when app task limit is -1' do - let(:quota_definition) { VCAP::CloudController::QuotaDefinition.make(app_task_limit: -1) } + let(:quota_definition) { create(:quota_definition, app_task_limit: -1) } it 'does not give error' do expect(validator).to validate_without_error(task) @@ -44,7 +44,7 @@ context 'when the quota is exceeded' do before do - VCAP::CloudController::TaskModel.make(app:) + create(:task_model, app:) end it 'registers an error' do diff --git a/spec/unit/models/runtime/constraints/max_instance_memory_policy_spec.rb b/spec/unit/models/runtime/constraints/max_instance_memory_policy_spec.rb index b5849e606f3..494872d1d6d 100644 --- a/spec/unit/models/runtime/constraints/max_instance_memory_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/max_instance_memory_policy_spec.rb @@ -139,7 +139,7 @@ describe TaskMaxInstanceMemoryPolicy do subject(:validator) { TaskMaxInstanceMemoryPolicy.new(task, policy_target, error_name) } - let(:task) { VCAP::CloudController::TaskModel.make } + let(:task) { create(:task_model) } it 'gives error when task memory_in_mb exceeds instance memory limit' do task.memory_in_mb = 200 diff --git a/spec/unit/models/runtime/constraints/max_log_rate_limit_policy_spec.rb b/spec/unit/models/runtime/constraints/max_log_rate_limit_policy_spec.rb index 1f890f70f84..c2f90b55cda 100644 --- a/spec/unit/models/runtime/constraints/max_log_rate_limit_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/max_log_rate_limit_policy_spec.rb @@ -129,7 +129,7 @@ describe TaskMaxLogRateLimitPolicy do subject(:validator) { TaskMaxLogRateLimitPolicy.new(task, org_or_space, error_name) } - let(:task) { VCAP::CloudController::TaskModel.make log_rate_limit: 150, state: VCAP::CloudController::TaskModel::RUNNING_STATE } + let(:task) { create(:task_model, log_rate_limit: 150, state: VCAP::CloudController::TaskModel::RUNNING_STATE) } context 'when not cancelling a task' do it 'registers error when quota is exceeded' do diff --git a/spec/unit/models/runtime/constraints/max_memory_policy_spec.rb b/spec/unit/models/runtime/constraints/max_memory_policy_spec.rb index cb1f614957a..786db2c52a8 100644 --- a/spec/unit/models/runtime/constraints/max_memory_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/max_memory_policy_spec.rb @@ -42,7 +42,7 @@ describe TaskMaxMemoryPolicy do subject(:validator) { TaskMaxMemoryPolicy.new(task, org_or_space, error_name) } - let(:task) { VCAP::CloudController::TaskModel.make memory_in_mb: 150, state: VCAP::CloudController::TaskModel::RUNNING_STATE } + let(:task) { create(:task_model, memory_in_mb: 150, state: VCAP::CloudController::TaskModel::RUNNING_STATE) } context 'when not cancelling a task' do it 'registers error when quota is exceeded' do diff --git a/spec/unit/models/runtime/constraints/sidecar_memory_less_than_process_memory_policy_spec.rb b/spec/unit/models/runtime/constraints/sidecar_memory_less_than_process_memory_policy_spec.rb index 26efd86f3cf..1b4db9d75aa 100644 --- a/spec/unit/models/runtime/constraints/sidecar_memory_less_than_process_memory_policy_spec.rb +++ b/spec/unit/models/runtime/constraints/sidecar_memory_less_than_process_memory_policy_spec.rb @@ -5,20 +5,20 @@ let(:error_name) { :random_memory_error } describe SidecarMemoryLessThanProcessMemoryPolicy do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:process) { VCAP::CloudController::ProcessModelFactory.make(memory: 30, type: 'web', app: app_model) } let(:validator) { SidecarMemoryLessThanProcessMemoryPolicy.new(process, 20) } - let!(:sidecar_1) { VCAP::CloudController::SidecarModel.make(memory: 10, app: app_model) } - let!(:sidecar_process_type_1) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_1, type: 'web') } + let!(:sidecar_1) { create(:sidecar_model, memory: 10, app: app_model) } + let!(:sidecar_process_type_1) { create(:sidecar_process_type_model, sidecar: sidecar_1, type: 'web') } context 'when total sidecar memory is greater than than process memory' do - let!(:sidecar_2) { VCAP::CloudController::SidecarModel.make(memory: 10, app: app_model) } - let!(:sidecar_process_type_2) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_2, app_guid: app_model.guid, type: 'web') } + let!(:sidecar_2) { create(:sidecar_model, memory: 10, app: app_model) } + let!(:sidecar_process_type_2) { create(:sidecar_process_type_model, sidecar: sidecar_2, app_guid: app_model.guid, type: 'web') } - let!(:sidecar_3) { VCAP::CloudController::SidecarModel.make(memory: nil, app: app_model) } - let!(:sidecar_process_type_3) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } + let!(:sidecar_3) { create(:sidecar_model, memory: nil, app: app_model) } + let!(:sidecar_process_type_3) { create(:sidecar_process_type_model, sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } it 'returns false' do expect(validator.valid?).to be false @@ -26,8 +26,8 @@ end context 'when at least one sidecar process memory is nil' do - let!(:sidecar_3) { VCAP::CloudController::SidecarModel.make(memory: nil, app: app_model) } - let!(:sidecar_process_type_3) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } + let!(:sidecar_3) { create(:sidecar_model, memory: nil, app: app_model) } + let!(:sidecar_process_type_3) { create(:sidecar_process_type_model, sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } it 'does not error' do expect(validator.valid?).to be false @@ -35,8 +35,8 @@ end context 'when total sidecar memory is lesser than process memory' do - let!(:sidecar_3) { VCAP::CloudController::SidecarModel.make(memory: nil, app: app_model) } - let!(:sidecar_process_type_3) { VCAP::CloudController::SidecarProcessTypeModel.make(sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } + let!(:sidecar_3) { create(:sidecar_model, memory: nil, app: app_model) } + let!(:sidecar_process_type_3) { create(:sidecar_process_type_model, sidecar: sidecar_3, app_guid: app_model.guid, type: 'web') } let(:validator) { SidecarMemoryLessThanProcessMemoryPolicy.new(process, 10) } diff --git a/spec/unit/models/runtime/deployment_model_spec.rb b/spec/unit/models/runtime/deployment_model_spec.rb index 21cc5c5fd9f..32da49c7603 100644 --- a/spec/unit/models/runtime/deployment_model_spec.rb +++ b/spec/unit/models/runtime/deployment_model_spec.rb @@ -2,12 +2,12 @@ module VCAP::CloudController RSpec.describe DeploymentModel do - let(:app) { AppModel.make(name: 'rolling-app') } - let(:droplet) { DropletModel.make(app:) } - let(:deploying_web_process) { ProcessModel.make(health_check_timeout: 180) } + let(:app) { create(:app_model, name: 'rolling-app') } + let(:droplet) { create(:droplet_model, app:) } + let(:deploying_web_process) { create(:process_model, health_check_timeout: 180) } let(:canary_steps) { [{ 'instance_weight' => 20 }, { 'instance_weight' => 40 }] } let(:strategy) { DeploymentModel::CANARY_STRATEGY } - let(:deployment) { DeploymentModel.make(app:, droplet:, deploying_web_process:, canary_steps:, strategy:, web_instances:) } + let(:deployment) { create(:deployment_model, app:, droplet:, deploying_web_process:, canary_steps:, strategy:, web_instances:) } let(:web_instances) { nil } it 'has an app' do @@ -54,19 +54,13 @@ module VCAP::CloudController describe '#processes' do before do - DeploymentProcessModel.make( - deployment: deployment, - process_guid: deploying_web_process.guid, - process_type: deploying_web_process.type - ) - DeploymentProcessModel.make( - deployment: deployment, - process_guid: 'guid-for-deleted-process', - process_type: 'i-do-not-exist!!!!!!!!!!' - ) - DeploymentProcessModel.make( - deployment: DeploymentModel.make - ) + create(:deployment_process_model, deployment: deployment, + process_guid: deploying_web_process.guid, + process_type: deploying_web_process.type) + create(:deployment_process_model, deployment: deployment, + process_guid: 'guid-for-deleted-process', + process_type: 'i-do-not-exist!!!!!!!!!!') + create(:deployment_process_model, deployment: create(:deployment_model)) end it 'has deployment processes with the deploying web process' do @@ -221,13 +215,11 @@ module VCAP::CloudController describe '#status_updated_at' do let(:deployment) do - DeploymentModel.make( - app: app, - droplet: droplet, - deploying_web_process: deploying_web_process, - status_reason: DeploymentModel::DEPLOYING_STATUS_REASON, - status_value: DeploymentModel::ACTIVE_STATUS_VALUE - ) + create(:deployment_model, app: app, + droplet: droplet, + deploying_web_process: deploying_web_process, + status_reason: DeploymentModel::DEPLOYING_STATUS_REASON, + status_value: DeploymentModel::ACTIVE_STATUS_VALUE) end # Can't use Timecop with created_at since its set by the DB @@ -344,15 +336,13 @@ module VCAP::CloudController let(:canary_steps) { test[:weights].map { |weight| { instance_weight: weight } } } let(:deployment) do - DeploymentModel.make( - app: app, - droplet: droplet, - strategy: 'canary', - deploying_web_process: deploying_web_process, - original_web_process_instance_count: test[:existing_instances], - canary_steps: canary_steps, - canary_current_step: 1 - ) + create(:deployment_model, app: app, + droplet: droplet, + strategy: 'canary', + deploying_web_process: deploying_web_process, + original_web_process_instance_count: test[:existing_instances], + canary_steps: canary_steps, + canary_current_step: 1) end it 'returns the correct deployment plan' do @@ -363,14 +353,12 @@ module VCAP::CloudController context 'when deployment is canary but canary steps are empty' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - original_web_process_instance_count: 10, - canary_current_step: 1 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + original_web_process_instance_count: 10, + canary_current_step: 1) end it 'returns the correct deployment plan' do @@ -380,15 +368,13 @@ module VCAP::CloudController context 'when deployment is has a 100% step' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], - original_web_process_instance_count: 10, - canary_current_step: 1 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], + original_web_process_instance_count: 10, + canary_current_step: 1) end it 'provides an extra canary instance for every step except at 100%' do @@ -399,16 +385,14 @@ module VCAP::CloudController context 'when web_instances is lower than original_web_process_instance_count' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], - original_web_process_instance_count: 100, - web_instances: 10, - canary_current_step: 1 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], + original_web_process_instance_count: 100, + web_instances: 10, + canary_current_step: 1) end it 'uses web_instances to calculate a plan' do @@ -419,16 +403,14 @@ module VCAP::CloudController context 'when original_web_process_instance_count is lower than web_instances' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], - original_web_process_instance_count: 10, - web_instances: 100, - canary_current_step: 1 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], + original_web_process_instance_count: 10, + web_instances: 100, + canary_current_step: 1) end it 'uses original_web_process_instance_count to calculate a plan' do @@ -439,13 +421,11 @@ module VCAP::CloudController context 'when deployment is not canary' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'rolling', - droplet: droplet, - deploying_web_process: deploying_web_process, - original_web_process_instance_count: 10 - ) + create(:deployment_model, app: app, + strategy: 'rolling', + droplet: droplet, + deploying_web_process: deploying_web_process, + original_web_process_instance_count: 10) end it 'returns the correct deployment plan' do @@ -456,14 +436,12 @@ module VCAP::CloudController describe '#current_canary_instance_target' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], - original_web_process_instance_count: 10 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], + original_web_process_instance_count: 10) end it 'returns the canary target of the current step' do @@ -475,14 +453,12 @@ module VCAP::CloudController describe '#canary_total_instances' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], - original_web_process_instance_count: 10 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + canary_steps: [{ instance_weight: 1 }, { instance_weight: 25 }, { instance_weight: 50 }, { instance_weight: 99 }, { instance_weight: 100 }], + original_web_process_instance_count: 10) end it 'returns the total instances of the canary and original processes' do @@ -494,15 +470,13 @@ module VCAP::CloudController describe '#canary_step' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'canary', - droplet: droplet, - deploying_web_process: deploying_web_process, - original_web_process_instance_count: 10, - canary_steps: [{ instance_weight: 20 }, { instance_weight: 40 }], - canary_current_step: 1 - ) + create(:deployment_model, app: app, + strategy: 'canary', + droplet: droplet, + deploying_web_process: deploying_web_process, + original_web_process_instance_count: 10, + canary_steps: [{ instance_weight: 20 }, { instance_weight: 40 }], + canary_current_step: 1) end it 'returns the correct deployment plan' do @@ -514,13 +488,11 @@ module VCAP::CloudController context 'when canary current step is not set' do let(:deployment) do - DeploymentModel.make( - app: app, - droplet: droplet, - strategy: 'canary', - deploying_web_process: deploying_web_process, - original_web_process_instance_count: 10 - ) + create(:deployment_model, app: app, + droplet: droplet, + strategy: 'canary', + deploying_web_process: deploying_web_process, + original_web_process_instance_count: 10) end it 'returns the correct deployment plan' do @@ -530,13 +502,11 @@ module VCAP::CloudController context 'when deployment is not canary' do let(:deployment) do - DeploymentModel.make( - app: app, - strategy: 'rolling', - droplet: droplet, - deploying_web_process: deploying_web_process, - original_web_process_instance_count: 10 - ) + create(:deployment_model, app: app, + strategy: 'rolling', + droplet: droplet, + deploying_web_process: deploying_web_process, + original_web_process_instance_count: 10) end it 'returns the correct deployment plan' do diff --git a/spec/unit/models/runtime/domain_spec.rb b/spec/unit/models/runtime/domain_spec.rb index e3e94564e8b..06d7a3abad4 100644 --- a/spec/unit/models/runtime/domain_spec.rb +++ b/spec/unit/models/runtime/domain_spec.rb @@ -5,12 +5,12 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'cannot create top level domains' do - expect { Domain.make name: 'com' }.to raise_error(Sequel::ValidationFailed, /name.*alphanumeric characters and hyphens/) + expect { create(:domain, name: 'com') }.to raise_error(Sequel::ValidationFailed, /name.*alphanumeric characters and hyphens/) end it "can't be created if foo would become parent" do - PrivateDomain.make name: 'bar.foo.com' - expect { PrivateDomain.make name: 'foo.com' }.to raise_error( + create(:private_domain, name: 'bar.foo.com') + expect { create(:private_domain, name: 'foo.com') }.to raise_error( Sequel::ValidationFailed, /The domain name "foo.com" cannot be created because "bar.foo.com" is already reserved by another domain/ ) @@ -18,20 +18,20 @@ module VCAP::CloudController describe 'Associations' do context 'routes' do - let(:space) { Space.make } + let(:space) { create(:space) } it { expect(subject).to have_associated :routes, - test_instance: SharedDomain.make, - associated_instance: ->(domain) { Route.make(space:, domain:) } + test_instance: create(:shared_domain), + associated_instance: ->(domain) { create(:route, space:, domain:) } } end context 'shared_organizations' do - let(:org) { Organization.make } + let(:org) { create(:organization) } it 'associates with shared organizations' do - domain = Domain.make(owning_organization_id: Organization.make.id) + domain = create(:domain, owning_organization_id: create(:organization).id) domain.add_shared_organization(org) expect(domain.shared_organizations).to include(org) end @@ -40,7 +40,7 @@ module VCAP::CloudController context 'when the domain is a shared domain' do it 'fails validation' do - domain = Domain.make(owning_organization_id: nil) + domain = create(:domain, owning_organization_id: nil) expect { domain.add_shared_organization(org) }.to raise_error(Sequel::HookFailed) expect(domain.shared_organizations).not_to include(org) end @@ -48,7 +48,7 @@ module VCAP::CloudController context 'when the domain is owned by the organization' do it 'fails validation' do - domain = Domain.make(owning_organization_id: org.id) + domain = create(:domain, owning_organization_id: org.id) expect { domain.add_shared_organization(org) }.to raise_error(Sequel::HookFailed) expect(domain.shared_organizations).not_to include(org) end @@ -56,11 +56,11 @@ module VCAP::CloudController end context 'owning_organization' do - let(:org) { Organization.make } + let(:org) { create(:organization) } it do expect(subject).to have_associated :owning_organization, - test_instance: Domain.make(owning_organization: org), + test_instance: create(:domain, owning_organization: org), associated_instance: ->(_domain) { org } end end @@ -68,30 +68,30 @@ module VCAP::CloudController context 'changing owning_organization' do context 'shared domains' do it 'prevents converting a shared domain into a private domain' do - shared = SharedDomain.make - expect { shared.owning_organization = Organization.make }.to raise_error(CloudController::Errors::ApiError, /the owning organization cannot be changed/) + shared = create(:shared_domain) + expect { shared.owning_organization = create(:organization) }.to raise_error(CloudController::Errors::ApiError, /the owning organization cannot be changed/) end it 'succeeds when setting the org to the same thing' do - shared = SharedDomain.make + shared = create(:shared_domain) expect { shared.owning_organization = nil }.not_to raise_error end end context 'private domains' do it 'prevents converting a private domain into a shared domain' do - private_domain = PrivateDomain.make + private_domain = create(:private_domain) expect { private_domain.owning_organization = nil }.to raise_error(CloudController::Errors::ApiError, /the owning organization cannot be changed/) end it 'prevents changing orgs on a private domain' do - private_domain = PrivateDomain.make - expect { private_domain.owning_organization = Organization.make }.to raise_error(CloudController::Errors::ApiError, /the owning organization cannot be changed/) + private_domain = create(:private_domain) + expect { private_domain.owning_organization = create(:organization) }.to raise_error(CloudController::Errors::ApiError, /the owning organization cannot be changed/) end it 'succeeds when setting the org to the same thing' do - org = Organization.make - private_domain = PrivateDomain.make(owning_organization: org) + org = create(:organization) + private_domain = create(:private_domain, owning_organization: org) expect { private_domain.owning_organization = org }.not_to raise_error end end @@ -108,11 +108,11 @@ module VCAP::CloudController it { is_expected.to validate_uniqueness :name } describe 'route collisions' do - let!(:existing_domain) { SharedDomain.make(name: 'base.domain') } - let!(:existing_route) { Route.make(host: 'route', domain: existing_domain) } + let!(:existing_domain) { create(:shared_domain, name: 'base.domain') } + let!(:existing_route) { create(:route, host: 'route', domain: existing_domain) } it 'does not allow a new domain to overlap with an existing route' do - expect { Domain.make(name: 'something.route.base.domain') }.to raise_error( + expect { create(:domain, name: 'something.route.base.domain') }.to raise_error( Sequel::ValidationFailed, /The domain name "something.route.base.domain" cannot be created because "route.base.domain" is already reserved by a route/ ) @@ -124,11 +124,11 @@ module VCAP::CloudController before { SharedDomain.dataset.destroy } it 'is able to eager load spaces' do - domain = PrivateDomain.make + domain = create(:private_domain) org = domain.owning_organization - space1 = Space.make(organization: org) - space2 = Space.make(organization: org) + space1 = create(:space, organization: org) + space2 = create(:space, organization: org) expect do @eager_loaded_domain = Domain.eager(:spaces_sti_eager_load).where(id: domain.id).all.first @@ -144,14 +144,14 @@ module VCAP::CloudController end it 'has correct spaces for each domain' do - domain1 = PrivateDomain.make - domain2 = PrivateDomain.make + domain1 = create(:private_domain) + domain2 = create(:private_domain) org1 = domain1.owning_organization org2 = domain2.owning_organization - space1 = Space.make(organization: org1) - space2 = Space.make(organization: org2) + space1 = create(:space, organization: org1) + space2 = create(:space, organization: org2) expect do @eager_loaded_domains = Domain.eager(:spaces_sti_eager_load).where(id: [domain1.id, domain2.id]).order_by(:id).all @@ -164,11 +164,11 @@ module VCAP::CloudController end it 'passes in dataset to be loaded to eager_block option' do - domain = PrivateDomain.make + domain = create(:private_domain) org = domain.owning_organization - space1 = Space.make(organization: org) - Space.make(organization: org) + space1 = create(:space, organization: org) + create(:space, organization: org) eager_block = proc { |ds| ds.where(id: space1.id) } @@ -180,9 +180,9 @@ module VCAP::CloudController end it 'allow nested eager_load' do - domain = PrivateDomain.make + domain = create(:private_domain) org = domain.owning_organization - Space.make(organization: org) + create(:space, organization: org) expect do @eager_loaded_domain = Domain.eager(spaces_sti_eager_load: :organization).where(id: domain.id).all.first @@ -194,7 +194,7 @@ module VCAP::CloudController end it 'copes with SharedDomain since they also are subclasses of Domain' do - domain = SharedDomain.make + domain = create(:shared_domain) expect do @eager_loaded_domain = Domain.eager(:spaces_sti_eager_load).where(id: domain.id).all.first diff --git a/spec/unit/models/runtime/droplet_annotation_model_spec.rb b/spec/unit/models/runtime/droplet_annotation_model_spec.rb index 9f510f59f60..28e5336c8c3 100644 --- a/spec/unit/models/runtime/droplet_annotation_model_spec.rb +++ b/spec/unit/models/runtime/droplet_annotation_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - droplet = DropletModel.make - DropletAnnotationModel.make(resource_guid: droplet.guid, key_prefix: 'coolapp', key_name: 'release', value: 'stable') + droplet = create(:droplet_model) + create(:droplet_annotation_model, resource_guid: droplet.guid, key_prefix: 'coolapp', key_name: 'release', value: 'stable') expect(DropletAnnotationModel.find(key_prefix: 'coolapp', key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/droplet_label_model_spec.rb b/spec/unit/models/runtime/droplet_label_model_spec.rb index 7f748fd1681..bdfa2accefb 100644 --- a/spec/unit/models/runtime/droplet_label_model_spec.rb +++ b/spec/unit/models/runtime/droplet_label_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - droplet = DropletModel.make - DropletLabelModel.make(resource_guid: droplet.guid, key_name: 'release', value: 'stable') + droplet = create(:droplet_model) + create(:droplet_label_model, resource_guid: droplet.guid, key_name: 'release', value: 'stable') expect(DropletLabelModel.find(key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/droplet_model_spec.rb b/spec/unit/models/runtime/droplet_model_spec.rb index 032b551c267..6762975aa93 100644 --- a/spec/unit/models/runtime/droplet_model_spec.rb +++ b/spec/unit/models/runtime/droplet_model_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController it { is_expected.to validates_includes DropletModel::DROPLET_STATES, :state, allow_missing: true } describe '#blobstore_key' do - let(:droplet) { DropletModel.make(droplet_hash: droplet_hash, app: nil) } + let(:droplet) { create(:droplet_model, droplet_hash: droplet_hash, app: nil) } context 'when the droplet has been uploaded' do let(:droplet_hash) { 'foobar' } @@ -26,7 +26,7 @@ module VCAP::CloudController describe '#staged?' do context 'when the droplet has been staged' do - let!(:droplet_model) { DropletModel.make(state: 'STAGED', app: nil) } + let!(:droplet_model) { create(:droplet_model, state: 'STAGED', app: nil) } it 'returns true' do expect(droplet_model.staged?).to be true @@ -34,7 +34,7 @@ module VCAP::CloudController end context 'when the droplet has not been staged' do - let!(:droplet_model) { DropletModel.make(state: 'STAGING', app: nil) } + let!(:droplet_model) { create(:droplet_model, state: 'STAGING', app: nil) } it 'returns false' do expect(droplet_model.staged?).to be false @@ -43,7 +43,7 @@ module VCAP::CloudController end describe '#mark_as_staged' do - let!(:droplet_model) { DropletModel.make(app: nil) } + let!(:droplet_model) { create(:droplet_model, app: nil) } it 'changes the droplet state to STAGED' do droplet_model.mark_as_staged @@ -52,7 +52,7 @@ module VCAP::CloudController end describe 'process_types' do - let(:droplet_model) { DropletModel.make(app: nil) } + let(:droplet_model) { create(:droplet_model, app: nil) } it 'is a persistable hash' do info = { web: 'started', worker: 'started' } @@ -70,7 +70,7 @@ module VCAP::CloudController end context 'when there is buildpack_lifecycle_data associated to the droplet' do - let(:droplet_model) { DropletModel.make(app: nil) } + let(:droplet_model) { create(:droplet_model, app: nil) } it 'returns the string "buildpack"' do expect(droplet_model.lifecycle_type).to eq('buildpack') @@ -78,7 +78,7 @@ module VCAP::CloudController end context 'when there is cnb_lifecycle_data associated to the droplet' do - let(:droplet_model) { DropletModel.make(:cnb, app: nil) } + let(:droplet_model) { create(:droplet_model, :cnb, app: nil) } it 'returns the string "cnb"' do expect(droplet_model.lifecycle_type).to eq('cnb') @@ -86,7 +86,7 @@ module VCAP::CloudController end context 'when there is no lifecycle data associated to the droplet' do - let(:droplet_model) { DropletModel.make(:docker, app: nil) } + let(:droplet_model) { create(:droplet_model, :docker, app: nil) } it 'returns the string "docker"' do expect(droplet_model.lifecycle_type).to eq('docker') @@ -96,13 +96,13 @@ module VCAP::CloudController describe '#before_create' do it 'inherits lifecycle_type from app if not set' do - app = AppModel.make(:cnb) + app = create(:app_model, :cnb) droplet = DropletModel.create(app: app, state: DropletModel::STAGING_STATE) expect(droplet[:lifecycle_type]).to eq('cnb') end it 'uses explicit lifecycle_type if set' do - app = AppModel.make + app = create(:app_model) droplet = DropletModel.create(app: app, state: DropletModel::STAGING_STATE, lifecycle_type: 'docker') expect(droplet[:lifecycle_type]).to eq('docker') end @@ -111,14 +111,14 @@ module VCAP::CloudController describe 'validations' do it 'validates lifecycle_type is one of buildpack, cnb, or docker' do expect do - DropletModel.make(lifecycle_type: 'invalid') + create(:droplet_model, lifecycle_type: 'invalid') end.to raise_error(Sequel::ValidationFailed, /lifecycle_type/) end it 'accepts valid lifecycle_type values' do %w[buildpack cnb docker].each do |type| expect do - DropletModel.make(lifecycle_type: type) + create(:droplet_model, lifecycle_type: type) end.not_to raise_error end end @@ -126,7 +126,7 @@ module VCAP::CloudController describe '#lifecycle_data' do context 'buildpack_lifecycle_data' do - let!(:droplet_model) { DropletModel.make(app: nil) } + let!(:droplet_model) { create(:droplet_model, app: nil) } it 'returns a buildpack lifecycle data model' do expect(droplet_model.lifecycle_data).to be_a(BuildpackLifecycleDataModel) @@ -142,7 +142,7 @@ module VCAP::CloudController end context 'cnb_lifecycle_data' do - let!(:droplet_model) { DropletModel.make(:cnb, app: nil) } + let!(:droplet_model) { create(:droplet_model, :cnb, app: nil) } it 'returns a cnb lifecycle data model' do expect(droplet_model.lifecycle_data).to be_a(CNBLifecycleDataModel) @@ -158,7 +158,7 @@ module VCAP::CloudController end context 'neither buildpack_lifecycle_data, nor cnb_lifecycle_data' do - let(:droplet_model) { DropletModel.make(:docker, app: nil) } + let(:droplet_model) { create(:droplet_model, :docker, app: nil) } it 'returns a docker lifecycle data model' do expect(droplet_model.lifecycle_data).to be_a(DockerLifecycleDataModel) @@ -169,7 +169,7 @@ module VCAP::CloudController end describe '#set_buildpack_receipt' do - let!(:droplet_model) { DropletModel.make(state: 'STAGED', app: nil) } + let!(:droplet_model) { create(:droplet_model, state: 'STAGED', app: nil) } it 'records the output of the detect script' do droplet_model.set_buildpack_receipt(buildpack_key: nil, requested_buildpack: nil, detect_output: 'detect-output') @@ -177,7 +177,7 @@ module VCAP::CloudController end describe 'admin buildpack' do - let(:buildpack) { Buildpack.make } + let(:buildpack) { create(:buildpack) } let(:buildpack_key) { buildpack.key } it 'records the admin buildpack info' do @@ -217,7 +217,7 @@ module VCAP::CloudController end describe '#fail_to_stage!' do - subject(:droplet) { DropletModel.make(state: DropletModel::STAGING_STATE, app: nil) } + subject(:droplet) { create(:droplet_model, state: DropletModel::STAGING_STATE, app: nil) } it 'sets the state to FAILED' do expect { droplet.fail_to_stage! }.to change(droplet, :state).to(DropletModel::FAILED_STATE) @@ -273,8 +273,8 @@ module VCAP::CloudController end describe '#droplet_checksum' do - let!(:droplet_model_with_both) { DropletModel.make(sha256_checksum: 'foo', droplet_hash: 'bar', app: nil) } - let!(:droplet_model_with_only_sha1) { DropletModel.make(sha256_checksum: nil, droplet_hash: 'baz', app: nil) } + let!(:droplet_model_with_both) { create(:droplet_model, sha256_checksum: 'foo', droplet_hash: 'bar', app: nil) } + let!(:droplet_model_with_only_sha1) { create(:droplet_model, sha256_checksum: nil, droplet_hash: 'baz', app: nil) } it 'returns the sha256_checksum when present' do expect(droplet_model_with_both.checksum).to eq('foo') @@ -286,20 +286,16 @@ module VCAP::CloudController end describe '#labels' do - let!(:droplet) { DropletModel.make(app: nil) } + let!(:droplet) { create(:droplet_model, app: nil) } let!(:label) do - VCAP::CloudController::DropletLabelModel.make( - key_name: 'potato', - value: 'spielgasse', - resource_guid: droplet.guid - ) + create(:droplet_label_model, key_name: 'potato', + value: 'spielgasse', + resource_guid: droplet.guid) end let!(:annotation) do - VCAP::CloudController::DropletAnnotationModel.make( - key_name: 'vegetable', - value: 'asparagus', - resource_guid: droplet.guid - ) + create(:droplet_annotation_model, key_name: 'vegetable', + value: 'asparagus', + resource_guid: droplet.guid) end it 'can find the associated labels' do @@ -312,11 +308,11 @@ module VCAP::CloudController end describe '#docker_user' do - let(:droplet_model) { DropletModel.make } + let(:droplet_model) { create(:droplet_model) } context 'when the droplet belongs to a Docker lifecycle app' do let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"cnb"}' } - let(:droplet_model) { DropletModel.make(:docker, execution_metadata: droplet_execution_metadata) } + let(:droplet_model) { create(:droplet_model, :docker, execution_metadata: droplet_execution_metadata) } context 'when the droplet execution metadata specifies a user' do it 'returns the specified user' do diff --git a/spec/unit/models/runtime/environment_variable_group_spec.rb b/spec/unit/models/runtime/environment_variable_group_spec.rb index f61fb6dd108..b2b19cd8bbc 100644 --- a/spec/unit/models/runtime/environment_variable_group_spec.rb +++ b/spec/unit/models/runtime/environment_variable_group_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe EnvironmentVariableGroup, type: :model do - subject(:env_group) { EnvironmentVariableGroup.make } + subject(:env_group) { create(:environment_variable_group) } it { is_expected.to have_timestamp_columns } @@ -95,7 +95,7 @@ module VCAP::CloudController describe 'environment_variables' do it 'validates them' do expect do - EnvironmentVariableGroup.make(environment_json: { 'VCAP_SERVICES' => {} }) + create(:environment_variable_group, environment_json: { 'VCAP_SERVICES' => {} }) end.to raise_error(Sequel::ValidationFailed, /cannot start with VCAP_/) end end @@ -105,7 +105,7 @@ module VCAP::CloudController let(:long_env) { { 'many_os' => 'o' * 10_000 } } it 'works with long serialized environments' do - var_group = EnvironmentVariableGroup.make(environment_json: long_env) + var_group = create(:environment_variable_group, environment_json: long_env) var_group.reload expect(var_group.environment_json).to eq(long_env) end @@ -113,7 +113,7 @@ module VCAP::CloudController describe 'changing iteration count' do it 'does not update the encryption_iterations field until after decrypting existing data' do allow(Encryptor).to receive(:pbkdf2_hmac_iterations).and_return(2048) - var_group = EnvironmentVariableGroup.make(environment_json: { 'name' => 'value' }) + var_group = create(:environment_variable_group, environment_json: { 'name' => 'value' }) allow(Encryptor).to receive(:pbkdf2_hmac_iterations).and_return(12_345) var_group.update(environment_json: { 'name' => 'new_value' }) diff --git a/spec/unit/models/runtime/event_spec.rb b/spec/unit/models/runtime/event_spec.rb index bb3de09a3c4..f0a57801bc5 100644 --- a/spec/unit/models/runtime/event_spec.rb +++ b/spec/unit/models/runtime/event_spec.rb @@ -2,22 +2,20 @@ module VCAP::CloudController RSpec.describe Event, type: :model do - let(:space) { Space.make } + let(:space) { create(:space) } let(:event) do - Event.make( - type: 'audit.movie.premiere', - actor: 'ncage', - actor_type: 'One True God', - actor_name: 'Nicolas Cage', - actee: 'jtravolta', - actee_type: 'Scientologist', - actee_name: 'John Travolta', - timestamp: Time.new(1997, 6, 27).utc, - metadata: { 'popcorn_price' => '$(arm + leg)' }, - space_guid: space.guid, - organization_guid: space.organization.guid - ) + create(:event, type: 'audit.movie.premiere', + actor: 'ncage', + actor_type: 'One True God', + actor_name: 'Nicolas Cage', + actee: 'jtravolta', + actee_type: 'Scientologist', + actee_name: 'John Travolta', + timestamp: Time.new(1997, 6, 27).utc, + metadata: { 'popcorn_price' => '$(arm + leg)' }, + space_guid: space.guid, + organization_guid: space.organization.guid) end it { is_expected.to have_timestamp_columns } @@ -129,9 +127,9 @@ module VCAP::CloudController context 'when the space is deleted' do let(:space_guid) { 'space-guid-1234' } - let(:new_org) { Organization.make } - let(:new_space) { Space.make(guid: space_guid, organization: new_org) } - let!(:new_event) { Event.make(space_guid: new_space.guid, organization_guid: new_org.guid) } + let(:new_org) { create(:organization) } + let(:new_space) { create(:space, guid: space_guid, organization: new_org) } + let!(:new_event) { create(:event, space_guid: new_space.guid, organization_guid: new_org.guid) } before { new_space.destroy } diff --git a/spec/unit/models/runtime/feature_flag_spec.rb b/spec/unit/models/runtime/feature_flag_spec.rb index 88b41fd0e93..0e528b723f9 100644 --- a/spec/unit/models/runtime/feature_flag_spec.rb +++ b/spec/unit/models/runtime/feature_flag_spec.rb @@ -2,13 +2,13 @@ module VCAP::CloudController RSpec.describe FeatureFlag, type: :model do - let(:feature_flag) { FeatureFlag.make } + let(:feature_flag) { create(:feature_flag) } it { is_expected.to have_timestamp_columns } describe 'uniqueness' do it 'enforces uniqueness of name' do - existing_flag = FeatureFlag.make + existing_flag = create(:feature_flag) expect do FeatureFlag.create(name: existing_flag.name, enabled: true) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -38,7 +38,7 @@ module VCAP::CloudController end describe 'error message' do - subject(:feature_flag) { FeatureFlag.make } + subject(:feature_flag) { create(:feature_flag) } it 'shoud allow standard ascii characters' do feature_flag.error_message = "A -_- word 2!?()''&+." @@ -208,7 +208,7 @@ module VCAP::CloudController end context 'and there is a custom operator defined error message' do - let(:feature_flag) { FeatureFlag.make(error_message: 'foobar') } + let(:feature_flag) { create(:feature_flag, error_message: 'foobar') } it 'raises FeatureDisabled with the custom error message' do expect { FeatureFlag.raise_unless_enabled!(feature_flag.name) }.to raise_error(CloudController::Errors::ApiError) do |error| @@ -267,7 +267,7 @@ module VCAP::CloudController let(:admin_value) { !default_value } before do - FeatureFlag.make(name: key.to_s, enabled: admin_value) + create(:feature_flag, name: key.to_s, enabled: admin_value) end it 'overwrites the existing admin-set value' do diff --git a/spec/unit/models/runtime/helpers/package_state_calculator_spec.rb b/spec/unit/models/runtime/helpers/package_state_calculator_spec.rb index 85a54be9923..410b9e1a17b 100644 --- a/spec/unit/models/runtime/helpers/package_state_calculator_spec.rb +++ b/spec/unit/models/runtime/helpers/package_state_calculator_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController RSpec.describe 'PackageStateCalculator' do describe '#calculate' do - let(:parent_app) { AppModel.make } - let(:process) { ProcessModel.make(app: parent_app) } + let(:parent_app) { create(:app_model) } + let(:process) { create(:process_model, app: parent_app) } subject(:calculator) { PackageStateCalculator.new(process) } @@ -18,7 +18,7 @@ module VCAP::CloudController context 'when the package failed to upload' do before do - PackageModel.make(app: parent_app, state: PackageModel::FAILED_STATE) + create(:package_model, app: parent_app, state: PackageModel::FAILED_STATE) end it 'is FAILED' do @@ -28,7 +28,7 @@ module VCAP::CloudController context 'when the package is uploaded and there is no droplet or build for the app' do before do - PackageModel.make(app: parent_app, package_hash: 'hash') + create(:package_model, app: parent_app, package_hash: 'hash') end it 'is PENDING' do @@ -38,9 +38,9 @@ module VCAP::CloudController context 'when the package is uploaded and there is no CURRENT droplet' do before do - build = BuildModel.make(app: parent_app, state: BuildModel::STAGED_STATE) - DropletModel.make(app: parent_app, build: build, state: DropletModel::STAGED_STATE) - PackageModel.make(app: parent_app, package_hash: 'hash') + build = create(:build_model, app: parent_app, state: BuildModel::STAGED_STATE) + create(:droplet_model, app: parent_app, build: build, state: DropletModel::STAGED_STATE) + create(:package_model, app: parent_app, package_hash: 'hash') parent_app.update(droplet: nil) end @@ -51,9 +51,9 @@ module VCAP::CloudController context 'when the current droplet is the latest droplet' do before do - package = PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) - build = BuildModel.make(app: parent_app, package: package, state: BuildModel::STAGED_STATE) - droplet = DropletModel.make(app: parent_app, package: package, build: build, state: DropletModel::STAGED_STATE) + package = create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) + build = create(:build_model, app: parent_app, package: package, state: BuildModel::STAGED_STATE) + droplet = create(:droplet_model, app: parent_app, package: package, build: build, state: DropletModel::STAGED_STATE) parent_app.update(droplet:) end @@ -64,8 +64,8 @@ module VCAP::CloudController context 'when the current droplet is not the latest droplet' do before do - package = PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) - DropletModel.make(app: parent_app, package: package, state: DropletModel::STAGED_STATE) + package = create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) + create(:droplet_model, app: parent_app, package: package, state: DropletModel::STAGED_STATE, set_as_current_droplet: false) end it 'is PENDING' do @@ -75,8 +75,8 @@ module VCAP::CloudController context 'when the latest build failed to stage' do before do - PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) - BuildModel.make(app: parent_app, state: BuildModel::FAILED_STATE) + create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) + create(:build_model, app: parent_app, state: BuildModel::FAILED_STATE) end it 'is FAILED' do @@ -86,8 +86,8 @@ module VCAP::CloudController context 'when the latest droplet failed to stage' do before do - package = PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) - DropletModel.make(app: parent_app, package: package, state: DropletModel::FAILED_STATE) + package = create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) + create(:droplet_model, app: parent_app, package: package, state: DropletModel::FAILED_STATE) end it 'is FAILED' do @@ -97,10 +97,10 @@ module VCAP::CloudController context 'when there is a newer package than current droplet' do before do - package = PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) - droplet = DropletModel.make(app: parent_app, package: package, state: DropletModel::STAGED_STATE) + package = create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE) + droplet = create(:droplet_model, app: parent_app, package: package, state: DropletModel::STAGED_STATE) parent_app.update(droplet:) - PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE, created_at: droplet.created_at + 10.seconds) + create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::READY_STATE, created_at: droplet.created_at + 10.seconds) end it 'is PENDING' do @@ -109,7 +109,7 @@ module VCAP::CloudController end context 'when the latest droplet is the current droplet but it does not have a package/build (e.g. droplet was uploaded)' do - let(:droplet) { DropletModel.make(app: parent_app, state: DropletModel::STAGED_STATE, package: nil) } + let(:droplet) { create(:droplet_model, app: parent_app, state: DropletModel::STAGED_STATE, package: nil) } before do parent_app.update(droplet:) @@ -122,8 +122,8 @@ module VCAP::CloudController context 'when the latest droplet has no package but there is a previous package' do before do - previous_package = PackageModel.make(app: parent_app, package_hash: 'hash', state: PackageModel::FAILED_STATE) - droplet = DropletModel.make(app: parent_app, state: DropletModel::STAGED_STATE, created_at: previous_package.created_at + 10.seconds) + previous_package = create(:package_model, app: parent_app, package_hash: 'hash', state: PackageModel::FAILED_STATE) + droplet = create(:droplet_model, app: parent_app, state: DropletModel::STAGED_STATE, created_at: previous_package.created_at + 10.seconds) parent_app.update(droplet:) end diff --git a/spec/unit/models/runtime/isolation_segment_model_spec.rb b/spec/unit/models/runtime/isolation_segment_model_spec.rb index 6b76de2d616..c261c0a777b 100644 --- a/spec/unit/models/runtime/isolation_segment_model_spec.rb +++ b/spec/unit/models/runtime/isolation_segment_model_spec.rb @@ -5,16 +5,16 @@ module VCAP::CloudController RSpec.describe IsolationSegmentModel do - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:isolation_segment_model_2) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model_2) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } let(:unassigner) { IsolationSegmentUnassign.new } describe 'associations' do describe 'spaces' do - let(:space_1) { Space.make } - let(:space_2) { Space.make } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } context 'when the space is not part of an entitled organization' do it 'does not add the space' do @@ -70,9 +70,9 @@ module VCAP::CloudController end describe 'organizations' do - let(:org) { Organization.make } - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } + let(:org) { create(:organization) } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } it 'allows one isolation segment to be referenced by multiple organizations' do assigner.assign(isolation_segment_model, [org_1, org_2]) @@ -83,7 +83,7 @@ module VCAP::CloudController end it 'allows multiple isolation segments to be applied to one organization' do - isolation_segment_model_2 = IsolationSegmentModel.make + isolation_segment_model_2 = create(:isolation_segment_model) assigner.assign(isolation_segment_model, [org_1]) assigner.assign(isolation_segment_model_2, [org_1]) @@ -114,59 +114,59 @@ module VCAP::CloudController describe 'validations' do it 'requires a name' do expect do - IsolationSegmentModel.make(name: nil) + create(:isolation_segment_model, name: nil) end.to raise_error(Sequel::ValidationFailed, 'Isolation Segment names can only contain non-blank unicode characters') end it 'requires a non blank name' do expect do - IsolationSegmentModel.make(name: '') + create(:isolation_segment_model, name: '') end.to raise_error(Sequel::ValidationFailed, 'Isolation Segment names can only contain non-blank unicode characters') end it 'requires a unique name' do - IsolationSegmentModel.make(name: 'segment1') + create(:isolation_segment_model, name: 'segment1') expect do - IsolationSegmentModel.make(name: 'segment1') + create(:isolation_segment_model, name: 'segment1') end.to raise_error(Sequel::ValidationFailed, 'Isolation Segment names are case insensitive and must be unique') end it 'uniqueness is case insensitive' do - IsolationSegmentModel.make(name: 'lowercase') + create(:isolation_segment_model, name: 'lowercase') expect do - IsolationSegmentModel.make(name: 'lowerCase') + create(:isolation_segment_model, name: 'lowerCase') end.to raise_error(Sequel::ValidationFailed, 'Isolation Segment names are case insensitive and must be unique') end it 'allows standard ascii characters' do expect do - IsolationSegmentModel.make(name: "A -_- word 2!?()'\"&+.") + create(:isolation_segment_model, name: "A -_- word 2!?()'\"&+.") end.not_to raise_error end it 'allows backslash characters' do expect do - IsolationSegmentModel.make(name: 'a \\ word') + create(:isolation_segment_model, name: 'a \\ word') end.not_to raise_error end it 'allows unicode characters' do expect do - IsolationSegmentModel.make(name: '防御力¡') + create(:isolation_segment_model, name: '防御力¡') end.not_to raise_error end it 'does not allow newline characters' do expect do - IsolationSegmentModel.make(name: "a \n word") + create(:isolation_segment_model, name: "a \n word") end.to raise_error(Sequel::ValidationFailed) end it 'does not allow escape characters' do expect do - IsolationSegmentModel.make(name: "a \e word") + create(:isolation_segment_model, name: "a \e word") end.to raise_error(Sequel::ValidationFailed) end end @@ -186,8 +186,8 @@ module VCAP::CloudController end describe 'metadata' do - let!(:label) { VCAP::CloudController::IsolationSegmentLabelModel.make(key_name: 'string', value: 'string2', resource_guid: isolation_segment_model.guid) } - let!(:annotation) { VCAP::CloudController::IsolationSegmentAnnotationModel.make(key_name: 'string', value: 'string2', resource_guid: isolation_segment_model.guid) } + let!(:label) { create(:isolation_segment_label_model, key_name: 'string', value: 'string2', resource_guid: isolation_segment_model.guid) } + let!(:annotation) { create(:isolation_segment_annotation_model, key_name: 'string', value: 'string2', resource_guid: isolation_segment_model.guid) } it 'deletes metadata on destroy' do isolation_segment_model.destroy diff --git a/spec/unit/models/runtime/organization_annotation_model_spec.rb b/spec/unit/models/runtime/organization_annotation_model_spec.rb index 3acc6743ba7..ac9acc2a01c 100644 --- a/spec/unit/models/runtime/organization_annotation_model_spec.rb +++ b/spec/unit/models/runtime/organization_annotation_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - org = Organization.make(name: 'zrob-org') - OrganizationAnnotationModel.make(resource_guid: org.guid, key_prefix: 'us', key_name: 'state', value: 'Ohio') + org = create(:organization, name: 'zrob-org') + create(:organization_annotation_model, resource_guid: org.guid, key_prefix: 'us', key_name: 'state', value: 'Ohio') expect(OrganizationAnnotationModel.find(resource_guid: org.guid, key_prefix: 'us', key_name: 'state').value).to eq 'Ohio' end end diff --git a/spec/unit/models/runtime/organization_auditor_spec.rb b/spec/unit/models/runtime/organization_auditor_spec.rb index e7c12080c85..6dde3021604 100644 --- a/spec/unit/models/runtime/organization_auditor_spec.rb +++ b/spec/unit/models/runtime/organization_auditor_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe OrganizationAuditor, type: :model do - let(:organization) { Organization.make } - let(:user) { User.make } + let(:organization) { create(:organization) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate organization_id and user_id combination' do diff --git a/spec/unit/models/runtime/organization_billing_manager_spec.rb b/spec/unit/models/runtime/organization_billing_manager_spec.rb index 8c101550d79..97415f6c4b9 100644 --- a/spec/unit/models/runtime/organization_billing_manager_spec.rb +++ b/spec/unit/models/runtime/organization_billing_manager_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe OrganizationBillingManager, type: :model do - let(:organization) { Organization.make } - let(:user) { User.make } + let(:organization) { create(:organization) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate organization_id and user_id combination' do diff --git a/spec/unit/models/runtime/organization_label_model_spec.rb b/spec/unit/models/runtime/organization_label_model_spec.rb index 7834898aa1a..cd631a26609 100644 --- a/spec/unit/models/runtime/organization_label_model_spec.rb +++ b/spec/unit/models/runtime/organization_label_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - org = Organization.make(name: 'dora_org') - OrganizationLabelModel.make(resource_guid: org.guid, key_name: 'release', value: 'stable') + org = create(:organization, name: 'dora_org') + create(:organization_label_model, resource_guid: org.guid, key_name: 'release', value: 'stable') expect(OrganizationLabelModel.find(key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/organization_manager_spec.rb b/spec/unit/models/runtime/organization_manager_spec.rb index c26d026ead5..0a6a002f9cb 100644 --- a/spec/unit/models/runtime/organization_manager_spec.rb +++ b/spec/unit/models/runtime/organization_manager_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe OrganizationManager, type: :model do - let(:organization) { Organization.make } - let(:user) { User.make } + let(:organization) { create(:organization) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate organization_id and user_id combination' do diff --git a/spec/unit/models/runtime/organization_reserved_route_ports_spec.rb b/spec/unit/models/runtime/organization_reserved_route_ports_spec.rb index 96f62ecd93a..85c8c9b4a32 100644 --- a/spec/unit/models/runtime/organization_reserved_route_ports_spec.rb +++ b/spec/unit/models/runtime/organization_reserved_route_ports_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe OrganizationReservedRoutePorts do - let(:organization) { Organization.make } + let(:organization) { create(:organization) } subject(:organization_routes) { OrganizationReservedRoutePorts.new(organization) } @@ -18,9 +18,9 @@ module VCAP::CloudController end context 'when there are spaces' do - let(:space_quota) { SpaceQuotaDefinition.make(organization:) } - let(:space) { Space.make(organization: organization, space_quota_definition: space_quota) } - let(:space2) { Space.make(organization: organization, space_quota_definition: space_quota) } + let(:space_quota) { create(:space_quota_definition, organization:) } + let(:space) { create(:space, organization: organization, space_quota_definition: space_quota) } + let(:space2) { create(:space, organization: organization, space_quota_definition: space_quota) } it 'has no reserved ports' do expect(subject.count).to eq 0 @@ -34,13 +34,13 @@ module VCAP::CloudController end before do - domain = SharedDomain.make(router_group_guid: '123') - Route.make(host: '', space: space, domain: domain, port: 1234) - Route.make(host: '', space: space, domain: domain, port: 3455) - Route.make(host: '', space: space, domain: domain, port: 4444) - Route.make(host: '', space: space2, domain: domain, port: 6000) - Route.make(host: '', space: space2, domain: domain, port: 2222) - Route.make(space:) + domain = create(:shared_domain, router_group_guid: '123') + create(:route, host: '', space: space, domain: domain, port: 1234) + create(:route, host: '', space: space, domain: domain, port: 3455) + create(:route, host: '', space: space, domain: domain, port: 4444) + create(:route, host: '', space: space2, domain: domain, port: 6000) + create(:route, host: '', space: space2, domain: domain, port: 2222) + create(:route, space:) end it 'has return the number of reserved ports' do diff --git a/spec/unit/models/runtime/organization_routes_spec.rb b/spec/unit/models/runtime/organization_routes_spec.rb index 053e3a05e83..021e1c9936b 100644 --- a/spec/unit/models/runtime/organization_routes_spec.rb +++ b/spec/unit/models/runtime/organization_routes_spec.rb @@ -3,7 +3,7 @@ RSpec.describe OrganizationRoutes do subject(:organization_routes) { OrganizationRoutes.new(organization) } - let(:organization) { VCAP::CloudController::Organization.make } + let(:organization) { create(:organization) } describe '#count' do context 'when there is no spaces' do @@ -11,30 +11,30 @@ end context 'when there are spaces' do - let!(:space) { VCAP::CloudController::Space.make(organization:) } + let!(:space) { create(:space, organization:) } context 'and there no routes' do its(:count) { is_expected.to eq 0 } end context 'and there are multiple routes' do - let!(:routes) { 2.times { VCAP::CloudController::Route.make(space:) } } + let!(:routes) { 2.times { create(:route, space:) } } its(:count) { is_expected.to eq 2 } end context 'and there are multiple routes' do - let(:space_2) { VCAP::CloudController::Space.make(organization:) } + let(:space_2) { create(:space, organization:) } let!(:routes) do - 2.times { VCAP::CloudController::Route.make(space:) } - VCAP::CloudController::Route.make(space: space_2) + 2.times { create(:route, space:) } + create(:route, space: space_2) end its(:count) { is_expected.to eq 3 } end context 'and there is a route belonging to different organization' do - let!(:route) { VCAP::CloudController::Route.make } + let!(:route) { create(:route) } its(:count) { is_expected.to eq 0 } end diff --git a/spec/unit/models/runtime/organization_spec.rb b/spec/unit/models/runtime/organization_spec.rb index 52945ecadb1..f27e0ded358 100644 --- a/spec/unit/models/runtime/organization_spec.rb +++ b/spec/unit/models/runtime/organization_spec.rb @@ -8,7 +8,7 @@ module VCAP::CloudController describe 'Associations' do it { is_expected.to have_associated :spaces } - it { is_expected.to have_associated :private_domains, associated_instance: ->(_org) { PrivateDomain.make } } + it { is_expected.to have_associated :private_domains, associated_instance: ->(_org) { create(:private_domain) } } it { is_expected.to have_associated :service_plan_visibilities } it { is_expected.to have_associated :quota_definition } it { is_expected.to have_associated :domains, class: SharedDomain } @@ -16,42 +16,42 @@ module VCAP::CloudController it { is_expected.to have_associated :managers, class: User } it { is_expected.to have_associated :billing_managers, class: User } it { is_expected.to have_associated :auditors, class: User } - it { is_expected.to have_associated :space_quota_definitions, associated_instance: ->(org) { SpaceQuotaDefinition.make(organization: org) } } + it { is_expected.to have_associated :space_quota_definitions, associated_instance: ->(org) { create(:space_quota_definition, organization: org) } } it 'has associated owned_private domains' do - domain = PrivateDomain.make + domain = create(:private_domain) organization = domain.owning_organization - expect(organization.owned_private_domains).to include(domain) + expect(organization.reload.owned_private_domains).to include(domain) end it 'has associated apps' do - process = ProcessModel.make + process = create(:process_model) organization = process.space.organization expect(organization.apps).to include(process.reload) end it 'does not associate non-web v2 apps' do - app_model = AppModel.make + app_model = create(:app_model) org = app_model.space.organization - app1 = ProcessModel.make(type: 'web', app: app_model) - ProcessModel.make(type: 'other', app: app_model) + app1 = create(:process_model, type: 'web', app: app_model) + create(:process_model, type: 'other', app: app_model) expect(org.apps).to contain_exactly(app1) end it 'has associated app models' do - app_model = AppModel.make + app_model = create(:app_model) organization = app_model.space.organization expect(organization.app_models).to include(app_model.reload) end it 'has associated service_instances' do - service_instance = ManagedServiceInstance.make + service_instance = create(:managed_service_instance) organization = service_instance.space.organization expect(organization.service_instances).to include(service_instance.reload) end it 'has associated tasks' do - task = TaskModel.make + task = create(:task_model) organization = task.space.organization expect(organization.tasks).to include(task.reload) @@ -61,10 +61,10 @@ module VCAP::CloudController let(:assigner) { IsolationSegmentAssign.new } it 'returns a list of all associated isolation segments guids' do - organization = Organization.make - iso_seg_1 = IsolationSegmentModel.make - iso_seg_2 = IsolationSegmentModel.make - iso_seg_3 = IsolationSegmentModel.make + organization = create(:organization) + iso_seg_1 = create(:isolation_segment_model) + iso_seg_2 = create(:isolation_segment_model) + iso_seg_3 = create(:isolation_segment_model) assigner.assign(iso_seg_1, [organization]) assigner.assign(iso_seg_2, [organization]) @@ -76,15 +76,15 @@ module VCAP::CloudController end describe 'destroying' do - let(:org) { Organization.make } + let(:org) { create(:organization) } before do TestConfig.override(kubernetes: {}) end context 'when there are isolation segments in the allowed list' do - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:isolation_segment_model2) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model2) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } before do @@ -106,11 +106,9 @@ module VCAP::CloudController context 'when there are organization labels' do let!(:organization_label_one) do - VCAP::CloudController::OrganizationLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: org.guid - ) + create(:organization_label_model, key_name: 'release', + value: 'stable', + resource_guid: org.guid) end it 'can find the associated labels' do @@ -123,7 +121,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of name' do - existing_org = Organization.make + existing_org = create(:organization) expect do Organization.create(name: existing_org.name) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -131,7 +129,7 @@ module VCAP::CloudController end describe 'Validations' do - let(:org) { Organization.make } + let(:org) { create(:organization) } it { is_expected.to validate_presence :name } it { is_expected.to strip_whitespace :name } @@ -174,8 +172,8 @@ module VCAP::CloudController end describe 'isolation_segments' do - let(:isolation_segment_model) { IsolationSegmentModel.make } - let(:isolation_segment_model2) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } + let(:isolation_segment_model2) { create(:isolation_segment_model) } let(:assigner) { IsolationSegmentAssign.new } context 'when adding isolation segments to the allowed list' do @@ -201,13 +199,13 @@ module VCAP::CloudController describe 'space_quota_definitions' do it 'adds when in this org' do - quota = SpaceQuotaDefinition.make(organization: org) + quota = create(:space_quota_definition, organization: org) expect { org.add_space_quota_definition(quota) }.not_to raise_error end it 'does not add when quota is in a different org' do - quota = SpaceQuotaDefinition.make + quota = create(:space_quota_definition) expect { org.add_space_quota_definition(quota) }.to raise_error(Sequel::HookFailed) end @@ -215,32 +213,32 @@ module VCAP::CloudController describe 'private_domains' do it 'allowed when the organization is not the owner' do - domain = PrivateDomain.make + domain = create(:private_domain) expect { org.add_private_domain(domain) }.not_to raise_error end it 'does not add when the organization is the owner' do - domain = PrivateDomain.make(owning_organization: org) + domain = create(:private_domain, owning_organization: org) org.add_private_domain(domain) expect(domain.shared_organizations).to eq([]) end it 'lists all private domains owned and shared' do - owned_domain = PrivateDomain.make(owning_organization: org) - domain = PrivateDomain.make + owned_domain = create(:private_domain, owning_organization: org) + domain = create(:private_domain) org.add_private_domain(domain) expect(org.private_domains).to contain_exactly(owned_domain, domain) end it 'removes all associated routes when deleted' do - private_domain = PrivateDomain.make - space = Space.make + private_domain = create(:private_domain) + space = create(:space) org = space.organization org.add_private_domain(private_domain) - route = Route.make(space: space, domain: private_domain) + route = create(:route, space: space, domain: private_domain) TestConfig.override(kubernetes: {}) expect do @@ -278,7 +276,7 @@ module VCAP::CloudController end describe 'default_isolation_segment' do - let(:isolation_segment_model) { IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } context 'assigning the default isolation segment' do @@ -306,7 +304,7 @@ module VCAP::CloudController end context 'when there are spaces in the org' do - let!(:space) { Space.make(organization: org) } + let!(:space) { create(:space, organization: org) } let(:shared_segment) { IsolationSegmentModel.first(guid: IsolationSegmentModel::SHARED_ISOLATION_SEGMENT_GUID) } it 'sets the default Isolation Segment' do @@ -324,7 +322,7 @@ module VCAP::CloudController context 'and a space has an app' do before do - AppModel.make(space:) + create(:app_model, space:) end it 'sets the default to the shared segment but does not affect running apps' do @@ -341,7 +339,7 @@ module VCAP::CloudController context 'and a space has an app' do it 'sets the default but does not affect running apps' do - AppModel.make(space:) + create(:app_model, space:) expect do org.update(default_isolation_segment_guid: isolation_segment_model.guid) end.not_to raise_error @@ -351,7 +349,7 @@ module VCAP::CloudController end it 'sets the default when assigning the shared segment as the default' do - AppModel.make(space:) + create(:app_model, space:) expect do assigner.assign(shared_segment, [org]) end.not_to raise_error @@ -361,12 +359,12 @@ module VCAP::CloudController end context 'and the space has an assigned isolation segment' do - let(:isolation_segment_model2) { IsolationSegmentModel.make } + let(:isolation_segment_model2) { create(:isolation_segment_model) } before do assigner.assign(isolation_segment_model2, [org]) space.update(isolation_segment_model: isolation_segment_model2) - AppModel.make(space:) + create(:app_model, space:) end it 'sets the default Isolation Segment' do @@ -396,7 +394,7 @@ module VCAP::CloudController end context 'and there are spaces in the organization' do - let!(:space) { Space.make(organization: org) } + let!(:space) { create(:space, organization: org) } it 'unassigns the default isolation segment' do org.update(default_isolation_segment_model: nil) @@ -407,7 +405,7 @@ module VCAP::CloudController context 'and the space has apps' do before do - AppModel.make(space:) + create(:app_model, space:) end it 'removes the default isolation segment but does not affect running apps' do @@ -436,13 +434,13 @@ module VCAP::CloudController context 'statuses' do describe 'when status == active' do - subject(:org) { Organization.make(status: 'active') } + subject(:org) { create(:organization, status: 'active') } it('is active') { expect(org).to be_active } it('is not suspended') { expect(org).not_to be_suspended } end describe 'when status == suspended' do - subject(:org) { Organization.make(status: 'suspended') } + subject(:org) { create(:organization, status: 'suspended') } it('is not active') { expect(org).not_to be_active } it('is suspended') { expect(org).to be_suspended } end @@ -450,14 +448,14 @@ module VCAP::CloudController describe 'billing' do it 'is not enabled for billing when first created' do - expect(Organization.make.billing_enabled).to be(false) + expect(create(:organization).billing_enabled).to be(false) end end context 'memory quota' do - let(:quota) { QuotaDefinition.make(memory_limit: 500) } - let(:org) { Organization.make(quota_definition: quota) } - let(:space) { Space.make(organization: org) } + let(:quota) { create(:quota_definition, memory_limit: 500) } + let(:org) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, organization: org) } it 'returns the memory available when no processes are running' do ProcessModelFactory.make(space: space, memory: 200, instances: 2) @@ -476,8 +474,8 @@ module VCAP::CloudController it 'includes RUNNING tasks when returning remaining memory' do process = ProcessModelFactory.make(space: space, memory: 250, instances: 1, state: ProcessModel::STARTED, type: 'worker') - TaskModel.make(app: process.app, memory_in_mb: 25, state: TaskModel::RUNNING_STATE) - TaskModel.make(app: process.app, memory_in_mb: 25, state: TaskModel::RUNNING_STATE) + create(:task_model, app: process.app, memory_in_mb: 25, state: TaskModel::RUNNING_STATE) + create(:task_model, app: process.app, memory_in_mb: 25, state: TaskModel::RUNNING_STATE) expect(org.has_remaining_memory(200)).to be(true) expect(org.has_remaining_memory(201)).to be(false) @@ -485,14 +483,14 @@ module VCAP::CloudController it 'includes PENDING tasks when determining available memory' do process = ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: ProcessModel::STARTED) - TaskModel.make(app: process.app, memory_in_mb: 50, state: TaskModel::PENDING_STATE) + create(:task_model, app: process.app, memory_in_mb: 50, state: TaskModel::PENDING_STATE) expect(org.has_remaining_memory(50)).to be(true) expect(org.has_remaining_memory(51)).to be(false) end context 'when memory quota is unlimited (-1)' do - let(:quota) { QuotaDefinition.make(memory_limit: -1) } + let(:quota) { create(:quota_definition, memory_limit: -1) } it "indicates that there's more memory remaining" do expect(org.has_remaining_memory(1 << 63)).to be(true) # a very big number @@ -501,9 +499,9 @@ module VCAP::CloudController it 'does NOT include non-RUNNING tasks when returning remaining memory' do process = ProcessModelFactory.make(space: space, memory: 250, instances: 1, state: ProcessModel::STARTED, type: 'worker') - TaskModel.make(app: process.app, memory_in_mb: 25, state: TaskModel::SUCCEEDED_STATE) - TaskModel.make(app: process.app, memory_in_mb: 25, state: TaskModel::FAILED_STATE) - TaskModel.make(app: process.app, memory_in_mb: 25, state: TaskModel::CANCELING_STATE) + create(:task_model, app: process.app, memory_in_mb: 25, state: TaskModel::SUCCEEDED_STATE) + create(:task_model, app: process.app, memory_in_mb: 25, state: TaskModel::FAILED_STATE) + create(:task_model, app: process.app, memory_in_mb: 25, state: TaskModel::CANCELING_STATE) expect(org.has_remaining_memory(250)).to be(true) expect(org.has_remaining_memory(251)).to be(false) @@ -512,13 +510,13 @@ module VCAP::CloudController describe '#has_remaining_log_rate_limit' do let(:log_rate_limit) { 10 } - let(:quota) { QuotaDefinition.make(log_rate_limit:) } - let(:org) { Organization.make(quota_definition: quota) } - let(:org2) { Organization.make(quota_definition: quota) } - let(:space) { Space.make(organization: org) } - let(:space2) { Space.make(organization: org) } - let(:space_org2) { Space.make(organization: org2) } - let!(:app_model) { AppModel.make(space: space2) } + let(:quota) { create(:quota_definition, log_rate_limit:) } + let(:org) { create(:organization, quota_definition: quota) } + let(:org2) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, organization: org) } + let(:space2) { create(:space, organization: org) } + let(:space_org2) { create(:space, organization: org2) } + let!(:app_model) { create(:app_model, space: space2) } context 'when the quota is unlimited' do let(:log_rate_limit) { QuotaDefinition::UNLIMITED } @@ -545,21 +543,21 @@ module VCAP::CloudController expect(org.has_remaining_log_rate_limit(4)).to be_truthy expect(org.has_remaining_log_rate_limit(5)).to be_falsey - TaskModel.make(app: app_model, log_rate_limit: 1, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, log_rate_limit: 1, state: TaskModel::RUNNING_STATE) expect(org.has_remaining_log_rate_limit(3)).to be_truthy expect(org.has_remaining_log_rate_limit(4)).to be_falsey end it 'considers tasks in state PENDING' do - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::PENDING_STATE) expect(org.has_remaining_log_rate_limit(8)).to be_truthy expect(org.has_remaining_log_rate_limit(9)).to be_falsey end it 'does not consider tasks in other states' do - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::SUCCEEDED_STATE) - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::FAILED_STATE) - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::CANCELING_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::SUCCEEDED_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::FAILED_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::CANCELING_STATE) expect(org.has_remaining_log_rate_limit(10)).to be_truthy end @@ -577,8 +575,8 @@ module VCAP::CloudController end describe '#instance_memory_limit' do - let(:quota) { QuotaDefinition.make(instance_memory_limit: 50) } - let(:org) { Organization.make quota_definition: quota } + let(:quota) { create(:quota_definition, instance_memory_limit: 50) } + let(:org) { create(:organization, quota_definition: quota) } it 'returns the instance memory limit from the quota' do expect(org.instance_memory_limit).to eq(50) @@ -594,8 +592,8 @@ module VCAP::CloudController end describe '#app_task_limit' do - let(:quota) { QuotaDefinition.make(app_task_limit: 2) } - let(:org) { Organization.make quota_definition: quota } + let(:quota) { create(:quota_definition, app_task_limit: 2) } + let(:org) { create(:organization, quota_definition: quota) } it 'returns the app task limit from the quota' do expect(org.app_task_limit).to eq(2) @@ -611,10 +609,10 @@ module VCAP::CloudController end describe '#meets_max_task_limit?' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org) { space.organization } - let(:quota) { QuotaDefinition.make(app_task_limit: 2) } - let(:app_model) { AppModel.make(space_guid: space.guid) } + let(:quota) { create(:quota_definition, app_task_limit: 2) } + let(:app_model) { create(:app_model, space_guid: space.guid) } before do org.quota_definition = quota @@ -626,8 +624,8 @@ module VCAP::CloudController context 'number of pending and running tasks equals the limit' do before do - TaskModel.make(app: app_model, state: TaskModel::RUNNING_STATE) - TaskModel.make(app: app_model, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, state: TaskModel::PENDING_STATE) end it 'returns true' do @@ -637,9 +635,9 @@ module VCAP::CloudController context 'number of pending and running tasks exceeds the limit' do before do - TaskModel.make(app: app_model, state: TaskModel::RUNNING_STATE) - TaskModel.make(app: app_model, state: TaskModel::PENDING_STATE) - TaskModel.make(app: app_model, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, state: TaskModel::PENDING_STATE) end it 'returns true' do @@ -649,19 +647,19 @@ module VCAP::CloudController end describe '#destroy' do - subject(:org) { Organization.make } + subject(:org) { create(:organization) } let(:guid_pattern) { '[[:alnum:]-]+' } before { org.reload } it 'destroys all space quota definitions' do - sqd = SpaceQuotaDefinition.make(organization: org) + sqd = create(:space_quota_definition, organization: org) expect { org.destroy }.to change { SpaceQuotaDefinition[id: sqd.id] }.from(sqd).to(nil) end context 'when there are spaces in the org' do - let!(:space) { Space.make(organization: org) } + let!(:space) { create(:space, organization: org) } it 'raises a ForeignKeyConstraintViolation error' do expect { org.destroy }.to raise_error(Sequel::ForeignKeyConstraintViolation) @@ -669,10 +667,10 @@ module VCAP::CloudController end context 'when there are service instances in the org' do - let(:space) { Space.make(organization: org) } + let(:space) { create(:space, organization: org) } before do - service_instance = ManagedServiceInstance.make(:v2, space:) + service_instance = create(:managed_service_instance, space:) broker = service_instance.service_broker uri = URI(broker.broker_url) uri.user = broker.auth_username @@ -692,7 +690,7 @@ module VCAP::CloudController end it 'destroys all service plan visibilities' do - service_plan_visibility = ServicePlanVisibility.make(organization: org) + service_plan_visibility = create(:service_plan_visibility, organization: org) expect do org.destroy end.to change { @@ -701,7 +699,7 @@ module VCAP::CloudController end it 'destroys owned private domains' do - domain = PrivateDomain.make(owning_organization: org) + domain = create(:private_domain, owning_organization: org) expect do org.destroy @@ -711,7 +709,7 @@ module VCAP::CloudController end it 'destroys private domains' do - domain = PrivateDomain.make + domain = create(:private_domain) org.add_private_domain(domain) expect do @@ -724,20 +722,20 @@ module VCAP::CloudController describe 'adding domains' do it 'does not add domains to the organization if it is a shared domain' do - shared_domain = SharedDomain.make - org = Organization.make + shared_domain = create(:shared_domain) + org = create(:organization) expect { org.add_domain(shared_domain) }.not_to(change { org.domains }) end it 'does nothing if it is a private domain that belongs to the org' do - org = Organization.make - private_domain = PrivateDomain.make(owning_organization: org) + org = create(:organization) + private_domain = create(:private_domain, owning_organization: org) expect { org.add_domain(private_domain) }.not_to(change { org.domains.collect(&:id) }) end it 'raises error if the private domain does not belongs to the organization' do - org = Organization.make - private_domain = PrivateDomain.make(owning_organization: Organization.make) + org = create(:organization) + private_domain = create(:private_domain, owning_organization: create(:organization)) expect { org.add_domain(private_domain) }.to raise_error(Domain::UnauthorizedAccessToPrivateDomain) end end @@ -746,10 +744,10 @@ module VCAP::CloudController before { SharedDomain.dataset.destroy } it 'is able to eager load domains' do - org = Organization.make - private_domain1 = PrivateDomain.make(owning_organization: org) - private_domain2 = PrivateDomain.make(owning_organization: org) - shared_domain = SharedDomain.make + org = create(:organization) + private_domain1 = create(:private_domain, owning_organization: org) + private_domain2 = create(:private_domain, owning_organization: org) + shared_domain = create(:shared_domain) expect do @eager_loaded_org = Organization.eager(:domains).where(id: org.id).all.first @@ -765,12 +763,12 @@ module VCAP::CloudController end it 'has correct domains for each org' do - org1 = Organization.make - org2 = Organization.make + org1 = create(:organization) + org2 = create(:organization) - private_domain1 = PrivateDomain.make(owning_organization: org1) - private_domain2 = PrivateDomain.make(owning_organization: org2) - shared_domain = SharedDomain.make + private_domain1 = create(:private_domain, owning_organization: org1) + private_domain2 = create(:private_domain, owning_organization: org2) + shared_domain = create(:shared_domain) expect do @eager_loaded_orgs = Organization.eager(:domains).where(id: [org1.id, org2.id]).order_by(:id).all @@ -783,10 +781,10 @@ module VCAP::CloudController end it 'passes in dataset to be loaded to eager_block option' do - org1 = Organization.make + org1 = create(:organization) - private_domain1 = PrivateDomain.make(owning_organization: org1) - PrivateDomain.make(owning_organization: org1) + private_domain1 = create(:private_domain, owning_organization: org1) + create(:private_domain, owning_organization: org1) eager_block = proc { |ds| ds.where(id: private_domain1.id) } @@ -798,14 +796,14 @@ module VCAP::CloudController end it 'allow nested eager_load' do - org = Organization.make - space = Space.make(organization: org) + org = create(:organization) + space = create(:space, organization: org) - domain1 = PrivateDomain.make(owning_organization: org) - domain2 = PrivateDomain.make(owning_organization: org) + domain1 = create(:private_domain, owning_organization: org) + domain2 = create(:private_domain, owning_organization: org) - route1 = Route.make(domain: domain1, space: space) - route2 = Route.make(domain: domain2, space: space) + route1 = create(:route, domain: domain1, space: space) + route2 = create(:route, domain: domain2, space: space) expect do @eager_loaded_org = Organization.eager(domains: :routes).where(id: org.id).all.first @@ -819,10 +817,10 @@ module VCAP::CloudController end describe 'removing a user' do - let(:org) { Organization.make } - let(:user) { User.make } - let(:space_1) { Space.make } - let(:space_2) { Space.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } before do org.add_user(user) @@ -928,7 +926,7 @@ module VCAP::CloudController end context 'when the user only has non-user org roles' do - let(:user) { User.make } + let(:user) { create(:user) } before do org.add_manager(user) @@ -948,7 +946,7 @@ module VCAP::CloudController end context 'when the user only has an org-user role' do - let(:user) { User.make } + let(:user) { create(:user) } before do org.add_user(user) @@ -988,10 +986,10 @@ module VCAP::CloudController end context 'when a quota is specified' do - let(:org) { Organization.make_unsaved(quota_definition: nil, quota_definition_guid: quota_definition_guid) } + let(:org) { build(:organization, quota_definition: nil, quota_definition_guid: quota_definition_guid) } context "and it's valid" do - let(:my_quota) { QuotaDefinition.make } + let(:my_quota) { create(:quota_definition) } let(:quota_definition_guid) { my_quota.guid } it 'uses what is provided' do @@ -1013,9 +1011,9 @@ module VCAP::CloudController end describe '#has_user?' do - subject(:org) { Organization.make } - let(:user) { User.make } - let(:second_user) { User.make } + subject(:org) { create(:organization) } + let(:user) { create(:user) } + let(:second_user) { create(:user) } before do org.add_user(second_user) @@ -1036,15 +1034,15 @@ module VCAP::CloudController end describe '#default_domain' do - let(:org) { Organization.make } + let(:org) { create(:organization) } before do Domain.dataset.destroy end context 'when there is a private domain' do - let(:private_domain1) { PrivateDomain.make(owning_organization: org) } - let(:private_domain2) { PrivateDomain.make } + let(:private_domain1) { create(:private_domain, owning_organization: org) } + let(:private_domain2) { create(:private_domain) } before do private_domain1 @@ -1056,15 +1054,15 @@ module VCAP::CloudController end context 'when there is an internal shared domain' do - let!(:internal_domain) { SharedDomain.make(internal: true) } + let!(:internal_domain) { create(:shared_domain, internal: true) } it 'returns the first private domain' do expect(org.default_domain).to eq(private_domain1) end context 'when there is a shared domain' do - let!(:shared_domain1) { SharedDomain.make } - let!(:shared_domain2) { SharedDomain.make } + let!(:shared_domain1) { create(:shared_domain) } + let!(:shared_domain2) { create(:shared_domain) } it 'returns the first shared domain' do expect(org.default_domain).to eq(shared_domain1) diff --git a/spec/unit/models/runtime/organization_user_spec.rb b/spec/unit/models/runtime/organization_user_spec.rb index 1217f66b431..f118ddfd49f 100644 --- a/spec/unit/models/runtime/organization_user_spec.rb +++ b/spec/unit/models/runtime/organization_user_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe OrganizationUser, type: :model do - let(:organization) { Organization.make } - let(:user) { User.make } + let(:organization) { create(:organization) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate organization_id and user_id combination' do diff --git a/spec/unit/models/runtime/package_model_spec.rb b/spec/unit/models/runtime/package_model_spec.rb index c5e3a91e32b..b609f56fdfc 100644 --- a/spec/unit/models/runtime/package_model_spec.rb +++ b/spec/unit/models/runtime/package_model_spec.rb @@ -59,7 +59,7 @@ module VCAP::CloudController end describe '#succeed_upload!' do - let!(:package) { PackageModel.make state: PackageModel::PENDING_STATE } + let!(:package) { create(:package_model, state: PackageModel::PENDING_STATE) } it 'updates the checksums and moves the package state to READY' do package.succeed_upload!(sha1: 'sha-1-checksum', sha256: 'sha-2-checksum') @@ -80,9 +80,9 @@ module VCAP::CloudController end describe 'metadata' do - let(:package) { PackageModel.make } - let(:annotation) { PackageAnnotationModel.make(package: package, key_name: 'test1', value: 'bommel') } - let(:label) { PackageLabelModel.make(package: package, key_name: 'test1', value: 'bommel') } + let(:package) { create(:package_model) } + let(:annotation) { create(:package_annotation_model, package: package, key_name: 'test1', value: 'bommel') } + let(:label) { create(:package_label_model, package: package, key_name: 'test1', value: 'bommel') } it 'can access its metadata' do expect(annotation.package.guid).to eq(package.guid) diff --git a/spec/unit/models/runtime/pollable_job_model_spec.rb b/spec/unit/models/runtime/pollable_job_model_spec.rb index 4e34dbaed52..cb1d8bd91a5 100644 --- a/spec/unit/models/runtime/pollable_job_model_spec.rb +++ b/spec/unit/models/runtime/pollable_job_model_spec.rb @@ -56,7 +56,7 @@ module VCAP::CloudController describe '#complete?' do context 'when the state is complete' do - let(:job) { PollableJobModel.make(state: 'COMPLETE') } + let(:job) { create(:pollable_job_model, state: 'COMPLETE') } it 'returns true' do expect(job.complete?).to be(true) @@ -64,8 +64,8 @@ module VCAP::CloudController end context 'when the state is not complete' do - let(:failed_job) { PollableJobModel.make(state: 'FAILED') } - let(:processing_job) { PollableJobModel.make(state: 'PROCESSING') } + let(:failed_job) { create(:pollable_job_model, state: 'FAILED') } + let(:processing_job) { create(:pollable_job_model, state: 'PROCESSING') } it 'returns false' do expect(failed_job.complete?).to be(false) @@ -76,70 +76,70 @@ module VCAP::CloudController describe '#resource_exists?' do it 'returns true if the resource exists' do - app = AppModel.make - job = PollableJobModel.make(resource_type: 'app', resource_guid: app.guid) + app = create(:app_model) + job = create(:pollable_job_model, resource_type: 'app', resource_guid: app.guid) expect(job.resource_exists?).to be(true) end it 'returns false if the resource does NOT exist' do - job = PollableJobModel.make(resource_type: 'app', resource_guid: 'not-a-real-guid') + job = create(:pollable_job_model, resource_type: 'app', resource_guid: 'not-a-real-guid') expect(job.resource_exists?).to be(false) end it 'returns false if the resource type is empty' do - job = PollableJobModel.make(resource_type: '', resource_guid: '') + job = create(:pollable_job_model, resource_type: '', resource_guid: '') expect(job.resource_exists?).to be(false) end context 'when the resource is a special case' do it 'returns true if the resource exists' do - organization_quota = QuotaDefinition.make - job = PollableJobModel.make(resource_type: 'organization_quota', resource_guid: organization_quota. - guid) + organization_quota = create(:quota_definition) + job = create(:pollable_job_model, resource_type: 'organization_quota', resource_guid: organization_quota. + guid) expect(job.resource_exists?).to be(true) end it 'returns false if the resource does NOT exist' do - job = PollableJobModel.make(resource_type: 'organization_quota', resource_guid: 'not-a-real-guid') + job = create(:pollable_job_model, resource_type: 'organization_quota', resource_guid: 'not-a-real-guid') expect(job.resource_exists?).to be(false) end it 'returns true if the resource exists' do - role = OrganizationManager.make - job = PollableJobModel.make(resource_type: 'role', resource_guid: role.guid) + role = create(:organization_manager) + job = create(:pollable_job_model, resource_type: 'role', resource_guid: role.guid) expect(job.resource_exists?).to be(true) end it 'returns false if the resource does NOT exist' do - job = PollableJobModel.make(resource_type: 'role', resource_guid: 'not-a-real-guid') + job = create(:pollable_job_model, resource_type: 'role', resource_guid: 'not-a-real-guid') expect(job.resource_exists?).to be(false) end it 'returns true if the route binding resource exists' do - route_binding = RouteBinding.make - job = PollableJobModel.make(resource_type: 'service_route_binding', resource_guid: route_binding.guid) + route_binding = create(:route_binding) + job = create(:pollable_job_model, resource_type: 'service_route_binding', resource_guid: route_binding.guid) expect(job.resource_exists?).to be(true) end it 'returns false if the route binding resource does NOT exist' do - job = PollableJobModel.make(resource_type: 'service_route_binding', resource_guid: 'not-a-real-guid') + job = create(:pollable_job_model, resource_type: 'service_route_binding', resource_guid: 'not-a-real-guid') expect(job.resource_exists?).to be(false) end it 'returns true if the service binding resource exists' do - binding = ServiceBinding.make - job = PollableJobModel.make(resource_type: 'service_credential_binding', resource_guid: binding.guid) + binding = create(:service_binding) + job = create(:pollable_job_model, resource_type: 'service_credential_binding', resource_guid: binding.guid) expect(job.resource_exists?).to be(true) end it 'returns true if the service key resource exists' do - binding = ServiceKey.make - job = PollableJobModel.make(resource_type: 'service_credential_binding', resource_guid: binding.guid) + binding = create(:service_key) + job = create(:pollable_job_model, resource_type: 'service_credential_binding', resource_guid: binding.guid) expect(job.resource_exists?).to be(true) end it 'returns false if the service credential binding resource does NOT exist' do - job = PollableJobModel.make(resource_type: 'service_credential_binding', resource_guid: 'not-a-real-guid') + job = create(:pollable_job_model, resource_type: 'service_credential_binding', resource_guid: 'not-a-real-guid') expect(job.resource_exists?).to be(false) end end @@ -147,19 +147,19 @@ module VCAP::CloudController describe '#warnings' do it 'returns the warnings for the job' do - job = PollableJobModel.make + job = create(:pollable_job_model) warnings = [] - warnings << JobWarningModel.make(job: job, detail: 'something is wrong') - warnings << JobWarningModel.make(job: job, detail: 'something is really wrong') + warnings << create(:job_warning_model, job: job, detail: 'something is wrong') + warnings << create(:job_warning_model, job: job, detail: 'something is really wrong') expect(job.warnings.size).to eq(2) expect(job.warnings).to include(*warnings) end it 'deletes the warnings when the job is deleted' do - job = PollableJobModel.make - JobWarningModel.make(job: job, detail: 'something is wrong') - JobWarningModel.make(job: job, detail: 'something is really wrong') + job = create(:pollable_job_model) + create(:job_warning_model, job: job, detail: 'something is wrong') + create(:job_warning_model, job: job, detail: 'something is really wrong') job.destroy diff --git a/spec/unit/models/runtime/private_domain_spec.rb b/spec/unit/models/runtime/private_domain_spec.rb index cc6e69921a7..9db98ec7007 100644 --- a/spec/unit/models/runtime/private_domain_spec.rb +++ b/spec/unit/models/runtime/private_domain_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe PrivateDomain, type: :model do - let(:private_domain) { PrivateDomain.make name: 'test.example.com' } + let(:private_domain) { create(:private_domain, name: 'test.example.com') } let(:reserved) { nil } before do @@ -13,8 +13,8 @@ module VCAP::CloudController describe 'Associations' do it 'has associated spaces' do - private_domain = PrivateDomain.make - space = Space.make(organization: private_domain.owning_organization) + private_domain = create(:private_domain) + space = create(:space, organization: private_domain.owning_organization) expect(private_domain.spaces).to include(space.reload) end end @@ -33,70 +33,70 @@ module VCAP::CloudController end it 'denies private uaa.customer-app-domain1.com when customer-app-domain1.com is the system domain' do - expect { PrivateDomain.make name: 'uaa.customer-app-domain1.com' }.to raise_error(Sequel::ValidationFailed, /is already reserved by the system/) + expect { create(:private_domain, name: 'uaa.customer-app-domain1.com') }.to raise_error(Sequel::ValidationFailed, /is already reserved by the system/) end it 'allows private bar.foo.com when foo.com has the same owner' do - private_domain = PrivateDomain.make name: 'foo.com' - expect { PrivateDomain.make name: 'bar.foo.com', owning_organization_id: private_domain.owning_organization_id }.not_to raise_error + private_domain = create(:private_domain, name: 'foo.com') + expect { create(:private_domain, name: 'bar.foo.com', owning_organization_id: private_domain.owning_organization_id) }.not_to raise_error end it 'allows private foo.com a when bar.foo.com has the same owner' do - private_domain = PrivateDomain.make name: 'bar.foo.com' - expect { PrivateDomain.make name: 'foo.com', owning_organization_id: private_domain.owning_organization_id }.not_to raise_error + private_domain = create(:private_domain, name: 'bar.foo.com') + expect { create(:private_domain, name: 'foo.com', owning_organization_id: private_domain.owning_organization_id) }.not_to raise_error end it 'denies private foo.com when another org has bar.foo.com' do - PrivateDomain.make name: 'bar.foo.com' - expect { PrivateDomain.make name: 'foo.com' }.to raise_error(Sequel::ValidationFailed, /is already reserved by another domain/) + create(:private_domain, name: 'bar.foo.com') + expect { create(:private_domain, name: 'foo.com') }.to raise_error(Sequel::ValidationFailed, /is already reserved by another domain/) end it 'denies private foo.com when there is a shared bar.foo.com' do - SharedDomain.make name: 'bar.foo.com' - expect { PrivateDomain.make name: 'foo.com' }.to raise_error(Sequel::ValidationFailed, /is already reserved by another domain/) + create(:shared_domain, name: 'bar.foo.com') + expect { create(:private_domain, name: 'foo.com') }.to raise_error(Sequel::ValidationFailed, /is already reserved by another domain/) end it 'denies private foo.com when there is a shared foo.com' do - SharedDomain.make name: 'foo.com' - expect { PrivateDomain.make name: 'foo.com' }.to raise_error(Sequel::ValidationFailed, /name unique/) + create(:shared_domain, name: 'foo.com') + expect { create(:private_domain, name: 'foo.com') }.to raise_error(Sequel::ValidationFailed, /name unique/) end it 'allows private bar.foo.com a when private baz.bar.foo.com has the same owner and shared foo.com exist' do - private_domain = PrivateDomain.make name: 'baz.bar.foo.com' - SharedDomain.make name: 'foo.com' - expect { PrivateDomain.make name: 'bar.foo.com', owning_organization_id: private_domain.owning_organization_id }.not_to raise_error + private_domain = create(:private_domain, name: 'baz.bar.foo.com') + create(:shared_domain, name: 'foo.com') + expect { create(:private_domain, name: 'bar.foo.com', owning_organization_id: private_domain.owning_organization_id) }.not_to raise_error end it 'denies private bar.foo.com a when private baz.bar.foo.com has a different owner and shared foo.com exist' do - PrivateDomain.make name: 'baz.bar.foo.com' - SharedDomain.make name: 'foo.com' + create(:private_domain, name: 'baz.bar.foo.com') + create(:shared_domain, name: 'foo.com') error_msg = %(The domain name "bar.foo.com" cannot be created because "baz.bar.foo.com" is already reserved by another domain) - expect { PrivateDomain.make name: 'bar.foo.com' }.to raise_error(Sequel::ValidationFailed, error_msg) + expect { create(:private_domain, name: 'bar.foo.com') }.to raise_error(Sequel::ValidationFailed, error_msg) end it 'denies private bar.foo.com a when shared baz.bar.foo.com and foo.com exist' do - SharedDomain.make name: 'baz.bar.foo.com' - SharedDomain.make name: 'foo.com' + create(:shared_domain, name: 'baz.bar.foo.com') + create(:shared_domain, name: 'foo.com') error_msg = %(The domain name "bar.foo.com" cannot be created because "baz.bar.foo.com" is already reserved by another domain) - expect { PrivateDomain.make name: 'bar.foo.com' }.to raise_error(Sequel::ValidationFailed, error_msg) + expect { create(:private_domain, name: 'bar.foo.com') }.to raise_error(Sequel::ValidationFailed, error_msg) end context 'with reserved private domains' do let(:reserved) { File.join(Paths::FIXTURES, 'config/reserved_private_domains.dat') } it 'handles normal reserved domain names' do - expect { PrivateDomain.make name: 'com.ac' }.to raise_error(Sequel::ValidationFailed, /reserved/) - expect { PrivateDomain.make name: 'a.com.ac' }.not_to raise_error - expect { PrivateDomain.make name: 'scom.ac' }.not_to raise_error + expect { create(:private_domain, name: 'com.ac') }.to raise_error(Sequel::ValidationFailed, /reserved/) + expect { create(:private_domain, name: 'a.com.ac') }.not_to raise_error + expect { create(:private_domain, name: 'scom.ac') }.not_to raise_error end it 'handles wildcard reserved domain names' do - expect { PrivateDomain.make name: 'b.wild.card' }.to raise_error(Sequel::ValidationFailed, /reserved/) - expect { PrivateDomain.make name: 'a.b.wild.card' }.not_to raise_error + expect { create(:private_domain, name: 'b.wild.card') }.to raise_error(Sequel::ValidationFailed, /reserved/) + expect { create(:private_domain, name: 'a.b.wild.card') }.not_to raise_error end it 'handles exception reserved domain names' do - expect { PrivateDomain.make name: 'a.wild.card' }.not_to raise_error + expect { create(:private_domain, name: 'a.wild.card') }.not_to raise_error end context 'with a missing file' do @@ -109,7 +109,7 @@ module VCAP::CloudController end describe 'total allowed private domains' do - let(:organization) { Organization.make } + let(:organization) { create(:organization) } let(:org_quota) { organization.quota_definition } subject(:domain) { PrivateDomain.new(name: 'foo.com', owning_organization: organization) } @@ -166,7 +166,7 @@ module VCAP::CloudController end describe '#in_suspended_org?' do - let(:org) { Organization.make } + let(:org) { create(:organization) } let(:private_domain) { PrivateDomain.new(owning_organization: org) } context 'when in a suspended organization' do @@ -187,14 +187,14 @@ module VCAP::CloudController end describe '#destroy' do - let(:space) { Space.make(organization: private_domain.owning_organization) } + let(:space) { create(:space, organization: private_domain.owning_organization) } before do TestConfig.override(kubernetes: {}) end it 'destroys the routes' do - route = Route.make(domain: private_domain, space: space) + route = create(:route, domain: private_domain, space: space) expect do private_domain.destroy @@ -223,7 +223,7 @@ module VCAP::CloudController context 'when not the owner' do it 'returns true when allowed to share the domain' do - org = Organization.make + org = create(:organization) private_domain.add_shared_organization(org) expect(private_domain.usable_by_organization?(org)).to be true end diff --git a/spec/unit/models/runtime/process_model_spec.rb b/spec/unit/models/runtime/process_model_spec.rb index 90ad854969b..ab3388188fd 100644 --- a/spec/unit/models/runtime/process_model_spec.rb +++ b/spec/unit/models/runtime/process_model_spec.rb @@ -2,12 +2,12 @@ module VCAP::CloudController RSpec.describe ProcessModel, type: :model do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:parent_app) { AppModel.make(space:) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:parent_app) { create(:app_model, space:) } - let(:domain) { PrivateDomain.make(owning_organization: org) } - let(:route) { Route.make(domain:, space:) } + let(:domain) { create(:private_domain, owning_organization: org) } + let(:route) { create(:route, domain:, space:) } def enable_custom_buildpacks TestConfig.override(disable_custom_buildpacks: nil) @@ -44,7 +44,7 @@ def expect_no_validator(validator_class) end context 'has custom ports' do - subject(:process) { ProcessModel.make(ports: [8081, 8082]) } + subject(:process) { create(:process_model, ports: [8081, 8082]) } it 'return an app with custom port configuration' do expect(process.ports).to eq([8081, 8082]) @@ -63,64 +63,64 @@ def expect_no_validator(validator_class) it 'has service_bindings through the parent app' do process = ProcessModelFactory.make(type: 'potato') - binding1 = ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) - binding2 = ServiceBinding.make(app: process.app, service_instance: ManagedServiceInstance.make(space: process.space)) + binding1 = create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) + binding2 = create(:service_binding, app: process.app, service_instance: create(:managed_service_instance, space: process.space)) expect(process.reload.service_bindings).to contain_exactly(binding1, binding2) end it 'has route_mappings' do process = ProcessModelFactory.make - route1 = Route.make(space: process.space) - route2 = Route.make(space: process.space) + route1 = create(:route, space: process.space) + route2 = create(:route, space: process.space) - mapping1 = RouteMappingModel.make(app: process.app, route: route1, process_type: process.type) - mapping2 = RouteMappingModel.make(app: process.app, route: route2, process_type: process.type) + mapping1 = create(:route_mapping_model, app: process.app, route: route1, process_type: process.type) + mapping2 = create(:route_mapping_model, app: process.app, route: route2, process_type: process.type) expect(process.reload.route_mappings).to contain_exactly(mapping1, mapping2) end it 'has routes through route_mappings' do process = ProcessModelFactory.make - route1 = Route.make(space: process.space) - route2 = Route.make(space: process.space) + route1 = create(:route, space: process.space) + route2 = create(:route, space: process.space) - RouteMappingModel.make(app: process.app, route: route1, process_type: process.type) - RouteMappingModel.make(app: process.app, route: route2, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route1, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route2, process_type: process.type) expect(process.reload.routes).to contain_exactly(route1, route2) end it 'has a desired_droplet from the parent app' do - parent_app = AppModel.make - droplet = DropletModel.make(app: parent_app, state: DropletModel::STAGED_STATE) + parent_app = create(:app_model) + droplet = create(:droplet_model, app: parent_app, state: DropletModel::STAGED_STATE) parent_app.update(droplet:) - process = ProcessModel.make(app: parent_app) + process = create(:process_model, app: parent_app) expect(process.desired_droplet).to eq(parent_app.droplet) end it 'has a space from the parent app' do - parent_app = AppModel.make(space:) - process = ProcessModel.make + parent_app = create(:app_model, space:) + process = create(:process_model) expect(process.space).not_to eq(space) process.update(app: parent_app) expect(process.reload.space).to eq(space) end it 'has an organization from the parent app' do - parent_app = AppModel.make(space:) - process = ProcessModel.make + parent_app = create(:app_model, space:) + process = create(:process_model) expect(process.organization).not_to eq(org) process.update(app: parent_app).reload expect(process.organization).to eq(org) end it 'has a stack from the parent app' do - stack = Stack.make - parent_app = AppModel.make(space:) + stack = create(:stack) + parent_app = create(:app_model, space:) parent_app.lifecycle_data.update(stack: stack.name) - process = ProcessModel.make + process = create(:process_model) expect(process.stack).not_to eq(stack) process.update(app: parent_app).reload @@ -129,9 +129,9 @@ def expect_no_validator(validator_class) context 'when an app has multiple ports bound to the same route' do subject(:process) { ProcessModelFactory.make(diego: true, ports: [8080, 9090]) } - let(:route) { Route.make(host: 'host2', space: process.space, path: '/my%20path') } - let!(:route_mapping1) { RouteMappingModel.make(app: process.app, route: route, app_port: 8080) } - let!(:route_mapping2) { RouteMappingModel.make(app: process.app, route: route, app_port: 9090) } + let(:route) { create(:route, host: 'host2', space: process.space, path: '/my%20path') } + let!(:route_mapping1) { create(:route_mapping_model, app: process.app, route: route, app_port: 8080) } + let!(:route_mapping2) { create(:route_mapping_model, app: process.app, route: route, app_port: 9090) } it 'returns a single associated route' do expect(process.routes.size).to eq 1 @@ -140,14 +140,14 @@ def expect_no_validator(validator_class) context 'with sidecars' do let(:process) { ProcessModelFactory.make } - let(:sidecar1) { SidecarModel.make(app: process.app) } - let(:sidecar2) { SidecarModel.make(app: process.app) } - let(:other_sidecar) { SidecarModel.make(app: process.app) } + let(:sidecar1) { create(:sidecar_model, app: process.app) } + let(:sidecar2) { create(:sidecar_model, app: process.app) } + let(:other_sidecar) { create(:sidecar_model, app: process.app) } before do - SidecarProcessTypeModel.make(sidecar: sidecar1, type: process.type) - SidecarProcessTypeModel.make(sidecar: sidecar2, type: process.type) - SidecarProcessTypeModel.make(sidecar: other_sidecar, type: 'worker') + create(:sidecar_process_type_model, sidecar: sidecar1, type: process.type) + create(:sidecar_process_type_model, sidecar: sidecar2, type: process.type) + create(:sidecar_process_type_model, sidecar: other_sidecar, type: 'worker') end it 'has sidecars' do @@ -156,7 +156,7 @@ def expect_no_validator(validator_class) context 'when process has less memory than sidecars' do let(:process) { ProcessModelFactory.make(memory: 500) } - let(:sidecar1) { SidecarModel.make(app: process.app, memory: 400) } + let(:sidecar1) { create(:sidecar_model, app: process.app, memory: 400) } it 'is invalid' do expect { process.update(memory: 300) }.to raise_error Sequel::ValidationFailed @@ -186,8 +186,8 @@ def expect_no_validator(validator_class) describe 'org and space quota validator policies' do subject(:process) { ProcessModelFactory.make(app: parent_app) } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org, space_quota_definition: SpaceQuotaDefinition.make(organization: org)) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org, space_quota_definition: create(:space_quota_definition, organization: org)) } it 'validates org and space using MaxMemoryPolicy' do max_memory_policies = process.validation_policies.select { |policy| policy.instance_of? AppMaxMemoryPolicy } @@ -208,7 +208,7 @@ def expect_no_validator(validator_class) end describe 'buildpack' do - subject(:process) { ProcessModel.make } + subject(:process) { create(:process_model) } it 'allows nil value' do process.app.lifecycle_data.update(buildpacks: nil) @@ -235,7 +235,7 @@ def expect_no_validator(validator_class) end it 'allows a buildpack name' do - admin_buildpack = Buildpack.make + admin_buildpack = create(:buildpack) process.app.lifecycle_data.update(buildpacks: [admin_buildpack.name]) expect do process.save @@ -362,10 +362,10 @@ def expect_no_validator(validator_class) subject(:process) { ProcessModelFactory.make } let(:log_rate_limit) { 1024 } let(:quota) do - QuotaDefinition.make(memory_limit: 128, log_rate_limit: log_rate_limit) + create(:quota_definition, memory_limit: 128, log_rate_limit: log_rate_limit) end let(:space_quota) do - SpaceQuotaDefinition.make(memory_limit: 128, organization: org, log_rate_limit: log_rate_limit) + create(:space_quota_definition, memory_limit: 128, organization: org, log_rate_limit: log_rate_limit) end context 'app update' do @@ -376,9 +376,9 @@ def act_as_cf_admin allow(VCAP::CloudController::SecurityContext).to receive(:admin?).and_call_original end - let(:org) { Organization.make(quota_definition: quota) } - let(:space) { Space.make(name: 'hi', organization: org, space_quota_definition: space_quota) } - let(:parent_app) { AppModel.make(space:) } + let(:org) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, name: 'hi', organization: org, space_quota_definition: space_quota) } + let(:parent_app) { create(:app_model, space:) } subject!(:process) { ProcessModelFactory.make(app: parent_app, memory: 64, log_rate_limit: 512, instances: 2, state: 'STOPPED') } @@ -397,7 +397,7 @@ def act_as_cf_admin context 'when only exceeding the org quota' do before do - org.quota_definition = QuotaDefinition.make(log_rate_limit: 5) + org.quota_definition = create(:quota_definition, log_rate_limit: 5) org.save end @@ -442,7 +442,7 @@ def act_as_cf_admin it 'allows scaling down instances of an app from above quota to below quota' do process.update(state: 'STARTED') - org.quota_definition = QuotaDefinition.make(memory_limit: 72) + org.quota_definition = create(:quota_definition, memory_limit: 72) act_as_cf_admin { org.save } expect(process.reload).not_to be_valid @@ -479,7 +479,7 @@ def act_as_cf_admin it 'raises when scaling down number of instances but remaining above quota' do process.update(state: 'STARTED') - org.quota_definition = QuotaDefinition.make(memory_limit: 32) + org.quota_definition = create(:quota_definition, memory_limit: 32) act_as_cf_admin { org.save } process.reload @@ -492,7 +492,7 @@ def act_as_cf_admin it 'allows stopping an app that is above quota' do process.update(state: 'STARTED') - org.quota_definition = QuotaDefinition.make(memory_limit: 72) + org.quota_definition = create(:quota_definition, memory_limit: 72) act_as_cf_admin { org.save } expect(process.reload).to be_started @@ -504,7 +504,7 @@ def act_as_cf_admin end it 'allows reducing memory from above quota to at/below quota' do - org.quota_definition = QuotaDefinition.make(memory_limit: 64) + org.quota_definition = create(:quota_definition, memory_limit: 64) act_as_cf_admin { org.save } process.memory = 40 @@ -588,7 +588,7 @@ def act_as_cf_admin end describe '#in_suspended_org?' do - subject(:process) { ProcessModel.make } + subject(:process) { create(:process_model) } context 'when in a space in a suspended organization' do before { process.organization.update(status: 'suspended') } @@ -609,8 +609,8 @@ def act_as_cf_admin describe '#stack' do it 'gets stack from the parent app' do - desired_stack = Stack.make - process = ProcessModel.make + desired_stack = create(:stack) + process = create(:process_model) expect(process.stack).not_to eq(desired_stack) process.app.lifecycle_data.update(stack: desired_stack.name) @@ -618,7 +618,7 @@ def act_as_cf_admin end it 'returns the default stack when the parent app does not have a stack' do - process = ProcessModel.make + process = create(:process_model) expect(process.stack).not_to eq(Stack.default) process.app.lifecycle_data.update(stack: nil) @@ -627,17 +627,15 @@ def act_as_cf_admin end describe '#execution_metadata' do - let(:parent_app) { AppModel.make } + let(:parent_app) { create(:app_model) } - subject(:process) { ProcessModel.make(app: parent_app) } + subject(:process) { create(:process_model, app: parent_app) } context 'when the app has a droplet' do let(:droplet) do - DropletModel.make( - app: parent_app, - execution_metadata: 'some-other-metadata', - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, app: parent_app, + execution_metadata: 'some-other-metadata', + state: VCAP::CloudController::DropletModel::STAGED_STATE) end before do @@ -818,15 +816,15 @@ def act_as_cf_admin end describe '#environment_json' do - let(:parent_app) { AppModel.make(environment_variables: { 'key' => 'value' }) } - let!(:process) { ProcessModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, environment_variables: { 'key' => 'value' }) } + let!(:process) { create(:process_model, app: parent_app) } it 'returns the parent app environment_variables' do expect(process.environment_json).to eq({ 'key' => 'value' }) end context 'when revisions are enabled and we have a revision' do - let!(:revision) { RevisionModel.make(app: parent_app, environment_variables: { 'key' => 'value2' }) } + let!(:revision) { create(:revision_model, app: parent_app, environment_variables: { 'key' => 'value2' }) } before do process.update(revision:) @@ -839,19 +837,19 @@ def act_as_cf_admin end describe '#database_uri' do - let(:parent_app) { AppModel.make(environment_variables: { 'jesse' => 'awesome' }, space: space) } + let(:parent_app) { create(:app_model, environment_variables: { 'jesse' => 'awesome' }, space: space) } - subject(:process) { ProcessModel.make(app: parent_app) } + subject(:process) { create(:process_model, app: parent_app) } context 'when there are database-like services' do before do - sql_service_plan = ServicePlan.make(service: Service.make(label: 'elephantsql-n/a')) - sql_service_instance = ManagedServiceInstance.make(space: space, service_plan: sql_service_plan, name: 'elephantsql-vip-uat') - ServiceBinding.make(app: parent_app, service_instance: sql_service_instance, credentials: { 'uri' => 'mysql://foo.com' }) + sql_service_plan = create(:service_plan, service: create(:service, label: 'elephantsql-n/a')) + sql_service_instance = create(:managed_service_instance, space: space, service_plan: sql_service_plan, name: 'elephantsql-vip-uat') + create(:service_binding, app: parent_app, service_instance: sql_service_instance, credentials: { 'uri' => 'mysql://foo.com' }) - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) end it 'returns database uri' do @@ -861,13 +859,13 @@ def act_as_cf_admin context 'when there are non-database-like services' do before do - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: { 'uri' => 'banana://yum.com' }) - uncredentialed_service_plan = ServicePlan.make(service: Service.make(label: 'mysterious-n/a')) - uncredentialed_service_instance = ManagedServiceInstance.make(space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') - ServiceBinding.make(app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) + uncredentialed_service_plan = create(:service_plan, service: create(:service, label: 'mysterious-n/a')) + uncredentialed_service_instance = create(:managed_service_instance, space: space, service_plan: uncredentialed_service_plan, name: 'mysterious-mystery') + create(:service_binding, app: parent_app, service_instance: uncredentialed_service_instance, credentials: {}) end it 'returns nil' do @@ -883,9 +881,9 @@ def act_as_cf_admin context 'when the service binding credentials is nil' do before do - banana_service_plan = ServicePlan.make(service: Service.make(label: 'chiquita-n/a')) - banana_service_instance = ManagedServiceInstance.make(space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') - ServiceBinding.make(app: parent_app, service_instance: banana_service_instance, credentials: nil) + banana_service_plan = create(:service_plan, service: create(:service, label: 'chiquita-n/a')) + banana_service_instance = create(:managed_service_instance, space: space, service_plan: banana_service_plan, name: 'chiqiuta-yummy') + create(:service_binding, app: parent_app, service_instance: banana_service_instance, credentials: nil) end it 'returns nil' do @@ -969,7 +967,7 @@ def act_as_cf_admin end describe 'custom_buildpack_url' do - subject(:process) { ProcessModel.make(app: parent_app) } + subject(:process) { create(:process_model, app: parent_app) } context 'when a custom buildpack is associated with the app' do it 'is the custom url' do process.app.lifecycle_data.update(buildpacks: ['https://example.com/repo.git']) @@ -979,14 +977,14 @@ def act_as_cf_admin context 'when an admin buildpack is associated with the app' do it 'is nil' do - process.app.lifecycle_data.update(buildpacks: [Buildpack.make.name]) + process.app.lifecycle_data.update(buildpacks: [create(:buildpack).name]) expect(process.custom_buildpack_url).to be_nil end end context 'when no buildpack is associated with the app' do it 'is nil' do - expect(ProcessModel.make.custom_buildpack_url).to be_nil + expect(create(:process_model).custom_buildpack_url).to be_nil end end end @@ -1012,10 +1010,10 @@ def act_as_cf_admin end describe '#actual_droplet' do - let(:first_droplet) { DropletModel.make(app: parent_app, state: DropletModel::STAGED_STATE) } - let(:second_droplet) { DropletModel.make(app: parent_app, state: DropletModel::STAGED_STATE) } - let(:revision) { RevisionModel.make(app: parent_app, droplet_guid: first_droplet.guid) } - let(:process) { ProcessModel.make(app: parent_app, revision: revision) } + let(:first_droplet) { create(:droplet_model, app: parent_app, state: DropletModel::STAGED_STATE) } + let(:second_droplet) { create(:droplet_model, app: parent_app, state: DropletModel::STAGED_STATE) } + let(:revision) { create(:revision_model, app: parent_app, droplet_guid: first_droplet.guid) } + let(:process) { create(:process_model, app: parent_app, revision: revision) } before do first_droplet @@ -1023,7 +1021,7 @@ def act_as_cf_admin end context 'when revisions are disabled' do - let(:parent_app) { AppModel.make(space: space, revisions_enabled: false) } + let(:parent_app) { create(:app_model, space: space, revisions_enabled: false) } it 'returns desired_droplet' do expect(process.actual_droplet).to eq(second_droplet) @@ -1050,7 +1048,7 @@ def act_as_cf_admin end it 'returns false if package_state is PENDING' do - PackageModel.make(app: process.app) + create(:package_model, app: process.app) process.reload expect(process.package_state).to eq('PENDING') @@ -1062,7 +1060,7 @@ def act_as_cf_admin subject(:process) { ProcessModelFactory.make } it 'returns true if package_state is PENDING' do - PackageModel.make(app: process.app) + create(:package_model, app: process.app) process.reload expect(process.package_state).to eq('PENDING') @@ -1079,18 +1077,18 @@ def act_as_cf_admin subject(:process) { ProcessModelFactory.make } it 'returns true if the latest_build is STAGING' do - BuildModel.make(app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) + create(:build_model, app: process.app, package: process.latest_package, state: BuildModel::STAGING_STATE) expect(process.reload.staging?).to be true end it 'returns false if a new package has been uploaded but a droplet has not been created for it' do - PackageModel.make(app: process.app) + create(:package_model, app: process.app) process.reload expect(process.staging?).to be false end it 'returns false if the latest_droplet is not STAGING' do - DropletModel.make(app: process.app, package: process.latest_package, state: DropletModel::STAGED_STATE) + create(:droplet_model, app: process.app, package: process.latest_package, state: DropletModel::STAGED_STATE) process.reload expect(process.staging?).to be false end @@ -1117,9 +1115,9 @@ def act_as_cf_admin end describe '#latest_build' do - let!(:process) { ProcessModel.make app: parent_app } - let!(:build1) { BuildModel.make(app: parent_app, state: BuildModel::STAGED_STATE) } - let!(:build2) { BuildModel.make(app: parent_app, state: BuildModel::STAGED_STATE) } + let!(:process) { create(:process_model, app: parent_app) } + let!(:build1) { create(:build_model, app: parent_app, state: BuildModel::STAGED_STATE) } + let!(:build2) { create(:build_model, app: parent_app, state: BuildModel::STAGED_STATE) } it 'returns the most recently created build' do expect(process.latest_build).to eq build2 @@ -1127,9 +1125,9 @@ def act_as_cf_admin end describe '#package_state' do - let(:parent_app) { AppModel.make } + let(:parent_app) { create(:app_model) } - subject(:process) { ProcessModel.make(app: parent_app) } + subject(:process) { create(:process_model, app: parent_app) } it 'calculates the package state' do expect(process.latest_package).to be_nil @@ -1151,12 +1149,12 @@ def act_as_cf_admin end it 'returns true if PENDING is set' do - PackageModel.make(app: process.app, package_hash: 'hash') + create(:package_model, app: process.app, package_hash: 'hash') expect(process.reload.needs_staging?).to be true end it 'returns false if STAGING is set' do - DropletModel.make(app: process.app, package: process.latest_package, state: DropletModel::STAGING_STATE) + create(:droplet_model, app: process.app, package: process.latest_package, state: DropletModel::STAGING_STATE) expect(process.needs_staging?).to be false end end @@ -1203,13 +1201,13 @@ def act_as_cf_admin describe 'web?' do context 'when the process type is web' do it 'returns true' do - expect(ProcessModel.make(type: 'web').web?).to be true + expect(create(:process_model, type: 'web').web?).to be true end end context 'when the process type is NOT web' do it 'returns false' do - expect(ProcessModel.make(type: 'Bieber').web?).to be false + expect(create(:process_model, type: 'Bieber').web?).to be false end end end @@ -1389,16 +1387,16 @@ def act_as_cf_admin let(:process) { ProcessModelFactory.make(app: parent_app) } it 'returns the fqdns and paths on the app' do - domain = PrivateDomain.make(name: 'mydomain.com', owning_organization: org) - route = Route.make(host: 'myhost', domain: domain, space: space, path: '/my%20path') - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + domain = create(:private_domain, name: 'mydomain.com', owning_organization: org) + route = create(:route, host: 'myhost', domain: domain, space: space, path: '/my%20path') + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) expect(process.uris).to eq(['myhost.mydomain.com/my%20path']) end it 'eagers load domains' do - domains = 2.times.map { |i| PrivateDomain.make(name: "domain#{i}.com", owning_organization: org) } - routes = 4.times.map { |i| Route.make(host: "host#{i}", domain: domains[i % 2], space: space) } - routes.each { |route| RouteMappingModel.make(app: process.app, route: route, process_type: process.type) } + domains = 2.times.map { |i| create(:private_domain, name: "domain#{i}.com", owning_organization: org) } + routes = 4.times.map { |i| create(:route, host: "host#{i}", domain: domains[i % 2], space: space) } + routes.each { |route| create(:route_mapping_model, app: process.app, route: route, process_type: process.type) } uris = nil expect do @@ -1412,7 +1410,7 @@ def act_as_cf_admin describe 'creation' do it 'does not create an AppUsageEvent' do expect do - ProcessModel.make + create(:process_model) end.not_to(change(AppUsageEvent, :count)) end @@ -1422,12 +1420,12 @@ def act_as_cf_admin end it 'uses the provided memory' do - process = ProcessModel.make(memory: 100) + process = create(:process_model, memory: 100) expect(process.memory).to eq(100) end it 'uses the default_app_memory when none is provided' do - process = ProcessModel.make + process = create(:process_model) expect(process.memory).to eq(200) end end @@ -1438,12 +1436,12 @@ def act_as_cf_admin end it 'uses the provided quota' do - process = ProcessModel.make(disk_quota: 256) + process = create(:process_model, disk_quota: 256) expect(process.disk_quota).to eq(256) end it 'uses the default quota' do - process = ProcessModel.make + process = create(:process_model) expect(process.disk_quota).to eq(512) end end @@ -1454,12 +1452,12 @@ def act_as_cf_admin end it 'uses the provided quota' do - process = ProcessModel.make(log_rate_limit: 256) + process = create(:process_model, log_rate_limit: 256) expect(process.log_rate_limit).to eq(256) end it 'uses the default quota' do - process = ProcessModel.make + process = create(:process_model) expect(process.log_rate_limit).to eq(1024) end end @@ -1470,7 +1468,7 @@ def act_as_cf_admin end it 'uses the instance_file_descriptor_limit config variable' do - process = ProcessModel.make + process = create(:process_model) expect(process.file_descriptors).to eq(200) end end @@ -1479,14 +1477,14 @@ def act_as_cf_admin context 'with a diego app' do context 'and no ports are specified' do it 'does not return a default value' do - ProcessModel.make(diego: true) + create(:process_model, diego: true) expect(ProcessModel.last.ports).to be_nil end end context 'and ports are specified' do it 'uses the ports provided' do - ProcessModel.make(diego: true, ports: [9999]) + create(:process_model, diego: true, ports: [9999]) expect(ProcessModel.last.ports).to eq [9999] end end @@ -1574,7 +1572,7 @@ def act_as_cf_admin context 'when a detected admin buildpack was used for staging' do it 'creates an AppUsageEvent that contains the detected buildpack guid' do - buildpack = Buildpack.make + buildpack = create(:buildpack) process = ProcessModelFactory.make(state: 'STOPPED') process.desired_droplet.update( buildpack_receipt_buildpack: 'Admin buildpack detect string', @@ -1599,7 +1597,7 @@ def act_as_cf_admin end it 'destroys all dependent crash events' do - app_event = AppEvent.make(app: process) + app_event = create(:app_event, app: process) expect do process.destroy @@ -1638,15 +1636,15 @@ def act_as_cf_admin subject(:process) { ProcessModelFactory.make(app: parent_app) } it 'does not allow a docker package for a buildpack app' do - process.app.lifecycle_data.update(buildpacks: [Buildpack.make.name]) - PackageModel.make(:docker, app: process.app) + process.app.lifecycle_data.update(buildpacks: [create(:buildpack).name]) + create(:package_model, :docker, app: process.app) expect do process.save end.to raise_error(Sequel::ValidationFailed, /incompatible with buildpack/) end it 'retrieves the docker image from the package' do - PackageModel.make(:docker, app: process.app, docker_image: 'someimage') + create(:package_model, :docker, app: process.app, docker_image: 'someimage') expect(process.reload.docker_image).to eq('someimage') end end @@ -1655,7 +1653,7 @@ def act_as_cf_admin subject(:process) { ProcessModelFactory.make(app: parent_app) } it 'retrieves the docker registry username from the package' do - PackageModel.make(:docker, app: process.app, docker_image: 'someimage', docker_username: 'user') + create(:package_model, :docker, app: process.app, docker_image: 'someimage', docker_username: 'user') expect(process.reload.docker_username).to eq('user') end end @@ -1664,7 +1662,7 @@ def act_as_cf_admin subject(:process) { ProcessModelFactory.make(app: parent_app) } it 'retrieves the docker registry password from the package' do - PackageModel.make(:docker, app: process.app, docker_image: 'someimage', docker_password: 'pass') + create(:package_model, :docker, app: process.app, docker_image: 'someimage', docker_password: 'pass') expect(process.reload.docker_password).to eq('pass') end end @@ -1738,10 +1736,10 @@ def act_as_cf_admin describe 'ports' do context 'serialization' do it 'serializes and deserializes arrays of integers' do - process = ProcessModel.make(diego: true, ports: [1025, 1026, 1027, 1028]) + process = create(:process_model, diego: true, ports: [1025, 1026, 1027, 1028]) expect(process.ports).to eq([1025, 1026, 1027, 1028]) - process = ProcessModel.make(diego: true, ports: [1024]) + process = create(:process_model, diego: true, ports: [1024]) expect(process.ports).to eq([1024]) end end @@ -1823,7 +1821,7 @@ def act_as_cf_admin context 'buildpack app' do context 'when app is not staged' do it 'returns the ports that were specified during creation' do - process = ProcessModel.make(diego: true, ports: [1025, 1026, 1027, 1028]) + process = create(:process_model, diego: true, ports: [1025, 1026, 1027, 1028]) expect(process.ports).to eq([1025, 1026, 1027, 1028]) end end @@ -1852,10 +1850,10 @@ def act_as_cf_admin end describe '#open_ports' do - let(:parent_app) { AppModel.make } + let(:parent_app) { create(:app_model) } context 'when the process is docker' do - let(:process) { ProcessModel.make(:docker, ports:, type:) } + let(:process) { create(:process_model, :docker, ports:, type:) } subject(:open_ports) { process.open_ports } @@ -1865,7 +1863,7 @@ def act_as_cf_admin context 'when there is at least one route mapping with no port specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) end context 'when the Docker image exposes a port' do @@ -1891,7 +1889,7 @@ def act_as_cf_admin context 'when all route mappings have ports specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: 9999) + create(:route_mapping_model, app: process.app, process_type: type, app_port: 9999) end it 'uses the process ports' do @@ -1906,7 +1904,7 @@ def act_as_cf_admin context 'when there is at least one route mapping with no port specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) end context 'when the Docker image exposes a port' do @@ -1932,7 +1930,7 @@ def act_as_cf_admin context 'when all route mappings have ports specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: 9999) + create(:route_mapping_model, app: process.app, process_type: type, app_port: 9999) end it 'uses 8080' do @@ -1947,7 +1945,7 @@ def act_as_cf_admin context 'when there is at least one route mapping with no port specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) + create(:route_mapping_model, app: process.app, process_type: type, app_port: ProcessModel::NO_APP_PORT_SPECIFIED) end context 'when the Docker image exposes a port' do @@ -1973,7 +1971,7 @@ def act_as_cf_admin context 'when all route mappings have ports specified' do before do - RouteMappingModel.make(app: process.app, process_type: type, app_port: 9999) + create(:route_mapping_model, app: process.app, process_type: type, app_port: 9999) end it 'does not open any ports' do @@ -1984,7 +1982,7 @@ def act_as_cf_admin end context 'when the process is buildpack' do - let(:process) { ProcessModel.make(ports:, type:) } + let(:process) { create(:process_model, ports:, type:) } subject(:open_ports) { process.open_ports } @@ -2018,8 +2016,8 @@ def act_as_cf_admin end describe 'name' do - let(:parent_app) { AppModel.make(name: 'parent-app-name') } - let!(:process) { ProcessModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, name: 'parent-app-name') } + let!(:process) { create(:process_model, app: parent_app) } it 'returns the parent app name' do expect(process.name).to eq('parent-app-name') @@ -2027,13 +2025,13 @@ def act_as_cf_admin end describe 'staging failures' do - let(:parent_app) { AppModel.make(name: 'parent-app-name') } - subject(:process) { ProcessModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, name: 'parent-app-name') } + subject(:process) { create(:process_model, app: parent_app) } let(:error_id) { 'StagingFailed' } let(:error_description) { 'stating failed' } describe 'when there is a build but no droplet' do - let!(:build) { BuildModel.make app: parent_app, error_id: error_id, error_description: error_description } + let!(:build) { create(:build_model, app: parent_app, error_id: error_id, error_description: error_description) } it 'returns the error_id and error_description from the build' do expect(process.staging_failed_reason).to eq(error_id) @@ -2042,7 +2040,7 @@ def act_as_cf_admin end describe 'when there is a droplet but no build (legacy case for supporting rolling deploy)' do - let!(:droplet) { DropletModel.make app: parent_app, error_id: error_id, error_description: error_description } + let!(:droplet) { create(:droplet_model, app: parent_app, error_id: error_id, error_description: error_description) } it 'returns the error_id and error_description from the build' do expect(process.staging_failed_reason).to eq(error_id) @@ -2052,10 +2050,10 @@ def act_as_cf_admin end describe 'staging task id' do - subject(:process) { ProcessModel.make(app: parent_app) } + subject(:process) { create(:process_model, app: parent_app) } context 'when there is a build but no droplet' do - let!(:build) { BuildModel.make(app: parent_app) } + let!(:build) { create(:build_model, app: parent_app) } it 'is the build guid' do expect(process.staging_task_id).to eq(build.guid) @@ -2063,7 +2061,7 @@ def act_as_cf_admin end context 'when there is no build' do - let!(:droplet) { DropletModel.make(app: parent_app) } + let!(:droplet) { create(:droplet_model, app: parent_app) } it 'is the droplet guid if there is no build' do expect(process.staging_task_id).to eq(droplet.guid) diff --git a/spec/unit/models/runtime/quota_constraints/max_service_instances_policy_spec.rb b/spec/unit/models/runtime/quota_constraints/max_service_instances_policy_spec.rb index 09677c4b835..bb22806806f 100644 --- a/spec/unit/models/runtime/quota_constraints/max_service_instances_policy_spec.rb +++ b/spec/unit/models/runtime/quota_constraints/max_service_instances_policy_spec.rb @@ -1,26 +1,26 @@ require 'spec_helper' RSpec.describe MaxServiceInstancePolicy do - let(:org) { VCAP::CloudController::Organization.make quota_definition: quota } - let(:space) { VCAP::CloudController::Space.make organization: org } + let(:org) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, organization: org) } let(:service_instance) do - service_plan = VCAP::CloudController::ServicePlan.make - VCAP::CloudController::ManagedServiceInstance.make_unsaved space:, service_plan: + service_plan = create(:service_plan) + build(:managed_service_instance, space:, service_plan:) end let(:total_services) { 2 } - let(:quota) { VCAP::CloudController::QuotaDefinition.make total_services: } + let(:quota) { create(:quota_definition, total_services:) } let(:existing_service_count) { 0 } let(:error_name) { :random_error_name } let(:policy) { MaxServiceInstancePolicy.new(service_instance, existing_service_count, quota, error_name) } def make_service_instance - VCAP::CloudController::ManagedServiceInstance.make space: + create(:managed_service_instance, space:) end it 'counts only managed service instances' do total_services.times do - VCAP::CloudController::UserProvidedServiceInstance.make space: + create(:user_provided_service_instance, space:) end expect(policy).to validate_without_error(service_instance) diff --git a/spec/unit/models/runtime/quota_constraints/max_service_keys_policy_spec.rb b/spec/unit/models/runtime/quota_constraints/max_service_keys_policy_spec.rb index 3fcb9327231..daa4b90593f 100644 --- a/spec/unit/models/runtime/quota_constraints/max_service_keys_policy_spec.rb +++ b/spec/unit/models/runtime/quota_constraints/max_service_keys_policy_spec.rb @@ -1,15 +1,15 @@ require 'spec_helper' RSpec.describe MaxServiceKeysPolicy do - let(:org) { VCAP::CloudController::Organization.make quota_definition: quota } - let(:space) { VCAP::CloudController::Space.make organization: org } + let(:org) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, organization: org) } let(:service_instance) do - service_plan = VCAP::CloudController::ServicePlan.make - VCAP::CloudController::ManagedServiceInstance.make space:, service_plan: + service_plan = create(:service_plan) + create(:managed_service_instance, space:, service_plan:) end - let(:service_key) { VCAP::CloudController::ServiceKey.make_unsaved service_instance: } + let(:service_key) { build(:service_key, service_instance:) } let(:total_service_keys) { 2 } - let(:quota) { VCAP::CloudController::QuotaDefinition.make total_service_keys: } + let(:quota) { create(:quota_definition, total_service_keys:) } let(:existing_service_key_count) { 0 } let(:existing_service_key_dataset) { double(Sequel::Dataset, count: existing_service_key_count) } let(:error_name) { :random_error_name } @@ -17,7 +17,7 @@ let(:policy) { MaxServiceKeysPolicy.new(service_key, existing_service_key_dataset, quota, error_name) } def make_service_key - VCAP::CloudController::ServiceKey.make service_instance: + create(:service_key, service_instance:) end context 'when quota is nil' do diff --git a/spec/unit/models/runtime/quota_constraints/paid_service_instance_policy_spec.rb b/spec/unit/models/runtime/quota_constraints/paid_service_instance_policy_spec.rb index 0730f262e3c..33e6709da4b 100644 --- a/spec/unit/models/runtime/quota_constraints/paid_service_instance_policy_spec.rb +++ b/spec/unit/models/runtime/quota_constraints/paid_service_instance_policy_spec.rb @@ -1,14 +1,14 @@ require 'spec_helper' RSpec.describe PaidServiceInstancePolicy do - let(:org) { VCAP::CloudController::Organization.make quota_definition: quota } - let(:space) { VCAP::CloudController::Space.make organization: org } - let(:basic_service_plan) { VCAP::CloudController::ServicePlan.make(free: true) } - let(:paid_service_plan) { VCAP::CloudController::ServicePlan.make(free: false) } + let(:org) { create(:organization, quota_definition: quota) } + let(:space) { create(:space, organization: org) } + let(:basic_service_plan) { create(:service_plan, free: true) } + let(:paid_service_plan) { create(:service_plan, free: false) } let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make_unsaved space: space, service_plan: @service_plan + build(:managed_service_instance, space: space, service_plan: @service_plan) end - let(:quota) { VCAP::CloudController::QuotaDefinition.make non_basic_services_allowed: } + let(:quota) { create(:quota_definition, non_basic_services_allowed:) } let(:error_name) { :random_error_name } let(:policy) { PaidServiceInstancePolicy.new(service_instance, quota, error_name) } diff --git a/spec/unit/models/runtime/quota_definition_spec.rb b/spec/unit/models/runtime/quota_definition_spec.rb index 47bce2377ad..fdd53ec7838 100644 --- a/spec/unit/models/runtime/quota_definition_spec.rb +++ b/spec/unit/models/runtime/quota_definition_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::QuotaDefinition, type: :model do - let(:quota_definition) { QuotaDefinition.make } + let(:quota_definition) { create(:quota_definition) } it { is_expected.to have_timestamp_columns } @@ -16,7 +16,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of name' do - existing = QuotaDefinition.make + existing = create(:quota_definition) expect do QuotaDefinition.create(name: existing.name, non_basic_services_allowed: true, total_services: 0, total_routes: 0, memory_limit: 0) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -171,7 +171,7 @@ module VCAP::CloudController describe '#destroy' do context 'when there is an associated organization' do it 'raises an AssociationNotEmpty error' do - Organization.make(quota_definition:) + create(:organization, quota_definition:) expect do quota_definition.destroy diff --git a/spec/unit/models/runtime/revision_model_spec.rb b/spec/unit/models/runtime/revision_model_spec.rb index 1d4c7a01b5e..99a9898249a 100644 --- a/spec/unit/models/runtime/revision_model_spec.rb +++ b/spec/unit/models/runtime/revision_model_spec.rb @@ -3,20 +3,18 @@ module VCAP::CloudController RSpec.describe RevisionModel do let!(:droplet) do - DropletModel.make( - process_types: { - 'web' => 'droplet_web_command', - 'worker' => 'droplet_worker_command', - 'droplet_only' => 'droplet_only_command' - } - ) + create(:droplet_model, process_types: { + 'web' => 'droplet_web_command', + 'worker' => 'droplet_worker_command', + 'droplet_only' => 'droplet_only_command' + }) end - let(:revision) { RevisionModel.make(droplet:) } + let(:revision) { create(:revision_model, droplet:) } describe 'validations' do context 'when a droplet_guid is not present' do let(:revision) do - RevisionModel.new(droplet_guid: nil, app: AppModel.make) + RevisionModel.new(droplet_guid: nil, app: create(:app_model)) end it 'is not valid' do @@ -25,7 +23,7 @@ module VCAP::CloudController end context 'when a app_guid is not present' do - let(:revision) { RevisionModel.make } + let(:revision) { create(:revision_model) } it 'is not valid' do revision.app_guid = nil @@ -36,11 +34,9 @@ module VCAP::CloudController describe 'process_commands' do let!(:non_droplet_process_command) do - RevisionProcessCommandModel.make( - revision: revision, - process_type: 'non_droplet', - process_command: 'non_droplet_command' - ) + create(:revision_process_command_model, revision: revision, + process_type: 'non_droplet', + process_command: 'non_droplet_command') end before do @@ -62,7 +58,7 @@ module VCAP::CloudController end describe '#add_process_command' do - let(:revision) { RevisionModel.make } + let(:revision) { create(:revision_model) } it 'creates a RevisionProcessCommandModel' do expect do @@ -78,8 +74,8 @@ module VCAP::CloudController describe 'when the env vars on the big side of the encrypted column' do let(:env_vars) { { 'foo' => SecureRandom.base64(12_000) } } - let(:app) { AppModel.make(environment_variables: env_vars) } - let(:revision) { RevisionModel.make(environment_variables: env_vars) } + let(:app) { create(:app_model, environment_variables: env_vars) } + let(:revision) { create(:revision_model, environment_variables: env_vars) } it 'allows it' do expect(app.environment_variables).to eq(revision.environment_variables) diff --git a/spec/unit/models/runtime/revision_process_command_model_spec.rb b/spec/unit/models/runtime/revision_process_command_model_spec.rb index 6484ab302f9..46804c0df0a 100644 --- a/spec/unit/models/runtime/revision_process_command_model_spec.rb +++ b/spec/unit/models/runtime/revision_process_command_model_spec.rb @@ -3,15 +3,13 @@ module VCAP::CloudController RSpec.describe RevisionProcessCommandModel do describe 'revision_process_command_model #around_save' do - let(:revision) { RevisionModel.make } - let!(:revision_process_command) { RevisionProcessCommandModel.make(revision_guid: revision.guid, process_type: 'worker') } + let(:revision) { create(:revision_model) } + let!(:revision_process_command) { create(:revision_process_command_model, revision_guid: revision.guid, process_type: 'worker') } it 'raises validation error on unique constraint violation' do expect do - RevisionProcessCommandModel.make( - revision_guid: revision_process_command.revision_guid, - process_type: revision_process_command.process_type - ) + create(:revision_process_command_model, revision_guid: revision_process_command.revision_guid, + process_type: revision_process_command.process_type) end.to raise_error(Sequel::ValidationFailed) { |error| expect(error.message).to include('already exists for given revision') } @@ -19,7 +17,7 @@ module VCAP::CloudController it 'raises the original error on other unique constraint violations' do expect do - RevisionProcessCommandModel.make(guid: revision_process_command.guid, revision_guid: revision_process_command.revision_guid, process_type: 'worker') + create(:revision_process_command_model, guid: revision_process_command.guid, revision_guid: revision_process_command.revision_guid, process_type: 'worker') end.to raise_error(Sequel::UniqueConstraintViolation) end end diff --git a/spec/unit/models/runtime/revision_sidecar_model_spec.rb b/spec/unit/models/runtime/revision_sidecar_model_spec.rb index 878e87c6647..8f134bf2edb 100644 --- a/spec/unit/models/runtime/revision_sidecar_model_spec.rb +++ b/spec/unit/models/runtime/revision_sidecar_model_spec.rb @@ -2,19 +2,19 @@ module VCAP::CloudController RSpec.describe RevisionSidecarModel do - let(:revision_sidecar) { RevisionSidecarModel.make } + let(:revision_sidecar) { create(:revision_sidecar_model) } describe '#process_types' do it 'returns the names of associated sidecar_process_types' do - RevisionSidecarProcessTypeModel.make(type: 'other worker', revision_sidecar: revision_sidecar) + create(:revision_sidecar_process_type_model, type: 'other worker', revision_sidecar: revision_sidecar) expect(revision_sidecar.process_types).to eq ['web', 'other worker'].sort end end describe '#to_hash' do - let(:revision_sidecar) { RevisionSidecarModel.make(name: 'sleepy', command: 'sleep forever') } - let!(:web_process_type) { RevisionSidecarProcessTypeModel.make(revision_sidecar: revision_sidecar, type: 'worker') } + let(:revision_sidecar) { create(:revision_sidecar_model, name: 'sleepy', command: 'sleep forever') } + let!(:web_process_type) { create(:revision_sidecar_process_type_model, revision_sidecar: revision_sidecar, type: 'worker') } it 'returns a hash of attributes' do expect(revision_sidecar.to_hash).to eq({ @@ -51,16 +51,16 @@ module VCAP::CloudController describe 'revision_sidecar_model #around_save' do it 'raises validation error on unique constraint violation for revision sidecar' do - revision_sidecar = RevisionSidecarModel.make(name: 'revision2', command: 'exec') + revision_sidecar = create(:revision_sidecar_model, name: 'revision2', command: 'exec') expect do - RevisionSidecarModel.make(name: revision_sidecar.name, revision_guid: revision_sidecar.revision_guid, command: 'exec') + create(:revision_sidecar_model, name: revision_sidecar.name, revision_guid: revision_sidecar.revision_guid, command: 'exec') end.to raise_error(Sequel::ValidationFailed) { |error| expect(error.message).to include('already exists for revision') } end it 'raises the original error on other unique constraint violations' do - revision_sidecar = RevisionSidecarModel.make(name: 'revision3', command: 'exec') + revision_sidecar = create(:revision_sidecar_model, name: 'revision3', command: 'exec') expect do - RevisionSidecarModel.make(guid: revision_sidecar.guid, name: 'revision4', command: 'exec') + create(:revision_sidecar_model, guid: revision_sidecar.guid, name: 'revision4', command: 'exec') end.to raise_error(Sequel::UniqueConstraintViolation) end end diff --git a/spec/unit/models/runtime/role_spec.rb b/spec/unit/models/runtime/role_spec.rb index 3a52e732c97..288604467d3 100644 --- a/spec/unit/models/runtime/role_spec.rb +++ b/spec/unit/models/runtime/role_spec.rb @@ -5,17 +5,17 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } context 'when there are roles' do - let(:user) { User.make } - let(:org) { Organization.make } - let(:space) { Space.make } - let!(:organization_user) { OrganizationUser.make(user: user, organization: org) } - let!(:organization_manager) { OrganizationManager.make(organization: org) } - let!(:organization_billing_manager) { OrganizationBillingManager.make } - let!(:organization_auditor) { OrganizationAuditor.make } - let!(:space_developer) { SpaceDeveloper.make(user:, space:) } - let!(:space_auditor) { SpaceAuditor.make(space:) } - let!(:space_manager) { SpaceManager.make } - let!(:space_supporter) { SpaceSupporter.make } + let(:user) { create(:user) } + let(:org) { create(:organization) } + let(:space) { create(:space) } + let!(:organization_user) { create(:organization_user, user: user, organization: org) } + let!(:organization_manager) { create(:organization_manager, organization: org) } + let!(:organization_billing_manager) { create(:organization_billing_manager) } + let!(:organization_auditor) { create(:organization_auditor) } + let!(:space_developer) { create(:space_developer, user:, space:) } + let!(:space_auditor) { create(:space_auditor, space:) } + let!(:space_manager) { create(:space_manager) } + let!(:space_supporter) { create(:space_supporter) } it 'contains all the roles' do roles = VCAP::CloudController::Role.all.each_with_object({}) do |role, obj| @@ -34,7 +34,7 @@ module VCAP::CloudController context 'optimized SQL queries' do before do - OrganizationUser.make + create(:organization_user) end it 'works for different filters' do diff --git a/spec/unit/models/runtime/route_mapping_model_spec.rb b/spec/unit/models/runtime/route_mapping_model_spec.rb index 476c4058ae3..cb3d19d839f 100644 --- a/spec/unit/models/runtime/route_mapping_model_spec.rb +++ b/spec/unit/models/runtime/route_mapping_model_spec.rb @@ -3,43 +3,37 @@ module VCAP::CloudController RSpec.describe RouteMappingModel do describe '#process' do - let(:space) { VCAP::CloudController::Space.make } - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:space) { create(:space) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } let!(:web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'old command!', - instances: 3, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 24.hours - ) + create(:process_model, app: app_model, + command: 'old command!', + instances: 3, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 24.hours) end let!(:newer_web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 23.hours - ) + create(:process_model, app: app_model, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 23.hours) end it 'returns the newest process for the given type to maintain backwards compatibility with v2' do - route_mapping = RouteMappingModel.make(app: app_model, route: route, process_type: web_process.type) + route_mapping = create(:route_mapping_model, app: app_model, route: route, process_type: web_process.type) expect(route_mapping.process.guid).to eq(newer_web_process.guid) end end describe 'protocol' do - let(:space) { VCAP::CloudController::Space.make } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } - let(:route) { VCAP::CloudController::Route.make(space:) } + let(:space) { create(:space) } + let(:app_model) { create(:app_model, space:) } + let(:route) { create(:route, space:) } let!(:web_process) do - VCAP::CloudController::ProcessModel.make( - app: app_model, - type: VCAP::CloudController::ProcessTypes::WEB - ) + create(:process_model, app: app_model, + type: VCAP::CloudController::ProcessTypes::WEB) end context 'setting' do @@ -138,10 +132,8 @@ module VCAP::CloudController end let(:tcp_route) do - VCAP::CloudController::Route.make( - :tcp, - space: - ) + create(:route, :tcp, + space:) end it 'returns nil as tcp' do @@ -160,32 +152,28 @@ module VCAP::CloudController end describe '#presented_port' do - let!(:app) { VCAP::CloudController::AppModel.make } - let!(:app_docker) { VCAP::CloudController::AppModel.make(:docker, droplet: droplet_docker) } - let!(:app_docker_without_process) { VCAP::CloudController::AppModel.make(:docker, droplet: droplet_docker) } - let!(:unstaged_app_docker) { VCAP::CloudController::AppModel.make(:docker, droplet: nil) } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'some-type') } - let!(:unstaged_process) { VCAP::CloudController::ProcessModel.make(app: unstaged_app_docker, type: 'test') } - let!(:route) { VCAP::CloudController::Route.make(space: app.space) } - let!(:process_docker) { VCAP::CloudController::ProcessModel.make(app: app_docker, type: 'some-type') } - let!(:route_docker) { VCAP::CloudController::Route.make(space: app_docker.space) } + let!(:app) { create(:app_model) } + let!(:app_docker) { create(:app_model, :docker, droplet: droplet_docker) } + let!(:app_docker_without_process) { create(:app_model, :docker, droplet: droplet_docker) } + let!(:unstaged_app_docker) { create(:app_model, :docker, droplet: nil) } + let!(:process) { create(:process_model, app: app, type: 'some-type') } + let!(:unstaged_process) { create(:process_model, app: unstaged_app_docker, type: 'test') } + let!(:route) { create(:route, space: app.space) } + let!(:process_docker) { create(:process_model, app: app_docker, type: 'some-type') } + let!(:route_docker) { create(:route, space: app_docker.space) } let!(:droplet_docker) do - VCAP::CloudController::DropletModel.make( - :docker, - state: VCAP::CloudController::DropletModel::STAGED_STATE, - execution_metadata: '{"ports":[{"Port":1024, "Protocol":"tcp"}]}' - ) + create(:droplet_model, :docker, + state: VCAP::CloudController::DropletModel::STAGED_STATE, + execution_metadata: '{"ports":[{"Port":1024, "Protocol":"tcp"}]}') end context 'destination for buildpack app with specified port' do let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 1234, - route: route, - process_type: process.type, - weight: 55 - ) + create(:route_mapping_model, app: app, + app_port: 1234, + route: route, + process_type: process.type, + weight: 55) end it 'uses app port as presented port' do @@ -195,13 +183,11 @@ module VCAP::CloudController context 'destination for staged docker app' do let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app_docker, - route: route_docker, - app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, - process_type: process.type, - weight: 55 - ) + create(:route_mapping_model, app: app_docker, + route: route_docker, + app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, + process_type: process.type, + weight: 55) end it 'uses the port from the execution metadata as presented port' do @@ -211,13 +197,11 @@ module VCAP::CloudController context 'destination for unstaged docker app' do let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: unstaged_app_docker, - route: route_docker, - app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, - process_type: unstaged_process.type, - weight: 55 - ) + create(:route_mapping_model, app: unstaged_app_docker, + route: route_docker, + app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, + process_type: unstaged_process.type, + weight: 55) end it 'uses default HTTP port as presented port' do @@ -227,13 +211,11 @@ module VCAP::CloudController context 'destination for staged docker app without process' do let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app_docker_without_process, - route: route_docker, - app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, - process_type: 'web', - weight: 55 - ) + create(:route_mapping_model, app: app_docker_without_process, + route: route_docker, + app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED, + process_type: 'web', + weight: 55) end it 'uses the port from the execution metadata as presented port' do @@ -243,23 +225,23 @@ module VCAP::CloudController end describe 'validations' do - let(:space) { VCAP::CloudController::Space.make } - let(:route) { VCAP::CloudController::Route.make(space:) } - let(:app_model) { VCAP::CloudController::AppModel.make(space:) } + let(:space) { create(:space) } + let(:route) { create(:route, space:) } + let(:app_model) { create(:app_model, space:) } it 'must define an app_port' do invalid_route_mapping_opts = { app: app_model, route: route, process_type: 'buckeyes', app_port: nil } expect do - RouteMappingModel.make(invalid_route_mapping_opts) + create(:route_mapping_model, invalid_route_mapping_opts) end.to raise_error(Sequel::ValidationFailed, /app_port presence/) end it 'validates uniqueness across app_guid, route_guid, process_type, and app_port' do valid_route_mapping_opts = { app: app_model, route: route, process_type: 'buckeyes', app_port: -1 } - RouteMappingModel.make(valid_route_mapping_opts) + create(:route_mapping_model, valid_route_mapping_opts) expect do - RouteMappingModel.make(valid_route_mapping_opts) + create(:route_mapping_model, valid_route_mapping_opts) end.to raise_error(Sequel::ValidationFailed, /app_guid and route_guid and process_type and app_port unique/) end @@ -267,7 +249,7 @@ module VCAP::CloudController valid_route_mapping_opts = { app: app_model, route: route, process_type: 'something', app_port: 1000, weight: 1000 } expect do - RouteMappingModel.make(valid_route_mapping_opts) + create(:route_mapping_model, valid_route_mapping_opts) end.to raise_error(Sequel::ValidationFailed, /must be between 1 and 100/) end @@ -275,7 +257,7 @@ module VCAP::CloudController valid_route_mapping_opts = { app: app_model, route: route, process_type: 'something', app_port: 1000, weight: nil } expect do - RouteMappingModel.make(valid_route_mapping_opts) + create(:route_mapping_model, valid_route_mapping_opts) end.to change(RouteMappingModel, :count).by(1) end end diff --git a/spec/unit/models/runtime/route_spec.rb b/spec/unit/models/runtime/route_spec.rb index c6554939adc..c3bc353a9c4 100644 --- a/spec/unit/models/runtime/route_spec.rb +++ b/spec/unit/models/runtime/route_spec.rb @@ -13,7 +13,7 @@ module VCAP::CloudController end context 'when the route belongs to a domain with the "http" protocol' do - let!(:domain) { SharedDomain.make } + let!(:domain) { create(:shared_domain) } it 'returns "http"' do route = Route.new(domain:) @@ -22,7 +22,7 @@ module VCAP::CloudController end context 'when the route belongs to a domain with the "tcp" protocol' do - let!(:tcp_domain) { SharedDomain.make(router_group_guid: 'guid') } + let!(:tcp_domain) { create(:shared_domain, router_group_guid: 'guid') } it 'returns "tcp"' do route = Route.new(domain: tcp_domain, port: 6000) @@ -42,7 +42,7 @@ module VCAP::CloudController context 'when the route belongs to a shared domain' do context 'and that domain is a TCP domain' do - let!(:tcp_domain) { SharedDomain.make(router_group_guid: 'guid') } + let!(:tcp_domain) { create(:shared_domain, router_group_guid: 'guid') } context 'and the route has a port and it aint kubes' do let(:route) { Route.new(domain: tcp_domain, port: 6000) } @@ -64,7 +64,7 @@ module VCAP::CloudController end context 'and that domain is not a TCP domain' do - let!(:domain) { SharedDomain.make } + let!(:domain) { create(:shared_domain) } context 'and the route has a port' do let(:route) { Route.new(domain: domain, port: 6000) } @@ -87,8 +87,8 @@ module VCAP::CloudController end context 'when the route belongs to a private domain' do - let(:space) { Space.make } - let!(:private_domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let!(:private_domain) { create(:private_domain, owning_organization: space.organization) } context 'and the route has a port' do let(:route) { Route.new(space: space, domain: private_domain, port: 6000) } @@ -110,43 +110,48 @@ module VCAP::CloudController describe 'Associations' do it { is_expected.to have_associated :domain } - it { is_expected.to have_associated :space, associated_instance: ->(route) { Space.make(organization: route.domain.owning_organization) } } - it { is_expected.to have_associated :route_mappings, associated_instance: ->(route) { RouteMappingModel.make(app: AppModel.make(space: route.space), route: route) } } + it { is_expected.to have_associated :space, associated_instance: ->(route) { create(:space, organization: route.domain.owning_organization) } } + + it { + expect(subject).to have_associated :route_mappings, associated_instance: lambda { |route| + create(:route_mapping_model, app: create(:app_model, space: route.space), route: route) + } + } include_examples 'ignored_unique_constraint_violation_errors', Route.association_reflection(:shared_spaces), Route.db describe 'apps association' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } - let(:route) { Route.make(space:) } + let(:route) { create(:route, space:) } it 'associates apps through route mappings' do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) - expect(route.apps).to contain_exactly(process) + expect(route.refresh.apps).to contain_exactly(process) end it 'does not associate non-web v2 apps' do non_web_process = ProcessModelFactory.make(type: 'other', space: space) - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) - RouteMappingModel.make(app: non_web_process.app, route: route, process_type: non_web_process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: non_web_process.app, route: route, process_type: non_web_process.type) - expect(route.apps).to contain_exactly(process) + expect(route.refresh.apps).to contain_exactly(process) end it 'returns a single app when an app is bound to multiple ports' do - RouteMappingModel.make(app: process.app, route: route, app_port: 8080) - RouteMappingModel.make(app: process.app, route: route, app_port: 9090) + create(:route_mapping_model, app: process.app, route: route, app_port: 8080) + create(:route_mapping_model, app: process.app, route: route, app_port: 9090) - expect(route.apps.length).to eq(1) + expect(route.refresh.apps.length).to eq(1) end end context 'when bound to a service instance' do - let(:route) { Route.make } - let(:service_instance) { ManagedServiceInstance.make(:routing, space: route.space) } - let!(:route_binding) { RouteBinding.make(route:, service_instance:) } + let(:route) { create(:route) } + let(:service_instance) { create(:managed_service_instance, :routing, space: route.space) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } it 'has a service instance' do expect(route.service_instance).to eq service_instance @@ -155,63 +160,64 @@ module VCAP::CloudController context 'changing space' do context 'when the route sharing flag is enabled' do - let!(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: true, error_message: nil) } + let!(:feature_flag) { create(:feature_flag, name: 'route_sharing', enabled: true, error_message: nil) } it 'succeeds with no mapped apps' do - route = Route.make(space: ProcessModelFactory.make.space, domain: SharedDomain.make) + route = create(:route, space: ProcessModelFactory.make.space, domain: create(:shared_domain)) - expect { route.space = Space.make }.not_to raise_error + expect { route.space = create(:space) }.not_to raise_error end it 'succeeds when there are apps mapped to it' do process = ProcessModelFactory.make - route = Route.make(space: process.space, domain: SharedDomain.make) - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + route = create(:route, space: process.space, domain: create(:shared_domain)) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) - expect { route.space = Space.make }.not_to raise_error + expect { route.space = create(:space) }.not_to raise_error end end context 'when the route sharing flag is disabled' do - let!(:feature_flag) { VCAP::CloudController::FeatureFlag.make(name: 'route_sharing', enabled: false, error_message: nil) } + let!(:feature_flag) { create(:feature_flag, name: 'route_sharing', enabled: false, error_message: nil) } it 'succeeds with no mapped apps' do - route = Route.make(space: ProcessModelFactory.make.space, domain: SharedDomain.make) + route = create(:route, space: ProcessModelFactory.make.space, domain: create(:shared_domain)) - expect { route.space = Space.make }.not_to raise_error + expect { route.space = create(:space) }.not_to raise_error end it 'fails when changing the space when there are apps mapped to it' do process = ProcessModelFactory.make - route = Route.make(space: process.space, domain: SharedDomain.make) - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + route = create(:route, space: process.space, domain: create(:shared_domain)) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) + route.refresh - expect { route.space = Space.make }.to raise_error(CloudController::Errors::InvalidAppRelation) + expect { route.space = create(:space) }.to raise_error(CloudController::Errors::InvalidAppRelation) end end context 'with domain' do it 'succeeds if its a shared domain' do - route = Route.make(domain: SharedDomain.make) - expect { route.space = Space.make }.not_to raise_error + route = create(:route, domain: create(:shared_domain)) + expect { route.space = create(:space) }.not_to raise_error end context 'private domain' do - let(:org) { Organization.make } - let(:domain) { PrivateDomain.make(owning_organization: org) } - let(:route) { Route.make(domain: domain, space: Space.make(organization: org)) } + let(:org) { create(:organization) } + let(:domain) { create(:private_domain, owning_organization: org) } + let(:route) { create(:route, domain: domain, space: create(:space, organization: org)) } it 'succeeds if in the same organization' do - expect { route.space = Space.make(organization: org) }.not_to raise_error + expect { route.space = create(:space, organization: org) }.not_to raise_error end context 'with a different organization' do it 'fails' do - expect { route.space = Space.make }.to raise_error(Route::InvalidOrganizationRelation, /Organization cannot use domain/) + expect { route.space = create(:space) }.to raise_error(Route::InvalidOrganizationRelation, /Organization cannot use domain/) end it 'succeeds if the organization shares the domain' do - space = Space.make + space = create(:space) domain.add_shared_organization(space.organization) expect { route.space = space }.not_to raise_error end @@ -221,12 +227,12 @@ module VCAP::CloudController end context 'creating context path routes across spaces' do - let(:org1) { Organization.make(name: 'org1') } - let(:space1a) { Space.make(name: 'space1a', organization: org1) } - let(:space1b) { Space.make(name: 'space1b', organization: org1) } - let(:domain) { PrivateDomain.make(name: 'tld.org', owning_organization: org1) } - let(:org2) { Organization.make(name: 'org2') } - let(:space2) { Space.make(name: 'space2', organization: org2) } + let(:org1) { create(:organization, name: 'org1') } + let(:space1a) { create(:space, name: 'space1a', organization: org1) } + let(:space1b) { create(:space, name: 'space1b', organization: org1) } + let(:domain) { create(:private_domain, name: 'tld.org', owning_organization: org1) } + let(:org2) { create(:organization, name: 'org2') } + let(:space2) { create(:space, name: 'space2', organization: org2) } let(:disable_context_route_sharing) { false } let(:host2) { 'host-' + SecureRandom.uuid } @@ -235,11 +241,11 @@ module VCAP::CloudController end context 'when the route matches host and domain' do - let!(:first_route) { Route.make(host: 'host', domain: domain, space: space1a) } + let!(:first_route) { create(:route, host: 'host', domain: domain, space: space1a) } it 'cannot create the duplicate (no path) route in the same-org space' do expect do - Route.make(host: 'host', domain: domain, space: space1b) + create(:route, host: 'host', domain: domain, space: space1b) end.to raise_error(Sequel::ValidationFailed, /host and domain_id and path unique/) end @@ -248,14 +254,14 @@ module VCAP::CloudController it 'cannot create a pathful route in the same-org space' do expect do - Route.make(host: 'host', domain: domain, space: space1b, path: '/apples/kumquats') + create(:route, host: 'host', domain: domain, space: space1b, path: '/apples/kumquats') end.to raise_error(Sequel::ValidationFailed, /domain_id and host host_and_domain_taken_different_space/) end end context 'when private domain context path route sharing is NOT disabled' do it 'CAN create a pathful route in the same-org space' do - r = Route.make(host: 'host', domain: domain, space: space1b, path: '/apples/kumquats') + r = create(:route, host: 'host', domain: domain, space: space1b, path: '/apples/kumquats') expect(r).to be_valid end end @@ -263,17 +269,17 @@ module VCAP::CloudController context 'when the route does not match host and domain' do it 'can create a no-path route in the same-org space' do - r = Route.make(host: 'host-' + SecureRandom.uuid, domain: domain, space: space1b) + r = create(:route, host: 'host-' + SecureRandom.uuid, domain: domain, space: space1b) expect(r).to be_valid end end context 'the first route does have a path' do - let!(:first_route) { Route.make(host: 'host', domain: domain, space: space1a, path: '/my-path') } + let!(:first_route) { create(:route, host: 'host', domain: domain, space: space1a, path: '/my-path') } context 'when private domain context path route sharing is NOT disabled' do it 'succeeds' do - r = Route.make(host: 'host', domain: domain, space: space1b) + r = create(:route, host: 'host', domain: domain, space: space1b) expect(r).to be_valid end end @@ -283,14 +289,14 @@ module VCAP::CloudController it 'fails' do expect do - Route.make(host: 'host', domain: domain, space: space1b) + create(:route, host: 'host', domain: domain, space: space1b) end.to raise_error(Sequel::ValidationFailed, /domain_id and host host_and_domain_taken_different_space/) end end end context 'when sharing private domains to other orgs' do - let!(:first_route) { Route.make(host: 'host', domain: domain, space: space1a, path: '/mangos') } + let!(:first_route) { create(:route, host: 'host', domain: domain, space: space1a, path: '/mangos') } before do domain.add_shared_organization(org2) @@ -298,7 +304,7 @@ module VCAP::CloudController context 'when private domain context path route sharing is NOT disabled' do it 'succeeds' do - r = Route.make(host: 'host', domain: domain, space: space2, path: '/grapes') + r = create(:route, host: 'host', domain: domain, space: space2, path: '/grapes') expect(r).to be_valid end end @@ -308,7 +314,7 @@ module VCAP::CloudController it 'fails' do expect do - Route.make(host: 'host', domain: domain, space: space2, path: '/grapes') + create(:route, host: 'host', domain: domain, space: space2, path: '/grapes') end.to raise_error(Sequel::ValidationFailed, /domain_id and host host_and_domain_taken_different_space/) end end @@ -318,32 +324,32 @@ module VCAP::CloudController context 'changing domain' do context 'when shared' do it "succeeds if it's the same domain" do - domain = SharedDomain.make - route = Route.make(domain:) + domain = create(:shared_domain) + route = create(:route, domain:) route.domain = route.domain = domain expect { route.save }.not_to raise_error end it "fails if it's different" do - route = Route.make(domain: SharedDomain.make) - route.domain = SharedDomain.make + route = create(:route, domain: create(:shared_domain)) + route.domain = create(:shared_domain) expect(route).not_to be_valid end end context 'when private' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } it 'succeeds if it is the same domain' do - route = Route.make(space:, domain:) + route = create(:route, space:, domain:) route.domain = domain expect { route.save }.not_to raise_error end it 'fails if its a different domain' do - route = Route.make(space:, domain:) - route.domain = PrivateDomain.make(owning_organization: space.organization) + route = create(:route, space:, domain:) + route.domain = create(:private_domain, owning_organization: space.organization) expect(route).not_to be_valid end end @@ -357,10 +363,10 @@ module VCAP::CloudController end it 'removes the associated route mappings' do - route = Route.make - app = AppModel.make(space: route.space) - mapping1 = RouteMappingModel.make(route: route, app: app, process_type: 'thing') - mapping2 = RouteMappingModel.make(route: route, app: app, process_type: 'other') + route = create(:route) + app = create(:app_model, space: route.space) + mapping1 = create(:route_mapping_model, route: route, app: app, process_type: 'thing') + mapping2 = create(:route_mapping_model, route: route, app: app, process_type: 'other') route.destroy @@ -426,7 +432,7 @@ module VCAP::CloudController context 'when the requested route is a system hostname with a system domain' do let(:domain) { Domain.find(name: TestConfig.config[:system_domain]) } - let(:space) { Space.make(organization: domain.owning_organization) } + let(:space) { create(:space, organization: domain.owning_organization) } let(:host) { 'loggregator' } let(:route) { Route.new(domain:, space:, host:) } @@ -437,15 +443,15 @@ module VCAP::CloudController end context 'when a route with the same hostname and domain already exists' do - let(:domain) { SharedDomain.make } - let(:space) { Space.make } + let(:domain) { create(:shared_domain) } + let(:space) { create(:space) } let(:host) { 'example' } context 'with a context path' do let(:path) { '/foo' } before do - Route.make(domain:, space:, host:) + create(:route, domain:, space:, host:) end it 'is valid' do @@ -454,7 +460,7 @@ module VCAP::CloudController end context 'and a user attempts to create the route in another space' do - let(:another_space) { Space.make } + let(:another_space) { create(:space) } it 'is not valid' do route_obj = Route.new(domain: domain, space: another_space, host: host, path: path) @@ -464,11 +470,11 @@ module VCAP::CloudController end context 'and the domain is a private domain' do - let(:domain) { PrivateDomain.make } - let(:space) { Space.make(organization: domain.owning_organization) } + let(:domain) { create(:private_domain) } + let(:space) { create(:space, organization: domain.owning_organization) } context 'and a user attempts to create the route in another space' do - let(:another_space) { Space.make(organization: domain.owning_organization) } + let(:another_space) { create(:space, organization: domain.owning_organization) } it 'is valid' do route_obj = Route.new(domain: domain, space: another_space, host: host, path: path) @@ -480,11 +486,11 @@ module VCAP::CloudController context 'without a context path' do before do - Route.make(domain: domain, space: space, host: host, path: '/bar') + create(:route, domain: domain, space: space, host: host, path: '/bar') end context 'and a user attempts to create the route in another space' do - let(:another_space) { Space.make } + let(:another_space) { create(:space) } it 'is not valid' do route_obj = Route.new(domain: domain, space: another_space, host: host) @@ -496,7 +502,7 @@ module VCAP::CloudController end context 'route ports' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'validates that the port is greater than equal to 0' do route.port = -1 @@ -519,9 +525,9 @@ module VCAP::CloudController end context 'when port is specified' do - let(:domain) { SharedDomain.make(router_group_guid: 'tcp-router-group') } - let(:space_quota_definition) { SpaceQuotaDefinition.make } - let(:space) { Space.make(space_quota_definition: space_quota_definition, organization: space_quota_definition.organization) } + let(:domain) { create(:shared_domain, router_group_guid: 'tcp-router-group') } + let(:space_quota_definition) { create(:space_quota_definition) } + let(:space) { create(:space, space_quota_definition: space_quota_definition, organization: space_quota_definition.organization) } let(:routing_api_client) { double('routing_api_client', router_group:) } let(:router_group) { double('router_group', type: 'tcp', guid: 'router-group-guid') } @@ -531,12 +537,12 @@ module VCAP::CloudController validator = double allow(RouteValidator).to receive(:new).and_return(validator) allow(validator).to receive(:validate) - Route.make(space: space, domain: domain, host: '', port: 1) + create(:route, space: space, domain: domain, host: '', port: 1) end it 'does not validate uniqueness of host' do expect do - Route.make(space: space, port: 10, host: '', domain: domain) + create(:route, space: space, port: 10, host: '', domain: domain) end.not_to raise_error end @@ -550,30 +556,30 @@ module VCAP::CloudController context 'unescaped paths' do it 'validates uniqueness' do - r = Route.make(path: '/a') + r = create(:route, path: '/a') expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: r.path) + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: r.path) end.to raise_error(Sequel::ValidationFailed) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/b') + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/b') end.not_to raise_error end it 'does not allow two blank paths with same host and domain' do - r = Route.make + r = create(:route) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id) + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id) end.to raise_error(Sequel::ValidationFailed) end it 'is case-insensitive' do - r = Route.make(path: '/path') + r = create(:route, path: '/path') expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/PATH') + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/PATH') end.to raise_error(Sequel::ValidationFailed) end end @@ -581,31 +587,31 @@ module VCAP::CloudController context 'escaped paths' do it 'validates uniqueness' do path = '/a%20path' - r = Route.make(path:) + r = create(:route, path:) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: path) + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: path) end.to raise_error(Sequel::ValidationFailed) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/b%20path') + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/b%20path') end.not_to raise_error end it 'allows another route with same host and domain but no path' do path = '/a%20path' - r = Route.make(path:) + r = create(:route, path:) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id) + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id) end.not_to raise_error end it 'allows a route with same host and domain with a path' do - r = Route.make + r = create(:route) expect do - Route.make(host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/a/path') + create(:route, host: r.host, space_guid: r.space_guid, domain_id: r.domain_id, path: '/a/path') end.not_to raise_error end end @@ -614,13 +620,13 @@ module VCAP::CloudController it 'raises exceeds valid length error' do path = '/path' * 100 - expect { Route.make(path:) }.to raise_error(Sequel::ValidationFailed) + expect { create(:route, path:) }.to raise_error(Sequel::ValidationFailed) end end describe 'host' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } before do route.space = space @@ -649,101 +655,83 @@ module VCAP::CloudController it 'does not allow a nil host' do expect do - Route.make(space: space, domain: domain, host: nil) + create(:route, space: space, domain: domain, host: nil) end.to raise_error(Sequel::ValidationFailed) end it 'allows an empty host' do - Route.make( - space: space, - domain: domain, - host: '' - ) + create(:route, space: space, + domain: domain, + host: '') end it 'does not allow a blank host' do expect do - Route.make( - space: space, - domain: domain, - host: ' ' - ) + create(:route, space: space, + domain: domain, + host: ' ') end.to raise_error(Sequel::ValidationFailed) end it 'does not allow a long host' do expect do - Route.make( - space: space, - domain: domain, - host: 'f' * 63 - ) + create(:route, space: space, + domain: domain, + host: 'f' * 63) end.not_to raise_error expect do - Route.make( - space: space, - domain: domain, - host: 'f' * 64 - ) + create(:route, space: space, + domain: domain, + host: 'f' * 64) end.to raise_error(Sequel::ValidationFailed) end it 'does not allow a host which, along with the domain, exceeds the maximum length' do domain_200_chars = "#{'f' * 49}.#{'f' * 49}.#{'f' * 49}.#{'f' * 50}" domain_253_chars = "#{'f' * 49}.#{'f' * 49}.#{'f' * 49}.#{'f' * 49}.#{'f' * 50}.ff" - domain = PrivateDomain.make(owning_organization: space.organization, name: domain_200_chars) - domain_that_cannot_have_a_host = PrivateDomain.make(owning_organization: space.organization, name: domain_253_chars) + domain = create(:private_domain, owning_organization: space.organization, name: domain_200_chars) + domain_that_cannot_have_a_host = create(:private_domain, owning_organization: space.organization, name: domain_253_chars) valid_host = 'f' * 52 invalid_host = 'f' * 53 expect do - Route.make( - space: space, - domain: domain, - host: valid_host - ) + create(:route, space: space, + domain: domain, + host: valid_host) end.not_to raise_error expect do - Route.make( - space: space, - domain: domain_that_cannot_have_a_host, - host: '' - ) + create(:route, space: space, + domain: domain_that_cannot_have_a_host, + host: '') end.not_to raise_error expect do - Route.make( - space: space, - domain: domain, - host: invalid_host - ) + create(:route, space: space, + domain: domain, + host: invalid_host) end.to raise_error(Sequel::ValidationFailed) end context 'shared domains' do it 'does not allow route to match existing domain' do - SharedDomain.make name: 'bar.foo.com' + create(:shared_domain, name: 'bar.foo.com') expect do - Route.make( - space: space, - domain: SharedDomain.make(name: 'foo.com'), - host: 'bar' - ) + create(:route, space: space, + domain: create(:shared_domain, name: 'foo.com'), + host: 'bar') end.to raise_error(Sequel::ValidationFailed, /domain_conflict/) end context 'when the host is missing' do it 'raises an informative error' do - domain = SharedDomain.make name: 'bar.foo.com' + domain = create(:shared_domain, name: 'bar.foo.com') expect do - Route.make( - space: space, - domain: domain, - host: nil - ) + create(:route, space: space, + domain: domain, + host: nil) end.to raise_error(Sequel::ValidationFailed, /host is required for shared-domains/) end end @@ -751,7 +739,7 @@ module VCAP::CloudController end describe 'total allowed routes' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:org_quota) { space.organization.quota_definition } let(:space_quota) { nil } @@ -759,7 +747,7 @@ module VCAP::CloudController space.space_quota_definition = space_quota end - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } subject(:route) { Route.new(space: space, domain: domain, host: 'bar') } @@ -807,8 +795,8 @@ module VCAP::CloudController end context 'for space quotas' do - let(:space_quota) { SpaceQuotaDefinition.make(organization: subject.space.organization) } - let(:tcp_domain) { SharedDomain.make(router_group_guid: 'guid') } + let(:space_quota) { create(:space_quota_definition, organization: subject.space.organization) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: 'guid') } context 'on create' do context 'when not exceeding total allowed routes' do @@ -870,7 +858,7 @@ module VCAP::CloudController end describe 'quota evaluation order' do - let(:space_quota) { SpaceQuotaDefinition.make(organization: subject.space.organization) } + let(:space_quota) { create(:space_quota_definition, organization: subject.space.organization) } before do org_quota.total_routes = 0 @@ -890,11 +878,11 @@ module VCAP::CloudController end describe 'total reserved route ports' do - let(:space_quota) { SpaceQuotaDefinition.make } - let(:space) { Space.make(space_quota_definition: space_quota, organization: space_quota.organization) } + let(:space_quota) { create(:space_quota_definition) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: space_quota.organization) } let(:org_quota) { space.organization.quota_definition } - let(:http_domain) { SharedDomain.make } - let(:tcp_domain) { SharedDomain.make(router_group_guid: 'guid') } + let(:http_domain) { create(:shared_domain) } + let(:tcp_domain) { create(:shared_domain, router_group_guid: 'guid') } let(:validator) { double } let(:http_route) do @@ -917,7 +905,7 @@ module VCAP::CloudController context 'on create' do context 'when the space does not have a space quota' do - let(:space) { Space.make } + let(:space) { create(:space) } before do TestConfig.override(kubernetes: nil) @@ -1056,17 +1044,15 @@ module VCAP::CloudController end describe 'options normalization' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } context 'when hash_balance is provided as a float' do it 'stores hash_balance as a string in the database' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 1.5 } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 1.5 }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1077,12 +1063,10 @@ module VCAP::CloudController context 'when hash_balance is provided as an integer' do it 'stores hash_balance as a string in the database' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 2 } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 2 }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1093,12 +1077,10 @@ module VCAP::CloudController context 'when hash_balance is provided as a string' do it 'keeps hash_balance as a string in the database' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.25' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.25' }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1109,12 +1091,10 @@ module VCAP::CloudController context 'when hash_balance is 0' do it 'stores hash_balance as a string "0" in the database' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 0 } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: 0 }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1125,12 +1105,10 @@ module VCAP::CloudController context 'when options do not include hash_balance' do it 'does not add hash_balance to the options' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'round-robin' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'round-robin' }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1140,12 +1118,10 @@ module VCAP::CloudController context 'when options are nil' do it 'handles nil options gracefully' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: nil - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: nil) route.reload expect(route.options).to be_nil @@ -1154,8 +1130,8 @@ module VCAP::CloudController end describe 'normalize_hash_balance_to_string' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } let(:route) { Route.new(host: 'test', domain: domain, space: space) } context 'when hash_balance is provided as a float' do @@ -1251,17 +1227,15 @@ module VCAP::CloudController end describe 'hash options cleanup for non-hash loadbalancing' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } context 'when creating a route with hash loadbalancing' do it 'keeps hash_header and hash_balance' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1273,12 +1247,10 @@ module VCAP::CloudController context 'when updating a route from hash to round-robin' do it 'removes hash_header and hash_balance' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' }) route.update(options: { loadbalancing: 'round-robin' }) route.reload @@ -1292,12 +1264,10 @@ module VCAP::CloudController context 'when updating a route from hash to least-connection' do it 'removes hash_header and hash_balance' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-Request-ID', hash_balance: '2.5' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-Request-ID', hash_balance: '2.5' }) route.update(options: { loadbalancing: 'least-connection' }) route.reload @@ -1311,12 +1281,10 @@ module VCAP::CloudController context 'when updating a route from round-robin to hash' do it 'keeps hash_header and hash_balance if provided' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'round-robin' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'round-robin' }) route.update(options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' }) route.reload @@ -1330,12 +1298,10 @@ module VCAP::CloudController context 'when removing hash loadbalancing option' do it 'deletes hash_header and hash_balance when present' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'hash', hash_header: 'X-User-ID', hash_balance: '1.5' }) route.update(options: { loadbalancing: nil }) route.reload @@ -1348,12 +1314,10 @@ module VCAP::CloudController context 'when using string keys instead of symbols' do it 'still removes hash options for non-hash loadbalancing' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { 'loadbalancing' => 'round-robin', 'hash_header' => 'X-User-ID', 'hash_balance' => '1.5' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { 'loadbalancing' => 'round-robin', 'hash_header' => 'X-User-ID', 'hash_balance' => '1.5' }) route.reload parsed_options = Oj.load(route.options_without_serialization) @@ -1365,8 +1329,8 @@ module VCAP::CloudController end describe 'route options validation' do - let(:space) { Space.make } - let(:domain) { PrivateDomain.make(owning_organization: space.organization) } + let(:space) { create(:space) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } context 'when loadbalancing is hash' do context 'and hash_header is present' do @@ -1479,12 +1443,10 @@ module VCAP::CloudController context 'when updating an existing route' do context 'changing to hash loadbalancing without hash_header' do it 'is invalid' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'round-robin' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'round-robin' }) route.options = { loadbalancing: 'hash' } @@ -1495,12 +1457,10 @@ module VCAP::CloudController context 'changing to hash loadbalancing with hash_header' do it 'is valid' do - route = Route.make( - host: 'test-route', - domain: domain, - space: space, - options: { loadbalancing: 'round-robin' } - ) + route = create(:route, host: 'test-route', + domain: domain, + space: space, + options: { loadbalancing: 'round-robin' }) route.options = { loadbalancing: 'hash', hash_header: 'X-Request-ID' } @@ -1540,23 +1500,19 @@ module VCAP::CloudController end describe 'instance methods' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:domain) do - PrivateDomain.make( - owning_organization: space.organization - ) + create(:private_domain, owning_organization: space.organization) end describe '#fqdn' do context 'for a non-nil path' do it 'returns the fqdn for the route' do - r = Route.make( - host: 'www', - domain: domain, - space: space, - path: '/path' - ) + r = create(:route, host: 'www', + domain: domain, + space: space, + path: '/path') expect(r.fqdn).to eq("www.#{domain.name}") end end @@ -1564,22 +1520,18 @@ module VCAP::CloudController context 'for a nil path' do context 'for a non-nil host' do it 'returns the fqdn for the route' do - r = Route.make( - host: 'www', - domain: domain, - space: space - ) + r = create(:route, host: 'www', + domain: domain, + space: space) expect(r.fqdn).to eq("www.#{domain.name}") end end context 'for a nil host' do it 'returns the fqdn for the route' do - r = Route.make( - host: '', - domain: domain, - space: space - ) + r = create(:route, host: '', + domain: domain, + space: space) expect(r.fqdn).to eq(domain.name) end end @@ -1588,7 +1540,7 @@ module VCAP::CloudController describe 'route_service_url' do context 'with a route_binding' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:route) { route_binding.route } it 'returns the route_service_url associated with the binding' do @@ -1597,7 +1549,7 @@ module VCAP::CloudController end context 'without a route_binding' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'returns nil' do expect(route.route_service_url).to be_nil @@ -1608,23 +1560,19 @@ module VCAP::CloudController describe '#uri' do context 'for a non-nil path' do it 'returns the fqdn with path' do - r = Route.make( - host: 'www', - domain: domain, - space: space, - path: '/path' - ) + r = create(:route, host: 'www', + domain: domain, + space: space, + path: '/path') expect(r.uri).to eq("www.#{domain.name}/path") end context 'that has a port' do it 'returns the fqdn with the path and port' do - r = Route.make( - host: 'www', - domain: domain, - space: space, - path: '/path' - ) + r = create(:route, host: 'www', + domain: domain, + space: space, + path: '/path') r.port = 1041 expect(r.uri).to eq("www.#{domain.name}/path:1041") end @@ -1633,11 +1581,9 @@ module VCAP::CloudController context 'for a nil path' do it 'returns the fqdn' do - r = Route.make( - host: 'www', - domain: domain, - space: space - ) + r = create(:route, host: 'www', + domain: domain, + space: space) expect(r.uri).to eq("www.#{domain.name}") end end @@ -1645,11 +1591,9 @@ module VCAP::CloudController describe '#as_summary_json' do it 'returns a hash containing the route id, host, and domain details' do - r = Route.make( - host: 'www', - domain: domain, - space: space - ) + r = create(:route, host: 'www', + domain: domain, + space: space) expect(r.as_summary_json).to eq( { guid: r.guid, @@ -1666,7 +1610,7 @@ module VCAP::CloudController end describe '#in_suspended_org?' do - let(:space) { Space.make } + let(:space) { create(:space) } subject(:route) { Route.new(space:) } @@ -1689,40 +1633,38 @@ module VCAP::CloudController end describe 'relations' do - let(:org) { Organization.make } - let(:space_a) { Space.make(organization: org) } - let(:domain_a) { PrivateDomain.make(owning_organization: org) } + let(:org) { create(:organization) } + let(:space_a) { create(:space, organization: org) } + let(:domain_a) { create(:private_domain, owning_organization: org) } - let(:space_b) { Space.make(organization: org) } - let(:domain_b) { PrivateDomain.make(owning_organization: org) } + let(:space_b) { create(:space, organization: org) } + let(:domain_b) { create(:private_domain, owning_organization: org) } it 'does not allow creation of a empty host on a shared domain' do - shared_domain = SharedDomain.make + shared_domain = create(:shared_domain) expect do - Route.make( - host: '', - space: space_a, - domain: shared_domain - ) + create(:route, host: '', + space: space_a, + domain: shared_domain) end.to raise_error Sequel::ValidationFailed end end describe '#destroy' do - let(:route) { Route.make } + let(:route) { create(:route) } it 'marks the apps routes as changed and sends an update to diego' do fake_route_handler_app1 = instance_double(ProcessRouteHandler) fake_route_handler_app2 = instance_double(ProcessRouteHandler) - space = Space.make + space = create(:space) process1 = ProcessModelFactory.make(space: space, state: 'STARTED', diego: false) process2 = ProcessModelFactory.make(space: space, state: 'STARTED', diego: false) - route = Route.make(space:) - RouteMappingModel.make(app: process1.app, route: route, process_type: process1.type) - RouteMappingModel.make(app: process2.app, route: route, process_type: process2.type) + route = create(:route, space:) + create(:route_mapping_model, app: process1.app, route: route, process_type: process1.type) + create(:route_mapping_model, app: process2.app, route: route, process_type: process2.type) route.reload process1 = route.apps[0] @@ -1738,12 +1680,12 @@ module VCAP::CloudController end context 'with route bindings' do - let(:route_binding) { RouteBinding.make } + let(:route_binding) { create(:route_binding) } let(:route) { route_binding.route } let(:process) { ProcessModelFactory.make(space: route.space, diego: true) } before do - RouteMappingModel.make(app: process.app, route: route, process_type: process.type) + create(:route_mapping_model, app: process.app, route: route, process_type: process.type) stub_unbind(route_binding) end @@ -1781,7 +1723,7 @@ module VCAP::CloudController end it 'does not raise a Sequel::NoExistingObject error' do - route_binding = RouteBinding.make + route_binding = create(:route_binding) route = route_binding.route stub_unbind(route_binding) expect { route.destroy }.not_to raise_error @@ -1791,13 +1733,13 @@ module VCAP::CloudController end def assert_valid_path(path) - r = Route.make(path:) + r = create(:route, path:) expect(r).to be_valid end def assert_invalid_path(path) expect do - Route.make(path:) + create(:route, path:) end.to raise_error(Sequel::ValidationFailed) end @@ -1876,9 +1818,9 @@ def assert_invalid_path(path) ) end - let(:internal_domain) { SharedDomain.make(name: 'apps.internal', internal: true) } - let(:internal_route) { Route.make(host: 'meow', domain: internal_domain) } - let(:external_private_route) { Route.make } + let(:internal_domain) { create(:shared_domain, name: 'apps.internal', internal: true) } + let(:internal_route) { create(:route, host: 'meow', domain: internal_domain) } + let(:external_private_route) { create(:route) } context 'when the route has an internal domain' do it 'is true' do @@ -1894,7 +1836,7 @@ def assert_invalid_path(path) end describe '#wildcard_host?' do - let!(:route) { Route.make(host:) } + let!(:route) { create(:route, host:) } context 'when the host is *' do let(:host) { '*' } @@ -1914,11 +1856,11 @@ def assert_invalid_path(path) end describe 'app spaces and route shared spaces' do - let!(:domain) { SharedDomain.make } + let!(:domain) { create(:shared_domain) } context 'when app and route space not shared' do - let!(:app) { AppModel.make } - let!(:route) { Route.make(host: 'potato', domain: domain, path: '/some-path') } + let!(:app) { create(:app_model) } + let!(:route) { create(:route, host: 'potato', domain: domain, path: '/some-path') } it 'no space match and not shared and returns false' do expect(route.available_in_space?(app.space)).to be(false) @@ -1931,10 +1873,10 @@ def assert_invalid_path(path) end context 'when app and route space shared' do - let!(:app) { AppModel.make } + let!(:app) { create(:app_model) } let!(:route_share) { RouteShare.new } let(:user_audit_info) { instance_double(UserAuditInfo).as_null_object } - let!(:route) { Route.make(host: 'potato', domain: domain, path: '/some-path') } + let!(:route) { create(:route, host: 'potato', domain: domain, path: '/some-path') } let!(:shared_route) { route_share.create(route, [app.space], user_audit_info) } it 'shared space match and returns true' do diff --git a/spec/unit/models/runtime/security_group_spec.rb b/spec/unit/models/runtime/security_group_spec.rb index 729a517c633..b1ffaa9884d 100644 --- a/spec/unit/models/runtime/security_group_spec.rb +++ b/spec/unit/models/runtime/security_group_spec.rb @@ -416,8 +416,8 @@ def build_all_rule(attrs={}) it { is_expected.to have_associated :spaces } it 'can be delete when it has associated spaces' do - security_group = SecurityGroup.make - security_group.add_space(Space.make) + security_group = create(:security_group) + security_group.add_space(create(:space)) expect { security_group.destroy }.not_to raise_error end @@ -426,11 +426,11 @@ def build_all_rule(attrs={}) end describe 'staging_spaces' do - it { is_expected.to have_associated :staging_spaces, associated_instance: ->(_) { Space.make } } + it { is_expected.to have_associated :staging_spaces, associated_instance: ->(_) { create(:space) } } it 'can be delete when it has associated staging_spaces' do - security_group = SecurityGroup.make - security_group.add_staging_space(Space.make) + security_group = create(:security_group) + security_group.add_staging_space(create(:space)) expect { security_group.destroy }.not_to raise_error end @@ -443,7 +443,7 @@ def build_all_rule(attrs={}) it { is_expected.to validate_presence :name } context 'name' do - subject(:sec_group) { SecurityGroup.make } + subject(:sec_group) { create(:security_group) } it 'allows standard ascii characters' do sec_group.name = "A -_- word 2!?()'\"&+." @@ -972,14 +972,14 @@ def build_all_rule(attrs={}) describe 'security_group_model #around_save' do it 'raises validation error on unique constraint violation for security group' do - sg = SecurityGroup.make(name: 'sec') + sg = create(:security_group, name: 'sec') expect do - SecurityGroup.make(name: sg.name) + create(:security_group, name: sg.name) end.to raise_error(Sequel::ValidationFailed) { |error| expect(error.message).to match(/unique/) } end it 'raises the original error on other unique constraint violations' do - sg = SecurityGroup.make(name: 'sec1') + sg = create(:security_group, name: 'sec1') # Unlike other models, security_groups.guid does not have a unique index, # so we use the primary key (id) to trigger a UniqueConstraintViolation. @@ -994,9 +994,9 @@ def build_all_rule(attrs={}) end describe '.user_visibility_filter' do - let(:security_group) { SecurityGroup.make } - let(:space) { Space.make } - let(:user) { User.make } + let(:security_group) { create(:security_group) } + let(:space) { create(:space) } + let(:user) { create(:user) } subject(:filtered_security_groups) do SecurityGroup.where(SecurityGroup.user_visibility_filter(user)) diff --git a/spec/unit/models/runtime/shared_domain_spec.rb b/spec/unit/models/runtime/shared_domain_spec.rb index 6b587cfb922..f50a62662f3 100644 --- a/spec/unit/models/runtime/shared_domain_spec.rb +++ b/spec/unit/models/runtime/shared_domain_spec.rb @@ -2,7 +2,7 @@ module VCAP::CloudController RSpec.describe SharedDomain, type: :model do - subject { SharedDomain.make name: 'test.example.com', router_group_guid: router_group_guid, router_group_type: 'tcp' } + subject { create(:shared_domain, name: 'test.example.com', router_group_guid: router_group_guid, router_group_type: 'tcp') } let(:router_group_guid) { 'my-router-group-guid' } @@ -30,7 +30,7 @@ module VCAP::CloudController context 'when the name is foo.com and bar.foo.com is a shared domain' do before do - SharedDomain.make name: 'bar.foo.com' + create(:shared_domain, name: 'bar.foo.com') subject.name = 'foo.com' end @@ -38,40 +38,40 @@ module VCAP::CloudController end it 'allows shared foo.com when private bar.foo.com exists' do - PrivateDomain.make name: 'bar.foo.com' - expect { SharedDomain.make name: 'foo.com' }.not_to raise_error + create(:private_domain, name: 'bar.foo.com') + expect { create(:shared_domain, name: 'foo.com') }.not_to raise_error end it 'allows shared foo.com when shared bar.foo.com exists' do - SharedDomain.make name: 'bar.foo.com' - expect { SharedDomain.make name: 'foo.com' }.not_to raise_error + create(:shared_domain, name: 'bar.foo.com') + expect { create(:shared_domain, name: 'foo.com') }.not_to raise_error end it 'allows shared bar.foo.com a when shared baz.bar.foo.com and foo.com exist' do - SharedDomain.make name: 'baz.bar.foo.com' - SharedDomain.make name: 'foo.com' - expect { SharedDomain.make name: 'bar.foo.com' }.not_to raise_error + create(:shared_domain, name: 'baz.bar.foo.com') + create(:shared_domain, name: 'foo.com') + expect { create(:shared_domain, name: 'bar.foo.com') }.not_to raise_error end it 'allows shared bar.foo.com a when private baz.bar.foo.com and shared foo.com exist' do - PrivateDomain.make name: 'baz.bar.foo.com' - SharedDomain.make name: 'foo.com' - expect { SharedDomain.make name: 'bar.foo.com' }.not_to raise_error + create(:private_domain, name: 'baz.bar.foo.com') + create(:shared_domain, name: 'foo.com') + expect { create(:shared_domain, name: 'bar.foo.com') }.not_to raise_error end it 'denies shared bar.foo.com when private foo.com exists' do - PrivateDomain.make name: 'foo.com' - expect { SharedDomain.make name: 'bar.foo.com' }.to raise_error(Sequel::ValidationFailed, - %(The domain name "bar.foo.com" cannot be created because "foo.com" is already reserved by another domain)) + create(:private_domain, name: 'foo.com') + expected_msg = %(The domain name "bar.foo.com" cannot be created because "foo.com" is already reserved by another domain) + expect { create(:shared_domain, name: 'bar.foo.com') }.to raise_error(Sequel::ValidationFailed, expected_msg) end it 'denies shared foo.com when private foo.com exists' do - PrivateDomain.make name: 'foo.com' - expect { SharedDomain.make name: 'foo.com' }.to raise_error(Sequel::ValidationFailed, /name unique/) + create(:private_domain, name: 'foo.com') + expect { create(:shared_domain, name: 'foo.com') }.to raise_error(Sequel::ValidationFailed, /name unique/) end context 'when the domain is internal' do - subject { SharedDomain.make(name: 'test.example.com', internal: true) } + subject { create(:shared_domain, name: 'test.example.com', internal: true) } it { is_expected.to be_valid } @@ -97,7 +97,7 @@ module VCAP::CloudController end it 'destroys the routes' do - route = Route.make(domain: subject) + route = create(:route, domain: subject) expect do subject.destroy @@ -109,7 +109,7 @@ module VCAP::CloudController let(:router_group_type) { 'http' } let(:ra_client) { instance_double(VCAP::CloudController::RoutingApi::Client, router_group: rg) } let(:rg) { instance_double(VCAP::CloudController::RoutingApi::RouterGroup, type: router_group_type) } - let(:shared_domain) { SharedDomain.make(name: 'tcp.com', router_group_guid: '123') } + let(:shared_domain) { create(:shared_domain, name: 'tcp.com', router_group_guid: '123') } before do allow_any_instance_of(CloudController::DependencyLocator).to receive(:routing_api_client).and_return(ra_client) @@ -142,7 +142,7 @@ module VCAP::CloudController end context 'when there is no router group guid' do - let(:shared_domain) { SharedDomain.make(name: 'tcp.com') } + let(:shared_domain) { create(:shared_domain, name: 'tcp.com') } it 'returns false' do expect(shared_domain.tcp?).to be(false) @@ -153,7 +153,7 @@ module VCAP::CloudController let(:router_group_type) { 'http' } let(:ra_client) { instance_double(VCAP::CloudController::RoutingApi::Client, router_group: nil) } let(:rg) { instance_double(VCAP::CloudController::RoutingApi::RouterGroup, type: router_group_type) } - let(:shared_domain) { SharedDomain.make(name: 'tcp.com', router_group_guid: '123') } + let(:shared_domain) { create(:shared_domain, name: 'tcp.com', router_group_guid: '123') } it 'returns false' do expect(shared_domain.tcp?).to be(false) @@ -210,7 +210,7 @@ module VCAP::CloudController context 'and it already exists' do before do - SharedDomain.make(router_group_guid: '123', name: 'wee.example.com') + create(:shared_domain, router_group_guid: '123', name: 'wee.example.com') end it 'returns the found domain' do @@ -234,7 +234,7 @@ module VCAP::CloudController context 'when the domain already exists' do let(:is_internal) { false } let(:domain_name) { 'existing.example.com' } - let!(:existing_domain) { SharedDomain.make(name: domain_name, internal: is_internal) } + let!(:existing_domain) { create(:shared_domain, name: domain_name, internal: is_internal) } let(:attrs) { { name: domain_name } } let(:fake_logger) { instance_double(Steno::Logger, info: nil, warn: nil) } diff --git a/spec/unit/models/runtime/sidecar_model_spec.rb b/spec/unit/models/runtime/sidecar_model_spec.rb index 6d759a8cd86..cffdce0a43a 100644 --- a/spec/unit/models/runtime/sidecar_model_spec.rb +++ b/spec/unit/models/runtime/sidecar_model_spec.rb @@ -2,12 +2,12 @@ module VCAP::CloudController RSpec.describe SidecarModel do - let(:sidecar) { SidecarModel.make } + let(:sidecar) { create(:sidecar_model) } describe '#process_types' do it 'returns the names of associated sidecar_process_types' do - SidecarProcessTypeModel.make(type: 'web', sidecar: sidecar) - SidecarProcessTypeModel.make(type: 'other worker', sidecar: sidecar) + create(:sidecar_process_type_model, type: 'web', sidecar: sidecar) + create(:sidecar_process_type_model, type: 'other worker', sidecar: sidecar) expect(sidecar.process_types).to eq ['web', 'other worker'].sort end @@ -19,8 +19,8 @@ module VCAP::CloudController end describe 'sidecar model #around_save' do - let(:app_model) { AppModel.make } - let!(:sidecar) { SidecarModel.make(app_guid: app_model.guid, name: 'sidecar1', command: 'exec') } + let(:app_model) { create(:app_model) } + let!(:sidecar) { create(:sidecar_model, app_guid: app_model.guid, name: 'sidecar1', command: 'exec') } it 'raises validation error on unique constraint violation for sidecar' do expect do @@ -36,9 +36,9 @@ module VCAP::CloudController end describe '#to_hash' do - let(:sidecar) { SidecarModel.make(name: 'sleepy', command: 'sleep forever') } - let!(:worker_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar, type: 'web') } - let!(:web_process_type) { SidecarProcessTypeModel.make(sidecar: sidecar, type: 'worker') } + let(:sidecar) { create(:sidecar_model, name: 'sleepy', command: 'sleep forever') } + let!(:worker_process_type) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'web') } + let!(:web_process_type) { create(:sidecar_process_type_model, sidecar: sidecar, type: 'worker') } it 'returns a hash of attributes' do expect(sidecar.to_hash).to eq({ @@ -50,8 +50,8 @@ module VCAP::CloudController end describe 'sidecar_process_types: #around_save' do - let(:sidecar) { SidecarModel.make } - let(:app) { AppModel.make } + let(:sidecar) { create(:sidecar_model) } + let(:app) { create(:app_model) } it 'raises validation error on unique constraint violation for sidecar_process_types' do SidecarProcessTypeModel.create(sidecar: sidecar, type: 'web', app_guid: app.guid, guid: SecureRandom.uuid) diff --git a/spec/unit/models/runtime/space_auditor_spec.rb b/spec/unit/models/runtime/space_auditor_spec.rb index 1383c8ae302..f8a271b0b07 100644 --- a/spec/unit/models/runtime/space_auditor_spec.rb +++ b/spec/unit/models/runtime/space_auditor_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe SpaceAuditor, type: :model do - let(:space) { Space.make } - let(:user) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate space_id and user_id combination' do diff --git a/spec/unit/models/runtime/space_developer_spec.rb b/spec/unit/models/runtime/space_developer_spec.rb index 97c04e82215..e8292dc9c2b 100644 --- a/spec/unit/models/runtime/space_developer_spec.rb +++ b/spec/unit/models/runtime/space_developer_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe SpaceDeveloper, type: :model do - let(:space) { Space.make } - let(:user) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate space_id and user_id combination' do diff --git a/spec/unit/models/runtime/space_label_model_spec.rb b/spec/unit/models/runtime/space_label_model_spec.rb index 70917d4a8f0..3d4376d296d 100644 --- a/spec/unit/models/runtime/space_label_model_spec.rb +++ b/spec/unit/models/runtime/space_label_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - space = Space.make(name: 'dora_space') - SpaceLabelModel.make(resource_guid: space.guid, key_name: 'release', value: 'stable') + space = create(:space, name: 'dora_space') + create(:space_label_model, resource_guid: space.guid, key_name: 'release', value: 'stable') expect(SpaceLabelModel.find(key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/space_manager_spec.rb b/spec/unit/models/runtime/space_manager_spec.rb index 5d832f2c576..407639999c8 100644 --- a/spec/unit/models/runtime/space_manager_spec.rb +++ b/spec/unit/models/runtime/space_manager_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe SpaceManager, type: :model do - let(:space) { Space.make } - let(:user) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate space_id and user_id combination' do diff --git a/spec/unit/models/runtime/space_quota_definition_spec.rb b/spec/unit/models/runtime/space_quota_definition_spec.rb index e248390e660..8b1a098db3c 100644 --- a/spec/unit/models/runtime/space_quota_definition_spec.rb +++ b/spec/unit/models/runtime/space_quota_definition_spec.rb @@ -2,26 +2,26 @@ module VCAP::CloudController RSpec.describe SpaceQuotaDefinition, type: :model do - let(:space_quota_definition) { SpaceQuotaDefinition.make } + let(:space_quota_definition) { create(:space_quota_definition) } it { is_expected.to have_timestamp_columns } describe 'Associations' do it { is_expected.to have_associated :organization, associated_instance: ->(space_quota) { space_quota.organization } } - it { is_expected.to have_associated :spaces, associated_instance: ->(space_quota) { Space.make(organization: space_quota.organization) } } + it { is_expected.to have_associated :spaces, associated_instance: ->(space_quota) { create(:space, organization: space_quota.organization) } } context 'organization' do it 'fails when changing' do - expect { SpaceQuotaDefinition.make.organization = Organization.make }.to raise_error(CloudController::Errors::ApiError, /Cannot change organization/) + expect { create(:space_quota_definition).organization = create(:organization) }.to raise_error(CloudController::Errors::ApiError, /Cannot change organization/) end end end describe 'uniqueness' do it 'enforces uniqueness of name within an organization' do - existing_quota = SpaceQuotaDefinition.make + existing_quota = create(:space_quota_definition) expect do - SpaceQuotaDefinition.make(name: existing_quota.name, organization: existing_quota.organization) + create(:space_quota_definition, name: existing_quota.name, organization: existing_quota.organization) end.to raise_error(Sequel::ValidationFailed, /unique/) end end @@ -195,7 +195,7 @@ module VCAP::CloudController describe '#destroy' do it 'nullifies space_quota_definition on space' do - space = Space.make(organization: space_quota_definition.organization) + space = create(:space, organization: space_quota_definition.organization) space.space_quota_definition = space_quota_definition space.save expect { space_quota_definition.destroy }.to change { space.reload.space_quota_definition }.from(space_quota_definition).to(nil) diff --git a/spec/unit/models/runtime/space_reserved_route_ports_spec.rb b/spec/unit/models/runtime/space_reserved_route_ports_spec.rb index 9033270c4f1..bee015dc047 100644 --- a/spec/unit/models/runtime/space_reserved_route_ports_spec.rb +++ b/spec/unit/models/runtime/space_reserved_route_ports_spec.rb @@ -2,9 +2,9 @@ module VCAP::CloudController RSpec.describe SpaceReservedRoutePorts do - let(:organization) { Organization.make } - let(:space_quota) { SpaceQuotaDefinition.make(organization:) } - let(:space) { Space.make(organization: organization, space_quota_definition: space_quota) } + let(:organization) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, organization:) } + let(:space) { create(:space, organization: organization, space_quota_definition: space_quota) } subject(:space_routes) { SpaceReservedRoutePorts.new(space) } @@ -25,11 +25,11 @@ module VCAP::CloudController end before do - domain = SharedDomain.make(router_group_guid: '123') - Route.make(host: '', space: space, domain: domain, port: 1234) - Route.make(host: '', space: space, domain: domain, port: 3455) - Route.make(host: '', space: space, domain: domain, port: 4444) - Route.make(space:) + domain = create(:shared_domain, router_group_guid: '123') + create(:route, host: '', space: space, domain: domain, port: 1234) + create(:route, host: '', space: space, domain: domain, port: 3455) + create(:route, host: '', space: space, domain: domain, port: 4444) + create(:route, space:) end it 'has return the number of reserved ports' do diff --git a/spec/unit/models/runtime/space_routes_spec.rb b/spec/unit/models/runtime/space_routes_spec.rb index 541875d2960..e4f3b24be0f 100644 --- a/spec/unit/models/runtime/space_routes_spec.rb +++ b/spec/unit/models/runtime/space_routes_spec.rb @@ -3,7 +3,7 @@ RSpec.describe SpaceRoutes do subject { SpaceRoutes.new(space) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } describe '#count' do context 'when there are no routes' do @@ -11,13 +11,13 @@ end context 'when there are multiple routes' do - before { 2.times { VCAP::CloudController::Route.make(space:) } } + before { 2.times { create(:route, space:) } } its(:count) { is_expected.to eq 2 } end context 'whyen there is a route belonging to different space' do - before { VCAP::CloudController::Route.make(space: VCAP::CloudController::Space.make) } + before { create(:route, space: create(:space)) } its(:count) { is_expected.to eq 0 } end diff --git a/spec/unit/models/runtime/space_spec.rb b/spec/unit/models/runtime/space_spec.rb index c22df7313aa..345c4e39968 100644 --- a/spec/unit/models/runtime/space_spec.rb +++ b/spec/unit/models/runtime/space_spec.rb @@ -6,7 +6,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of name within an organization' do - existing_space = Space.make + existing_space = create(:space) expect do Space.create(name: existing_space.name, organization: existing_space.organization) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -19,7 +19,7 @@ module VCAP::CloudController it { is_expected.to strip_whitespace :name } context 'name' do - subject(:space) { Space.make } + subject(:space) { create(:space) } it 'allows standard ascii character' do space.name = "A -_- word 2!?()'\"&+." @@ -75,7 +75,7 @@ module VCAP::CloudController context 'organization' do it 'fails when changing' do - expect { Space.make.organization = Organization.make }.to raise_error(CloudController::Errors::ApiError, /Cannot change organization/) + expect { create(:space).organization = create(:organization) }.to raise_error(CloudController::Errors::ApiError, /Cannot change organization/) end end end @@ -85,18 +85,23 @@ module VCAP::CloudController it { is_expected.to have_associated :events } it { is_expected.to have_associated :service_instances, class: UserProvidedServiceInstance } it { is_expected.to have_associated :managed_service_instances } - it { is_expected.to have_associated :routes, associated_instance: ->(space) { Route.make(space:) } } + it { is_expected.to have_associated :routes, associated_instance: ->(space) { create(:route, space:) } } it { is_expected.to have_associated :security_groups } it { is_expected.to have_associated :default_users, class: User } it { is_expected.to have_associated :domains, class: SharedDomain } - it { is_expected.to have_associated :space_quota_definition, associated_instance: ->(space) { SpaceQuotaDefinition.make(organization: space.organization) } } - it { is_expected.to have_associated :service_instances_shared_from_other_spaces, associated_instance: ->(_space) { ManagedServiceInstance.make(space: Space.make) } } + it { is_expected.to have_associated :space_quota_definition, associated_instance: ->(space) { create(:space_quota_definition, organization: space.organization) } } + + it { + expect(subject).to have_associated :service_instances_shared_from_other_spaces, associated_instance: lambda { |_space| + create(:managed_service_instance, space: create(:space)) + } + } describe 'space_quota_definition' do - subject(:space) { Space.make } + subject(:space) { create(:space) } it 'fails when the space quota is from another organization' do - new_quota = SpaceQuotaDefinition.make + new_quota = create(:space_quota_definition) space.space_quota_definition = new_quota expect { space.save }.to raise_error(Sequel::ValidationFailed) end @@ -107,15 +112,15 @@ module VCAP::CloudController end describe 'service_instances_shared_from_other_spaces' do - subject(:space) { Space.make } + subject(:space) { create(:space) } it 'is empty by default' do expect(space.service_instances_shared_from_other_spaces).to be_empty end it 'includes the services shared from other spaces' do - foreign_space = Space.make - foreign_service = ManagedServiceInstance.make(space: foreign_space) + foreign_space = create(:space) + foreign_service = create(:managed_service_instance, space: foreign_space) space.add_service_instances_shared_from_other_space(foreign_service) @@ -124,13 +129,13 @@ module VCAP::CloudController end describe 'dataset managed_service_instances' do - let(:space) { Space.make } - let(:other_space) { Space.make } + let(:space) { create(:space) } + let(:other_space) { create(:space) } it 'includes only managed instances from the same space' do - mine = ManagedServiceInstance.make(space:) - other = ManagedServiceInstance.make(space: other_space) - upsi = UserProvidedServiceInstance.make(space:) + mine = create(:managed_service_instance, space:) + other = create(:managed_service_instance, space: other_space) + upsi = create(:user_provided_service_instance, space:) expect(space.managed_service_instances).to include(mine) expect(space.managed_service_instances).not_to include(other) @@ -139,12 +144,12 @@ module VCAP::CloudController end describe 'domains' do - subject(:space) { Space.make(organization:) } - let(:organization) { Organization.make } + subject(:space) { create(:space, organization:) } + let(:organization) { create(:organization) } context 'listing domains' do before do - PrivateDomain.make(owning_organization: space.organization) + create(:private_domain, owning_organization: space.organization) end it "lists the owning organization's domains and shared domains" do @@ -154,23 +159,23 @@ module VCAP::CloudController context 'adding domains' do it 'does not add the domain to the space if it is a shared domain' do - shared_domain = SharedDomain.make + shared_domain = create(:shared_domain) expect { space.add_domain(shared_domain) }.not_to(change(space, :domains)) end it "does nothing if the private domain already belongs to the space's org" do - org = Organization.make - private_domain = PrivateDomain.make(owning_organization: org) - space = Space.make(organization: org) + org = create(:organization) + private_domain = create(:private_domain, owning_organization: org) + space = create(:space, organization: org) expect { space.add_domain(private_domain) }.not_to(change { space.domains }) end it 'reports an error if the private domain belongs to another org' do - space_org = Organization.make - space = Space.make(organization: space_org) + space_org = create(:organization) + space = create(:space, organization: space_org) - domain_org = Organization.make - private_domain = PrivateDomain.make(owning_organization: domain_org) + domain_org = create(:organization) + private_domain = create(:private_domain, owning_organization: domain_org) expect { space.add_domain(private_domain) }.to raise_error(Domain::UnauthorizedAccessToPrivateDomain) end end @@ -180,12 +185,12 @@ module VCAP::CloudController before { SharedDomain.dataset.destroy } it 'is able to eager load domains' do - space = Space.make + space = create(:space) org = space.organization - private_domain1 = PrivateDomain.make(owning_organization: org) - private_domain2 = PrivateDomain.make(owning_organization: org) - shared_domain = SharedDomain.make + private_domain1 = create(:private_domain, owning_organization: org) + private_domain2 = create(:private_domain, owning_organization: org) + shared_domain = create(:shared_domain) expect do @eager_loaded_space = Space.eager(:domains).where(id: space.id).all.first @@ -201,16 +206,16 @@ module VCAP::CloudController end it 'has correct domains for each space' do - space1 = Space.make - space2 = Space.make + space1 = create(:space) + space2 = create(:space) org1 = space1.organization org2 = space2.organization - private_domain1 = PrivateDomain.make(owning_organization: org1) - private_domain2 = PrivateDomain.make(owning_organization: org2) + private_domain1 = create(:private_domain, owning_organization: org1) + private_domain2 = create(:private_domain, owning_organization: org2) - shared_domain = SharedDomain.make + shared_domain = create(:shared_domain) expect do @eager_loaded_spaces = Space.eager(:domains).where(id: [space1.id, space2.id]).limit(2).all @@ -226,11 +231,11 @@ module VCAP::CloudController end it 'passes in dataset to be loaded to eager_block option' do - space = Space.make + space = create(:space) org = space.organization - private_domain1 = PrivateDomain.make(owning_organization: org) - PrivateDomain.make(owning_organization: org) + private_domain1 = create(:private_domain, owning_organization: org) + create(:private_domain, owning_organization: org) eager_block = proc { |ds| ds.where(id: private_domain1.id) } @@ -242,14 +247,14 @@ module VCAP::CloudController end it 'allow nested eager_load' do - space = Space.make + space = create(:space) org = space.organization - domain1 = PrivateDomain.make(owning_organization: org) - domain2 = PrivateDomain.make(owning_organization: org) + domain1 = create(:private_domain, owning_organization: org) + domain2 = create(:private_domain, owning_organization: org) - route1 = Route.make(domain: domain1, space: space) - route2 = Route.make(domain: domain2, space: space) + route1 = create(:route, domain: domain1, space: space) + route2 = create(:route, domain: domain2, space: space) expect do @eager_loaded_space = Space.eager(domains: :routes).where(id: space.id).all.first @@ -263,11 +268,11 @@ module VCAP::CloudController end describe 'security_groups' do - let!(:associated_sg) { SecurityGroup.make } - let!(:unassociated_sg) { SecurityGroup.make } - let!(:default_sg) { SecurityGroup.make(running_default: true) } - let!(:another_default_sg) { SecurityGroup.make(running_default: true) } - let!(:space) { Space.make(security_group_guids: [associated_sg.guid, default_sg.guid]) } + let!(:associated_sg) { create(:security_group) } + let!(:unassociated_sg) { create(:security_group) } + let!(:default_sg) { create(:security_group, running_default: true) } + let!(:another_default_sg) { create(:security_group, running_default: true) } + let!(:space) { create(:space, security_group_guids: [associated_sg.guid, default_sg.guid]) } it 'returns security groups associated with the space, and the defaults' do expect(space.security_groups).to contain_exactly(associated_sg, default_sg, another_default_sg) @@ -284,8 +289,8 @@ module VCAP::CloudController end context 'when there are multiple spaces' do - let!(:another_space) { Space.make(security_group_guids: [associated_sg.guid, default_sg.guid]) } - let!(:yet_another_space) { Space.make(security_group_guids: [associated_sg.guid, another_default_sg.guid]) } + let!(:another_space) { create(:space, security_group_guids: [associated_sg.guid, default_sg.guid]) } + let!(:yet_another_space) { create(:space, security_group_guids: [associated_sg.guid, another_default_sg.guid]) } it 'returns booleans for the running_default property' do expect(space.security_groups.first.running_default).to be_in [true, false] @@ -298,11 +303,11 @@ module VCAP::CloudController end describe 'staging_security_groups' do - let!(:associated_sg) { SecurityGroup.make } - let!(:unassociated_sg) { SecurityGroup.make } - let!(:default_sg) { SecurityGroup.make(staging_default: true) } - let!(:another_default_sg) { SecurityGroup.make(staging_default: true) } - let!(:space) { Space.make(staging_security_group_guids: [associated_sg.guid, default_sg.guid]) } + let!(:associated_sg) { create(:security_group) } + let!(:unassociated_sg) { create(:security_group) } + let!(:default_sg) { create(:security_group, staging_default: true) } + let!(:another_default_sg) { create(:security_group, staging_default: true) } + let!(:space) { create(:space, staging_security_group_guids: [associated_sg.guid, default_sg.guid]) } it 'returns security groups associated with the space, and the defaults' do expect(space.staging_security_groups).to contain_exactly(associated_sg, default_sg, another_default_sg) @@ -319,8 +324,8 @@ module VCAP::CloudController end context 'when there are multiple spaces' do - let!(:another_space) { Space.make(staging_security_group_guids: [associated_sg.guid, default_sg.guid]) } - let!(:yet_another_space) { Space.make(staging_security_group_guids: [associated_sg.guid, another_default_sg.guid]) } + let!(:another_space) { create(:space, staging_security_group_guids: [associated_sg.guid, default_sg.guid]) } + let!(:yet_another_space) { create(:space, staging_security_group_guids: [associated_sg.guid, another_default_sg.guid]) } it 'returns booleans for the staging_default property' do expect(space.staging_security_groups.first.staging_default).to be_in [true, false] @@ -334,8 +339,8 @@ module VCAP::CloudController describe 'isolation_segment_models' do let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } - let(:space) { Space.make } - let(:isolation_segment_model) { IsolationSegmentModel.make } + let(:space) { create(:space) } + let(:isolation_segment_model) { create(:isolation_segment_model) } context 'adding an isolation segment' do context "and the Space's org does not have the isolation segment" do @@ -363,7 +368,7 @@ module VCAP::CloudController context 'and the space has apps' do before do - AppModel.make(space:) + create(:app_model, space:) end it 'adds the isolation segment but does not affect the running app' do @@ -394,13 +399,13 @@ module VCAP::CloudController end context 'bad relationships' do - subject(:space) { Space.make } + subject(:space) { create(:space) } shared_examples 'bad app space permission' do |perm| context perm do it "does not get associated with a #{perm.singularize} that isn't a member of the org" do exception = Space.const_get("Invalid#{perm.camelize}Relation") - wrong_org = Organization.make + wrong_org = create(:organization) user = make_user_for_org(wrong_org) expect do @@ -417,58 +422,50 @@ module VCAP::CloudController describe 'apps which is the process relationship' do it 'has apps' do - space = Space.make + space = create(:space) process1 = ProcessModelFactory.make(space:) process2 = ProcessModelFactory.make(space:) expect(space.apps).to contain_exactly(process1, process2) end it 'does not associate non-web v2 apps' do - space = Space.make + space = create(:space) process1 = ProcessModelFactory.make(type: 'web', space: space) ProcessModelFactory.make(type: 'other', space: space) expect(space.apps).to contain_exactly(process1) end context 'when there are multiple web processes for an app' do - let(:space) { Space.make } - let(:app_one) { AppModel.make(space:) } - let(:app_two) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app_one) { create(:app_model, space:) } + let(:app_two) { create(:app_model, space:) } let!(:web_process_app_one) do - VCAP::CloudController::ProcessModel.make( - app: app_one, - command: 'old command!', - instances: 3, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 24.hours - ) + create(:process_model, app: app_one, + command: 'old command!', + instances: 3, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 24.hours) end let!(:newer_web_process_app_one) do - VCAP::CloudController::ProcessModel.make( - app: app_one, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 23.hours - ) + create(:process_model, app: app_one, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 23.hours) end let!(:web_process_app_two) do - VCAP::CloudController::ProcessModel.make( - app: app_two, - command: 'old command!', - instances: 3, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 24.hours - ) + create(:process_model, app: app_two, + command: 'old command!', + instances: 3, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 24.hours) end let!(:newer_web_process_app_two) do - VCAP::CloudController::ProcessModel.make( - app: app_two, - command: 'new command!', - instances: 4, - type: VCAP::CloudController::ProcessTypes::WEB, - created_at: Time.now - 23.hours - ) + create(:process_model, app: app_two, + command: 'new command!', + instances: 4, + type: VCAP::CloudController::ProcessTypes::WEB, + created_at: Time.now - 23.hours) end it 'returns the newest web processes for each app' do @@ -479,10 +476,10 @@ module VCAP::CloudController describe 'eager loading' do it 'loads only web processes' do # rubocop:disable Lint/UselessAssignment - space1 = Space.make - space2 = Space.make - space3 = Space.make - space4 = Space.make + space1 = create(:space) + space2 = create(:space) + space3 = create(:space) + space4 = create(:space) process1_space1 = ProcessModelFactory.make(space: space1) process2_space1 = ProcessModelFactory.make(space: space1) @@ -516,10 +513,10 @@ module VCAP::CloudController it 'respects when an eager block is passed in' do # rubocop:disable Lint/UselessAssignment - space1 = Space.make - space2 = Space.make - space3 = Space.make - space4 = Space.make + space1 = create(:space) + space2 = create(:space) + space3 = create(:space) + space4 = create(:space) process1_space1 = ProcessModelFactory.make(space: space1) process2_space1 = ProcessModelFactory.make(space: space1) @@ -568,7 +565,7 @@ module VCAP::CloudController end describe '#in_suspended_org?' do - let(:org) { Organization.make } + let(:org) { create(:organization) } subject(:space) { Space.new(organization: org) } @@ -590,7 +587,7 @@ module VCAP::CloudController end describe '#destroy' do - subject(:space) { Space.make } + subject(:space) { create(:space) } let(:guid_pattern) { '[[:alnum:]-]+' } @@ -600,7 +597,7 @@ module VCAP::CloudController context 'when there are service instances' do before do - ManagedServiceInstance.make(space:) + create(:managed_service_instance, space:) end it 'raises a ForeignKeyConstraintViolation error' do @@ -609,7 +606,7 @@ module VCAP::CloudController end it 'destroys all routes' do - route = Route.make(space:) + route = create(:route, space:) expect do subject.destroy end.to change { @@ -618,7 +615,7 @@ module VCAP::CloudController end it "doesn't do anything to domains" do - PrivateDomain.make(owning_organization: space.organization) + create(:private_domain, owning_organization: space.organization) expect do subject.destroy end.not_to(change do @@ -627,14 +624,14 @@ module VCAP::CloudController end it 'nullifies any default_users' do - user = User.make + user = create(:user) space.add_default_user(user) space.save expect { subject.destroy }.to change { user.reload.default_space }.from(space).to(nil) end it 'does not destroy any events related to the space' do - event = Event.make(space:) + event = create(:event, space:) expect do subject.destroy @@ -649,8 +646,8 @@ module VCAP::CloudController end describe '#has_remaining_memory' do - let(:space_quota) { SpaceQuotaDefinition.make(memory_limit: 500) } - let(:space) { Space.make(space_quota_definition: space_quota, organization: space_quota.organization) } + let(:space_quota) { create(:space_quota_definition, memory_limit: 500) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: space_quota.organization) } it 'returns true if there is enough memory remaining when no processes are running' do ProcessModelFactory.make(space: space, memory: 50, instances: 1) @@ -669,7 +666,7 @@ module VCAP::CloudController it 'includes RUNNING tasks when determining available memory' do process = ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: ProcessModel::STARTED) - TaskModel.make(app: process.app, memory_in_mb: 50, state: TaskModel::RUNNING_STATE) + create(:task_model, app: process.app, memory_in_mb: 50, state: TaskModel::RUNNING_STATE) expect(space.has_remaining_memory(50)).to be(true) expect(space.has_remaining_memory(51)).to be(false) @@ -677,7 +674,7 @@ module VCAP::CloudController it 'includes PENDING tasks when determining available memory' do process = ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: ProcessModel::STARTED) - TaskModel.make(app: process.app, memory_in_mb: 50, state: TaskModel::PENDING_STATE) + create(:task_model, app: process.app, memory_in_mb: 50, state: TaskModel::PENDING_STATE) expect(space.has_remaining_memory(50)).to be(true) expect(space.has_remaining_memory(51)).to be(false) @@ -685,17 +682,17 @@ module VCAP::CloudController it 'does not include non-RUNNING tasks when determining available memory' do process = ProcessModelFactory.make(space: space, memory: 200, instances: 2, state: ProcessModel::STARTED) - TaskModel.make(app: process.app, memory_in_mb: 50, state: TaskModel::SUCCEEDED_STATE) - TaskModel.make(app: process.app, memory_in_mb: 51, state: TaskModel::FAILED_STATE) - TaskModel.make(app: process.app, memory_in_mb: 52, state: TaskModel::CANCELING_STATE) + create(:task_model, app: process.app, memory_in_mb: 50, state: TaskModel::SUCCEEDED_STATE) + create(:task_model, app: process.app, memory_in_mb: 51, state: TaskModel::FAILED_STATE) + create(:task_model, app: process.app, memory_in_mb: 52, state: TaskModel::CANCELING_STATE) expect(space.has_remaining_memory(100)).to be(true) expect(space.has_remaining_memory(101)).to be(false) end context 'when the instance_memory is unlimited' do - let(:space_quota) { SpaceQuotaDefinition.make(memory_limit: SpaceQuotaDefinition::UNLIMITED) } - let(:space) { Space.make(space_quota_definition: space_quota, organization: space_quota.organization) } + let(:space_quota) { create(:space_quota_definition, memory_limit: SpaceQuotaDefinition::UNLIMITED) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: space_quota.organization) } it 'there is always more remaining memory' do expect(space.has_remaining_memory(1_234_567_890)).to be(true) @@ -705,11 +702,11 @@ module VCAP::CloudController describe '#has_remaining_log_rate_limit' do let(:log_rate_limit) { 10 } - let(:quota) { SpaceQuotaDefinition.make(log_rate_limit: log_rate_limit, organization: org) } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org, space_quota_definition: quota) } - let(:space2) { Space.make(organization: org, space_quota_definition: quota) } - let!(:app_model) { AppModel.make(space:) } + let(:quota) { create(:space_quota_definition, log_rate_limit: log_rate_limit, organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org, space_quota_definition: quota) } + let(:space2) { create(:space, organization: org, space_quota_definition: quota) } + let!(:app_model) { create(:app_model, space:) } context 'when the quota is unlimited' do let(:log_rate_limit) { QuotaDefinition::UNLIMITED } @@ -736,21 +733,21 @@ module VCAP::CloudController expect(space.has_remaining_log_rate_limit(4)).to be_truthy expect(space.has_remaining_log_rate_limit(5)).to be_falsey - TaskModel.make(app: app_model, log_rate_limit: 1, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, log_rate_limit: 1, state: TaskModel::RUNNING_STATE) expect(space.has_remaining_log_rate_limit(3)).to be_truthy expect(space.has_remaining_log_rate_limit(4)).to be_falsey end it 'considers tasks in state PENDING' do - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::PENDING_STATE) expect(space.has_remaining_log_rate_limit(8)).to be_truthy expect(space.has_remaining_log_rate_limit(9)).to be_falsey end it 'does not consider tasks in other states' do - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::SUCCEEDED_STATE) - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::FAILED_STATE) - TaskModel.make(app: app_model, log_rate_limit: 2, state: TaskModel::CANCELING_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::SUCCEEDED_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::FAILED_STATE) + create(:task_model, app: app_model, log_rate_limit: 2, state: TaskModel::CANCELING_STATE) expect(space.has_remaining_log_rate_limit(10)).to be_truthy end @@ -768,9 +765,9 @@ module VCAP::CloudController end describe '#instance_memory_limit' do - let(:org) { Organization.make } - let(:space_quota) { SpaceQuotaDefinition.make(instance_memory_limit: 50, organization: org) } - let(:space) { Space.make(space_quota_definition: space_quota, organization: org) } + let(:org) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, instance_memory_limit: 50, organization: org) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: org) } it 'returns the instance memory limit from the quota' do expect(space.instance_memory_limit).to eq(50) @@ -786,9 +783,9 @@ module VCAP::CloudController end describe '#app_task_limit' do - let(:org) { Organization.make } - let(:space_quota) { SpaceQuotaDefinition.make(app_task_limit: 1, organization: org) } - let(:space) { Space.make(space_quota_definition: space_quota, organization: org) } + let(:org) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, app_task_limit: 1, organization: org) } + let(:space) { create(:space, space_quota_definition: space_quota, organization: org) } it 'returns the app task limit from the quota' do expect(space.app_task_limit).to eq(1) @@ -804,10 +801,10 @@ module VCAP::CloudController end describe '#meets_max_task_limit?' do - let(:org) { Organization.make } - let(:space_quota) { SpaceQuotaDefinition.make(app_task_limit: 1, organization: org) } - let(:space) { Space.make(organization: org) } - let(:app_model) { AppModel.make(space_guid: space.guid) } + let(:org) { create(:organization) } + let(:space_quota) { create(:space_quota_definition, app_task_limit: 1, organization: org) } + let(:space) { create(:space, organization: org) } + let(:app_model) { create(:app_model, space_guid: space.guid) } before do space.space_quota_definition = space_quota @@ -819,7 +816,7 @@ module VCAP::CloudController context 'number of pending and running tasks equals the limit' do before do - TaskModel.make(app: app_model, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, state: TaskModel::RUNNING_STATE) end it 'returns true' do @@ -829,9 +826,9 @@ module VCAP::CloudController context 'number of pending and running tasks exceeds the limit' do before do - TaskModel.make(app: app_model, state: TaskModel::RUNNING_STATE) - TaskModel.make(app: app_model, state: TaskModel::PENDING_STATE) - TaskModel.make(app: app_model, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, state: TaskModel::RUNNING_STATE) + create(:task_model, app: app_model, state: TaskModel::PENDING_STATE) + create(:task_model, app: app_model, state: TaskModel::PENDING_STATE) end it 'returns true' do @@ -842,10 +839,10 @@ module VCAP::CloudController describe '.having_developers' do it 'returns only spaces with developers containing the specified user' do - space1 = Space.make + space1 = create(:space) user = make_developer_for_space(space1) - space2 = Space.make + space2 = create(:space) spaces = Space.having_developers(user).all expect(spaces).to include(space1) @@ -854,10 +851,10 @@ module VCAP::CloudController end describe 'space_quota_definition=' do - let(:space) { Space.make } + let(:space) { create(:space) } context 'when the space quota defitinion exists' do - let(:space_quota_definition) { SpaceQuotaDefinition.make } + let(:space_quota_definition) { create(:space_quota_definition) } let(:space_quota_definition_guid) { space_quota_definition.guid } it 'updates the association' do @@ -880,9 +877,9 @@ module VCAP::CloudController end describe '#has_developer?' do - subject(:space) { Space.make } - let(:user) { User.make } - let(:other_developer) { User.make } + subject(:space) { create(:space) } + let(:user) { create(:user) } + let(:other_developer) { create(:user) } before do space.organization.add_user(user) @@ -905,9 +902,9 @@ module VCAP::CloudController end describe '#has_member?' do - subject(:space) { Space.make } - let(:user) { User.make } - let(:other_user) { User.make } + subject(:space) { create(:space) } + let(:user) { create(:user) } + let(:other_user) { create(:user) } before do space.organization.add_user(user) @@ -945,9 +942,9 @@ module VCAP::CloudController end describe '#has_supporter?' do - subject(:space) { Space.make } - let(:user) { User.make } - let(:other_user) { User.make } + subject(:space) { create(:space) } + let(:user) { create(:user) } + let(:other_user) { create(:user) } before do space.organization.add_user(user) @@ -981,8 +978,8 @@ module VCAP::CloudController end describe '#in_organization?' do - subject(:space) { Space.make } - let(:user) { User.make } + subject(:space) { create(:space) } + let(:user) { create(:user) } it "returns true if the given user is in the space's organization" do space.organization.add_user(user) diff --git a/spec/unit/models/runtime/space_supporter_spec.rb b/spec/unit/models/runtime/space_supporter_spec.rb index 1581c17fc76..b4027d05c5f 100644 --- a/spec/unit/models/runtime/space_supporter_spec.rb +++ b/spec/unit/models/runtime/space_supporter_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController RSpec.describe SpaceSupporter, type: :model do - let(:space) { Space.make } - let(:user) { User.make } + let(:space) { create(:space) } + let(:user) { create(:user) } describe 'uniqueness' do it 'prevents duplicate space_id and user_id combination' do diff --git a/spec/unit/models/runtime/stack_spec.rb b/spec/unit/models/runtime/stack_spec.rb index cb17e7c8064..d4ef252c47d 100644 --- a/spec/unit/models/runtime/stack_spec.rb +++ b/spec/unit/models/runtime/stack_spec.rb @@ -8,14 +8,14 @@ module VCAP::CloudController describe 'Associations' do it 'has apps' do - stack = Stack.make + stack = create(:stack) process1 = ProcessModelFactory.make(stack:) process2 = ProcessModelFactory.make(stack:) expect(stack.apps).to contain_exactly(process1, process2) end it 'does not associate non-web v2 apps' do - stack = Stack.make + stack = create(:stack) process1 = ProcessModelFactory.make(type: 'web', stack: stack) ProcessModelFactory.make(type: 'other', stack: stack) expect(stack.apps).to contain_exactly(process1) @@ -24,7 +24,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of name' do - existing_stack = Stack.make + existing_stack = create(:stack) expect do Stack.create(name: existing_stack.name) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -37,7 +37,7 @@ module VCAP::CloudController describe 'state validation' do it 'accepts valid states' do - stack = Stack.make + stack = create(:stack) StackStates::VALID_STATES.each do |valid_state| stack.state = valid_state expect(stack).to be_valid @@ -45,14 +45,14 @@ module VCAP::CloudController end it 'rejects invalid states' do - stack = Stack.make + stack = create(:stack) stack.state = 'INVALID' expect(stack).not_to be_valid expect(stack.errors[:state]).to include(:includes) end it 'does not allow nil state' do - stack = Stack.make + stack = create(:stack) stack.state = nil expect(stack).not_to be_valid end @@ -216,7 +216,7 @@ module VCAP::CloudController before { Stack.dataset.destroy } context 'when stack is found with default name' do - before { Stack.make(name: 'default-stack-name') } + before { create(:stack, name: 'default-stack-name') } it 'returns found stack' do expect(Stack.default.name).to eq('default-stack-name') @@ -236,7 +236,7 @@ module VCAP::CloudController describe '#default?' do before { Stack.configure(file) } - let(:stack) { Stack.make(name:) } + let(:stack) { create(:stack, name:) } let(:name) { 'mimi' } context 'when config was not set' do @@ -267,7 +267,7 @@ module VCAP::CloudController end context 'when stack does NOT have the default name' do - before { Stack.make(name: 'default-stack-name') } + before { create(:stack, name: 'default-stack-name') } it 'returns false' do expect(stack.default?).to be false @@ -277,7 +277,7 @@ module VCAP::CloudController end describe '#destroy' do - let(:stack) { Stack.make } + let(:stack) { create(:stack) } it 'succeeds if there are no apps' do expect { stack.destroy }.not_to raise_error diff --git a/spec/unit/models/runtime/task_model_spec.rb b/spec/unit/models/runtime/task_model_spec.rb index fe1e5790c45..731301a5644 100644 --- a/spec/unit/models/runtime/task_model_spec.rb +++ b/spec/unit/models/runtime/task_model_spec.rb @@ -2,11 +2,11 @@ module VCAP::CloudController RSpec.describe TaskModel do - let(:parent_app) { AppModel.make } + let(:parent_app) { create(:app_model) } describe 'after create' do it 'does not create a TASK_STARTED event' do - task = TaskModel.make(app: parent_app, state: TaskModel::PENDING_STATE) + task = create(:task_model, app: parent_app, state: TaskModel::PENDING_STATE) event = AppUsageEvent.find(task_guid: task.guid, state: 'TASK_STARTED') expect(event).to be_nil @@ -14,11 +14,11 @@ module VCAP::CloudController end describe 'after update' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::PENDING_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::PENDING_STATE) } context 'when the task is moving to the SUCCEEDED_STATE' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::RUNNING_STATE) } - let!(:start_event) { AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STARTED') } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::RUNNING_STATE) } + let!(:start_event) { create(:app_usage_event, task_guid: task.guid, state: 'TASK_STARTED') } it 'creates a TASK_STOPPED event' do task.update(state: TaskModel::SUCCEEDED_STATE) @@ -32,8 +32,8 @@ module VCAP::CloudController context 'when the task is moving to the FAILED_STATE' do context 'when the task is moving from the RUNNING state' do - let!(:start_event) { AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STARTED') } - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::RUNNING_STATE) } + let!(:start_event) { create(:app_usage_event, task_guid: task.guid, state: 'TASK_STARTED') } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::RUNNING_STATE) } it 'creates a TASK_STOPPED event' do task.update(state: TaskModel::FAILED_STATE) @@ -46,7 +46,7 @@ module VCAP::CloudController end context 'when the task is moving from the PENDING state' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::PENDING_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::PENDING_STATE) } it 'does not create a TASK_STOPPED event' do task.update(state: TaskModel::FAILED_STATE) @@ -57,10 +57,10 @@ module VCAP::CloudController end context 'when the task is moving from the CANCELING state' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::CANCELING_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::CANCELING_STATE) } context 'when the task has a TASK_STARTED event' do - let!(:start_event) { AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STARTED') } + let!(:start_event) { create(:app_usage_event, task_guid: task.guid, state: 'TASK_STARTED') } it 'creates a TASK_STOPPED event' do task.update(state: TaskModel::FAILED_STATE) @@ -85,10 +85,10 @@ module VCAP::CloudController end context 'when the task already has a TASK_STOPPED event' do - let!(:start_event) { AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STARTED') } + let!(:start_event) { create(:app_usage_event, task_guid: task.guid, state: 'TASK_STARTED') } before do - AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STOPPED') + create(:app_usage_event, task_guid: task.guid, state: 'TASK_STOPPED') end it 'does not create additional TASK_STOPPED event' do @@ -119,8 +119,8 @@ module VCAP::CloudController end context 'when the state is not changing' do - let!(:start_event) { AppUsageEvent.make(task_guid: task.guid, state: 'TASK_STARTED') } - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::FAILED_STATE) } + let!(:start_event) { create(:app_usage_event, task_guid: task.guid, state: 'TASK_STARTED') } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::FAILED_STATE) } it 'does not create a TASK_STOPPED event' do task.update(name: 'some-new-name', state: TaskModel::FAILED_STATE) @@ -132,7 +132,7 @@ module VCAP::CloudController end describe 'after destroy' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::PENDING_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::PENDING_STATE) } it 'creates a TASK_STOPPED event' do task.destroy @@ -145,7 +145,7 @@ module VCAP::CloudController context 'when the task is already in a terminal state (and thus already has a stop event)' do describe 'when the task is failed' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::FAILED_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::FAILED_STATE) } it 'does not create an additional stop event' do task.destroy @@ -154,7 +154,7 @@ module VCAP::CloudController end describe 'when the task is succeeded' do - let(:task) { TaskModel.make(app: parent_app, state: TaskModel::SUCCEEDED_STATE) } + let(:task) { create(:task_model, app: parent_app, state: TaskModel::SUCCEEDED_STATE) } it 'does not create an additional stop event' do task.destroy @@ -165,13 +165,13 @@ module VCAP::CloudController end describe '#run_action_user' do - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(app: parent_app) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, app: parent_app) } context 'when the task belongs to a CNB lifecycle app' do - let(:parent_app) { AppModel.make(:cnb) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:cnb, app: parent_app) } + let(:parent_app) { create(:app_model, :cnb) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :cnb, app: parent_app) } context 'when the task has a user specified' do before do @@ -195,9 +195,9 @@ module VCAP::CloudController end context 'when the task belongs to a Docker lifecycle app' do - let(:parent_app) { AppModel.make(:docker) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:docker, app: parent_app) } + let(:parent_app) { create(:app_model, :docker) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :docker, app: parent_app) } let(:droplet_execution_metadata) { '{"entrypoint":["/image-entrypoint.sh"],"user":"some-user"}' } before do @@ -270,6 +270,8 @@ module VCAP::CloudController end context 'when there is no droplet for the task' do + let(:droplet) { create(:droplet_model, app: parent_app, set_as_current_droplet: false) } + before do task.droplet.delete task.reload @@ -285,9 +287,9 @@ module VCAP::CloudController describe 'docker?' do context 'when there is a droplet and it has the docker lifecycle' do - let(:parent_app) { AppModel.make(:docker) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:docker, app: parent_app) } + let(:parent_app) { create(:app_model, :docker) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :docker, app: parent_app) } it 'returns true' do expect(task.docker?).to be(true) @@ -295,9 +297,9 @@ module VCAP::CloudController end context 'when there is a droplet and it does not have the docker lifecycle' do - let(:parent_app) { AppModel.make(:docker) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, :docker) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, app: parent_app) } it 'returns false' do expect(task.docker?).to be(false) @@ -305,9 +307,9 @@ module VCAP::CloudController end context 'when there is not a droplet for the task' do - let(:parent_app) { AppModel.make(:docker) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:docker, app: parent_app) } + let(:parent_app) { create(:app_model, :docker) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :docker, app: parent_app, set_as_current_droplet: false) } before do task.droplet.delete @@ -322,9 +324,9 @@ module VCAP::CloudController describe 'cnb?' do context 'when there is a droplet and it has the cnb lifecycle' do - let(:parent_app) { AppModel.make(:cnb) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:cnb, app: parent_app) } + let(:parent_app) { create(:app_model, :cnb) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :cnb, app: parent_app) } it 'returns true' do expect(task.cnb?).to be(true) @@ -332,9 +334,9 @@ module VCAP::CloudController end context 'when there is a droplet and it does not have the cnb lifecycle' do - let(:parent_app) { AppModel.make(:cnb) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(app: parent_app) } + let(:parent_app) { create(:app_model, :cnb) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, app: parent_app) } it 'returns false' do expect(task.cnb?).to be(false) @@ -342,9 +344,9 @@ module VCAP::CloudController end context 'when there is not a droplet for the task' do - let(:parent_app) { AppModel.make(:cnb) } - let(:task) { TaskModel.make(app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } - let(:droplet) { DropletModel.make(:cnb, app: parent_app) } + let(:parent_app) { create(:app_model, :cnb) } + let(:task) { create(:task_model, app: parent_app, droplet: droplet, state: TaskModel::SUCCEEDED_STATE) } + let(:droplet) { create(:droplet_model, :cnb, app: parent_app, set_as_current_droplet: false) } before do task.droplet.delete @@ -358,11 +360,11 @@ module VCAP::CloudController end describe 'validations' do - let(:task) { TaskModel.make } - let(:org) { Organization.make } - let(:space) { Space.make organization: org } - let(:app) { AppModel.make space_guid: space.guid } - let(:droplet) { DropletModel.make(app_guid: app.guid) } + let(:task) { create(:task_model) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:app) { create(:app_model, space_guid: space.guid) } + let(:droplet) { create(:droplet_model, app_guid: app.guid, set_as_current_droplet: false) } describe 'name' do it 'allows standard ascii characters' do @@ -457,7 +459,7 @@ module VCAP::CloudController task.save expect do - TaskModel.make app: task.app, sequence_id: 0 + create(:task_model, app: task.app, sequence_id: 0) end.to raise_exception Sequel::UniqueConstraintViolation end @@ -465,10 +467,10 @@ module VCAP::CloudController task.sequence_id = 0 task.save - other_app = AppModel.make space_guid: space.guid + other_app = create(:app_model, space_guid: space.guid) expect do - TaskModel.make app: other_app, sequence_id: 0 + create(:task_model, app: other_app, sequence_id: 0) end.not_to raise_exception end end @@ -476,7 +478,7 @@ module VCAP::CloudController describe 'environment_variables' do it 'validates them' do expect do - TaskModel.make(environment_variables: '') + create(:task_model, environment_variables: '') end.to raise_error(Sequel::ValidationFailed, /must be an object/) end @@ -487,7 +489,7 @@ module VCAP::CloudController it 'limits the length' do expect do - TaskModel.make(environment_variables: { 123 => 123 }).save + create(:task_model, environment_variables: { 123 => 123 }).save end.to raise_error(Sequel::ValidationFailed, /exceeded the maximum length allowed of 5 characters as json/) end end @@ -496,19 +498,19 @@ module VCAP::CloudController describe 'presence' do it 'must have an app' do expect do - TaskModel.make(name: 'name', - droplet: droplet, - app: nil, - command: 'bundle exec rake db:migrate') + create(:task_model, name: 'name', + droplet: droplet, + app: nil, + command: 'bundle exec rake db:migrate') end.to raise_error(Sequel::ValidationFailed, /app presence/) end it 'must have a command' do expect do - TaskModel.make(name: 'name', - droplet: droplet, - app: app, - command: nil) + create(:task_model, name: 'name', + droplet: droplet, + app: app, + command: nil) end.to raise_error(Sequel::ValidationFailed, /command presence/) end @@ -516,20 +518,21 @@ module VCAP::CloudController context 'when creating the task' do it 'must have a droplet' do expect do - TaskModel.make(name: 'name', - droplet: nil, - app: app, - command: 'bundle exec rake db:migrate') + create(:task_model, name: 'name', + droplet: nil, + skip_default_droplet: true, + app: app, + command: 'bundle exec rake db:migrate') end.to raise_error(Sequel::ValidationFailed, /droplet presence/) end end context 'when updating the task' do it 'does not need a droplet' do - task = TaskModel.make(name: 'name', - droplet: droplet, - app: app, - command: 'bundle exec rake db:migrate') + task = create(:task_model, name: 'name', + droplet: droplet, + app: app, + command: 'bundle exec rake db:migrate') droplet.delete task.reload @@ -540,10 +543,10 @@ module VCAP::CloudController it 'must have a name' do expect do - TaskModel.make(name: nil, - droplet: droplet, - app: app, - command: 'bundle exec rake db:migrate') + create(:task_model, name: nil, + droplet: droplet, + app: app, + command: 'bundle exec rake db:migrate') end.to raise_error(Sequel::ValidationFailed, /name presence/) end end @@ -551,85 +554,71 @@ module VCAP::CloudController describe 'quotas' do it 'errors when log_rate_limit is below -1' do expect do - TaskModel.make( - log_rate_limit: -2, - app: app - ) + create(:task_model, log_rate_limit: -2, + app: app) end.to raise_error(Sequel::ValidationFailed, /log_rate_limit must be greater than or equal to -1/) end describe 'space quotas' do - let(:space) { Space.make organization: org, space_quota_definition: quota } + let(:space) { create(:space, organization: org, space_quota_definition: quota) } context 'when there is no quota' do let(:quota) { nil } it 'allows tasks of any size' do expect do - TaskModel.make( - memory_in_mb: 21, - app: app - ) + create(:task_model, memory_in_mb: 21, + app: app) end.not_to raise_error end end describe 'when the log rate limit quota is unlimited' do - let(:quota) { SpaceQuotaDefinition.make(log_rate_limit: -1, organization: org) } + let(:quota) { create(:space_quota_definition, log_rate_limit: -1, organization: org) } it 'allows tasks to run with unlimited rate limits' do expect do - TaskModel.make( - log_rate_limit: -1, - app: app - ) + create(:task_model, log_rate_limit: -1, + app: app) end.not_to raise_error end it 'allows tasks to run with rate limits' do expect do - TaskModel.make( - log_rate_limit: 1_000_000_000_000, - app: app - ) + create(:task_model, log_rate_limit: 1_000_000_000_000, + app: app) end.not_to raise_error end end describe 'when the quota has a log_rate_limit' do - let(:quota) { SpaceQuotaDefinition.make(log_rate_limit: 200, organization: org) } + let(:quota) { create(:space_quota_definition, log_rate_limit: 200, organization: org) } it 'allows tasks that fit in the available log rate' do expect do - TaskModel.make( - log_rate_limit: 100, - app: app - ) + create(:task_model, log_rate_limit: 100, + app: app) end.not_to raise_error end it 'raises an error if the task does not fit in the remaining space' do expect do - TaskModel.make( - log_rate_limit: 201, - app: app - ) + create(:task_model, log_rate_limit: 201, + app: app) end.to raise_error Sequel::ValidationFailed, 'log_rate_limit exceeds space log rate quota' end it 'raises an error if the task has an unlimited rate limit' do expect do - TaskModel.make( - log_rate_limit: -1, - app: app - ) + create(:task_model, log_rate_limit: -1, + app: app) end.to raise_error Sequel::ValidationFailed, "log_rate_limit cannot be unlimited in space '#{space.name}'." end it 'considers running and pending tasks but still allows state changes' do - task = TaskModel.make(log_rate_limit: 200, app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, log_rate_limit: 200, app: app, state: TaskModel::PENDING_STATE) expect do - TaskModel.make(log_rate_limit: 1, app: app, state: TaskModel::RUNNING_STATE) + create(:task_model, log_rate_limit: 1, app: app, state: TaskModel::RUNNING_STATE) end.to raise_error Sequel::ValidationFailed, 'log_rate_limit exceeds space log rate quota' expect { task.update(state: TaskModel::RUNNING_STATE) }.not_to raise_error @@ -637,28 +626,28 @@ module VCAP::CloudController end describe 'when the quota has a memory_limit' do - let(:quota) { SpaceQuotaDefinition.make(memory_limit: 20, organization: org) } + let(:quota) { create(:space_quota_definition, memory_limit: 20, organization: org) } it 'allows tasks that fit in the available space' do - expect { TaskModel.make(memory_in_mb: 10, app: app) }.not_to raise_error + expect { create(:task_model, memory_in_mb: 10, app: app) }.not_to raise_error end it 'raises an error if the task does not fit in the remaining space' do - expect { TaskModel.make(memory_in_mb: 21, app: app) }.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds space memory quota' + expect { create(:task_model, memory_in_mb: 21, app: app) }.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds space memory quota' end it 'does not raise errors when canceling task above quota' do - task = TaskModel.make(memory_in_mb: 10, app: app) - space.update(space_quota_definition: SpaceQuotaDefinition.make(memory_limit: 5, organization: org)) + task = create(:task_model, memory_in_mb: 10, app: app) + space.update(space_quota_definition: create(:space_quota_definition, memory_limit: 5, organization: org)) task.update(state: TaskModel::CANCELING_STATE) expect(task.reload).to be_valid end it 'considers running and pending tasks but still allows state changes' do - task = TaskModel.make(memory_in_mb: 20, app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, memory_in_mb: 20, app: app, state: TaskModel::PENDING_STATE) expect do - TaskModel.make(memory_in_mb: 1, app: app, state: TaskModel::RUNNING_STATE) + create(:task_model, memory_in_mb: 1, app: app, state: TaskModel::RUNNING_STATE) end.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds space memory quota' expect { task.update(state: TaskModel::RUNNING_STATE) }.not_to raise_error @@ -666,42 +655,36 @@ module VCAP::CloudController end describe 'when the quota has an instance_memory_limit' do - let(:quota) { SpaceQuotaDefinition.make(instance_memory_limit: 2, organization: org) } + let(:quota) { create(:space_quota_definition, instance_memory_limit: 2, organization: org) } it 'allows tasks that fit in the instance memory limit' do expect do - TaskModel.make( - memory_in_mb: 1, - app: app - ) + create(:task_model, memory_in_mb: 1, + app: app) end.not_to raise_error end it 'raises an error if the task is larger than the instance memory limit' do expect do - TaskModel.make( - memory_in_mb: 3, - app: app - ) + create(:task_model, memory_in_mb: 3, + app: app) end.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds space instance memory quota' end context 'when the quota is unlimited' do - let(:quota) { SpaceQuotaDefinition.make(instance_memory_limit: QuotaDefinition::UNLIMITED, organization: org) } + let(:quota) { create(:space_quota_definition, instance_memory_limit: QuotaDefinition::UNLIMITED, organization: org) } it 'allows tasks of all sizes' do expect do - TaskModel.make( - memory_in_mb: 500, - app: app - ) + create(:task_model, memory_in_mb: 500, + app: app) end.not_to raise_error end end end describe 'user' do - subject(:task) { TaskModel.make(user: task_user) } + subject(:task) { create(:task_model, user: task_user) } let(:task_user) { 'vcap' } before do @@ -744,14 +727,14 @@ module VCAP::CloudController end describe 'when the quota has an app_task_limit' do - let(:quota) { SpaceQuotaDefinition.make(app_task_limit: 1, organization: org) } + let(:quota) { create(:space_quota_definition, app_task_limit: 1, organization: org) } it 'allows tasks that is within app tasks limit' do - expect { TaskModel.make(app:) }.not_to raise_error + expect { create(:task_model, app:) }.not_to raise_error end it 'allows tasks to be updated if the limit is reached' do - task = TaskModel.make(app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, app: app, state: TaskModel::PENDING_STATE) task.state = TaskModel::RUNNING_STATE @@ -760,58 +743,52 @@ module VCAP::CloudController context 'when the number of running tasks is equal to the app task limit' do before do - TaskModel.make(state: TaskModel::RUNNING_STATE, app: app) + create(:task_model, state: TaskModel::RUNNING_STATE, app: app) end it 'raises an error' do - expect { TaskModel.make(app:) }.to raise_error Sequel::ValidationFailed, 'app_task_limit quota exceeded' + expect { create(:task_model, app:) }.to raise_error Sequel::ValidationFailed, 'app_task_limit quota exceeded' end end end end describe 'org quotas' do - let(:org) { Organization.make quota_definition: quota } + let(:org) { create(:organization, quota_definition: quota) } context 'when there is no quota' do let(:quota) { nil } it 'allows tasks of any size' do expect do - TaskModel.make( - memory_in_mb: 21, - log_rate_limit: 21_000, - app: app - ) + create(:task_model, memory_in_mb: 21, + log_rate_limit: 21_000, + app: app) end.not_to raise_error end end describe 'when the quota has a log_rate_limit' do - let(:quota) { QuotaDefinition.make(log_rate_limit: 200) } + let(:quota) { create(:quota_definition, log_rate_limit: 200) } it 'does allow a task that fits in the limit to start' do expect do - TaskModel.make( - log_rate_limit: 199, - app: app - ) + create(:task_model, log_rate_limit: 199, + app: app) end.not_to raise_error end it 'does not allow a task that exceeds the limit to start' do expect do - TaskModel.make( - log_rate_limit: 10_000, - app: app - ) + create(:task_model, log_rate_limit: 10_000, + app: app) end.to raise_error(/log_rate_limit exceeds organization log rate/) end it 'considers running and pending tasks but still allows state changes' do - task = TaskModel.make(log_rate_limit: 200, app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, log_rate_limit: 200, app: app, state: TaskModel::PENDING_STATE) expect do - TaskModel.make(log_rate_limit: 1, app: app, state: TaskModel::RUNNING_STATE) + create(:task_model, log_rate_limit: 1, app: app, state: TaskModel::RUNNING_STATE) end.to raise_error Sequel::ValidationFailed, 'log_rate_limit exceeds organization log rate quota' expect { task.update(state: TaskModel::RUNNING_STATE) }.not_to raise_error @@ -819,28 +796,28 @@ module VCAP::CloudController end describe 'when the quota has a memory_limit' do - let(:quota) { QuotaDefinition.make(memory_limit: 20) } + let(:quota) { create(:quota_definition, memory_limit: 20) } it 'allows tasks that fit in the available space' do - expect { TaskModel.make(memory_in_mb: 10, app: app) }.not_to raise_error + expect { create(:task_model, memory_in_mb: 10, app: app) }.not_to raise_error end it 'raises an error if the task does not fit in the remaining space' do - expect { TaskModel.make(memory_in_mb: 21, app: app) }.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds organization memory quota' + expect { create(:task_model, memory_in_mb: 21, app: app) }.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds organization memory quota' end it 'does not raise errors when canceling task above quota' do - task = TaskModel.make(memory_in_mb: 10, app: app) - org.update(quota_definition: QuotaDefinition.make(memory_limit: 5)) + task = create(:task_model, memory_in_mb: 10, app: app) + org.update(quota_definition: create(:quota_definition, memory_limit: 5)) task.update(state: TaskModel::CANCELING_STATE) expect(task.reload).to be_valid end it 'considers running and pending tasks but still allows state changes' do - task = TaskModel.make(memory_in_mb: 20, app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, memory_in_mb: 20, app: app, state: TaskModel::PENDING_STATE) expect do - TaskModel.make(memory_in_mb: 1, app: app, state: TaskModel::RUNNING_STATE) + create(:task_model, memory_in_mb: 1, app: app, state: TaskModel::RUNNING_STATE) end.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds organization memory quota' expect { task.update(state: TaskModel::RUNNING_STATE) }.not_to raise_error @@ -848,49 +825,43 @@ module VCAP::CloudController end describe 'when the quota has an instance_memory_limit' do - let(:quota) { QuotaDefinition.make(instance_memory_limit: 2) } + let(:quota) { create(:quota_definition, instance_memory_limit: 2) } it 'allows tasks that fit in the instance memory limit' do expect do - TaskModel.make( - memory_in_mb: 1, - app: app - ) + create(:task_model, memory_in_mb: 1, + app: app) end.not_to raise_error end it 'raises an error if the task is larger than the instance memory limit' do expect do - TaskModel.make( - memory_in_mb: 3, - app: app - ) + create(:task_model, memory_in_mb: 3, + app: app) end.to raise_error Sequel::ValidationFailed, 'memory_in_mb exceeds organization instance memory quota' end context 'when the quota is unlimited' do - let(:quota) { QuotaDefinition.make(instance_memory_limit: QuotaDefinition::UNLIMITED) } + let(:quota) { create(:quota_definition, instance_memory_limit: QuotaDefinition::UNLIMITED) } it 'allows tasks of all sizes' do expect do - TaskModel.make( - memory_in_mb: 500, - app: app - ) + create(:task_model, memory_in_mb: 500, + app: app) end.not_to raise_error end end end describe 'when the quota has an app_task_limit' do - let(:quota) { QuotaDefinition.make(app_task_limit: 1) } + let(:quota) { create(:quota_definition, app_task_limit: 1) } it 'allows tasks that is within app tasks limit' do - expect { TaskModel.make(app:) }.not_to raise_error + expect { create(:task_model, app:) }.not_to raise_error end it 'allows tasks to be updated if the limit is reached' do - task = TaskModel.make(app: app, state: TaskModel::PENDING_STATE) + task = create(:task_model, app: app, state: TaskModel::PENDING_STATE) task.state = TaskModel::RUNNING_STATE @@ -899,11 +870,11 @@ module VCAP::CloudController context 'when the number of running tasks is equal to the app task limit' do before do - TaskModel.make(state: TaskModel::RUNNING_STATE, app: app) + create(:task_model, state: TaskModel::RUNNING_STATE, app: app) end it 'raises an error' do - expect { TaskModel.make(app:) }.to raise_error Sequel::ValidationFailed, 'app_task_limit quota exceeded' + expect { create(:task_model, app:) }.to raise_error Sequel::ValidationFailed, 'app_task_limit quota exceeded' end end end diff --git a/spec/unit/models/runtime/user_annotation_model_spec.rb b/spec/unit/models/runtime/user_annotation_model_spec.rb index 718323845d5..3b875adb493 100644 --- a/spec/unit/models/runtime/user_annotation_model_spec.rb +++ b/spec/unit/models/runtime/user_annotation_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - user = User.make(guid: 'dora') - UserAnnotationModel.make(resource_guid: user.guid, key_prefix: 'something', key_name: 'release', value: 'stable') + user = create(:user, guid: 'dora') + create(:user_annotation_model, resource_guid: user.guid, key_prefix: 'something', key_name: 'release', value: 'stable') expect(UserAnnotationModel.find(key_prefix: 'something', key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/user_label_model_spec.rb b/spec/unit/models/runtime/user_label_model_spec.rb index eeaac1b1758..5d1a09a74a9 100644 --- a/spec/unit/models/runtime/user_label_model_spec.rb +++ b/spec/unit/models/runtime/user_label_model_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } it 'can be created' do - user = User.make(guid: 'dora') - UserLabelModel.make(resource_guid: user.guid, key_name: 'release', value: 'stable') + user = create(:user, guid: 'dora') + create(:user_label_model, resource_guid: user.guid, key_name: 'release', value: 'stable') expect(UserLabelModel.find(key_name: 'release').value).to eq 'stable' end end diff --git a/spec/unit/models/runtime/user_spec.rb b/spec/unit/models/runtime/user_spec.rb index 17451d91581..0b52243686d 100644 --- a/spec/unit/models/runtime/user_spec.rb +++ b/spec/unit/models/runtime/user_spec.rb @@ -10,7 +10,7 @@ module VCAP::CloudController it do expect(subject).to have_associated :managed_organizations, associated_instance: lambda { |user| - org = Organization.make + org = create(:organization) user.add_organization(org) org } @@ -18,7 +18,7 @@ module VCAP::CloudController it do expect(subject).to have_associated :billing_managed_organizations, associated_instance: lambda { |user| - org = Organization.make + org = create(:organization) user.add_organization(org) org } @@ -26,7 +26,7 @@ module VCAP::CloudController it do expect(subject).to have_associated :audited_organizations, associated_instance: lambda { |user| - org = Organization.make + org = create(:organization) user.add_organization(org) org } @@ -38,7 +38,7 @@ module VCAP::CloudController it { is_expected.to have_associated :supported_spaces, class: Space } describe 'destroy dependent associations' do - let(:user) { User.make } + let(:user) { create(:user) } [ SpaceSupporter, @@ -52,7 +52,7 @@ module VCAP::CloudController ].each do |role_class| context role_class.to_s do it 'deletes the association' do - role_class.make(user:) + create(role_class.name.demodulize.underscore.to_sym, user:) expect { user.destroy }.to change { role_class.count }.by(-1) end @@ -63,7 +63,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of guid' do - existing_user = User.make + existing_user = create(:user) expect do User.create(guid: existing_user.guid) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -85,9 +85,9 @@ module VCAP::CloudController end describe '#remove_spaces' do - let(:org) { Organization.make } - let(:user) { User.make } - let(:space) { Space.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } + let(:space) { create(:space) } before do org.add_user(user) @@ -162,8 +162,8 @@ module VCAP::CloudController end describe 'relationships' do - let(:org) { Organization.make } - let(:user) { User.make } + let(:org) { create(:organization) } + let(:user) { create(:user) } context 'when a user is a member of organzation' do before do @@ -262,7 +262,7 @@ module VCAP::CloudController end describe '#export_attrs' do - let(:user) { User.make } + let(:user) { create(:user) } it 'does not include username when username has not been set' do expect(user.export_attrs).not_to include(:username) @@ -298,61 +298,61 @@ module VCAP::CloudController describe '.readable_users_for_current_user' do # See Miro board https://miro.com/app/board/o9J_kwAiqsc=/ for graphical explanation of test - let(:org_1) { Organization.make } - let(:org_2) { Organization.make } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } - let(:space_1a) { Space.make(organization: org_1) } - let(:space_2a) { Space.make(organization: org_2) } - let(:space_2b) { Space.make(organization: org_2) } + let(:space_1a) { create(:space, organization: org_1) } + let(:space_2a) { create(:space, organization: org_2) } + let(:space_2b) { create(:space, organization: org_2) } - let(:org_1_manager) { User.make(guid: 'org_1_manager') } - let(:org_1_billing_manager) { User.make(guid: 'org_1_billing_manager') } - let(:org_1_auditor) { User.make(guid: 'org_1_auditor') } - let(:org_1_user) { User.make(guid: 'org_1_user') } + let(:org_1_manager) { create(:user, guid: 'org_1_manager') } + let(:org_1_billing_manager) { create(:user, guid: 'org_1_billing_manager') } + let(:org_1_auditor) { create(:user, guid: 'org_1_auditor') } + let(:org_1_user) { create(:user, guid: 'org_1_user') } - let(:space_1a_manager) { User.make(guid: 'space_1a_manager') } - let(:space_1a_auditor) { User.make(guid: 'space_1a_auditor') } - let(:space_1a_developer) { User.make(guid: 'space_1a_developer') } + let(:space_1a_manager) { create(:user, guid: 'space_1a_manager') } + let(:space_1a_auditor) { create(:user, guid: 'space_1a_auditor') } + let(:space_1a_developer) { create(:user, guid: 'space_1a_developer') } - let(:space_2a_manager) { User.make(guid: 'space_2a_manager') } - let(:space_2a_auditor) { User.make(guid: 'space_2a_auditor') } - let(:space_2a_developer) { User.make(guid: 'space_2a_developer') } + let(:space_2a_manager) { create(:user, guid: 'space_2a_manager') } + let(:space_2a_auditor) { create(:user, guid: 'space_2a_auditor') } + let(:space_2a_developer) { create(:user, guid: 'space_2a_developer') } - let(:space_2b_manager) { User.make(guid: 'space_2b_manager') } - let(:space_2b_auditor) { User.make(guid: 'space_2b_auditor') } - let(:space_2b_developer) { User.make(guid: 'space_2b_developer') } + let(:space_2b_manager) { create(:user, guid: 'space_2b_manager') } + let(:space_2b_auditor) { create(:user, guid: 'space_2b_auditor') } + let(:space_2b_developer) { create(:user, guid: 'space_2b_developer') } before do - OrganizationManager.make(user: org_1_manager, organization: org_1) - OrganizationBillingManager.make(user: org_1_billing_manager, organization: org_1) - OrganizationAuditor.make(user: org_1_auditor, organization: org_1) - OrganizationUser.make(user: org_1_user, organization: org_1) - - SpaceManager.make(user: space_1a_manager, space: space_1a) - OrganizationUser.make(user: space_1a_manager, organization: org_1) - SpaceAuditor.make(user: space_1a_auditor, space: space_1a) - OrganizationUser.make(user: space_1a_auditor, organization: org_1) - SpaceDeveloper.make(user: space_1a_developer, space: space_1a) - OrganizationUser.make(user: space_1a_developer, organization: org_1) - - SpaceManager.make(user: space_2a_manager, space: space_2a) - OrganizationUser.make(user: space_2a_manager, organization: org_2) - SpaceAuditor.make(user: space_2a_auditor, space: space_2a) - OrganizationUser.make(user: space_2a_auditor, organization: org_2) - SpaceDeveloper.make(user: space_2a_developer, space: space_2a) - OrganizationUser.make(user: space_2a_developer, organization: org_2) - - SpaceManager.make(user: space_2b_manager, space: space_2b) - OrganizationUser.make(user: space_2b_manager, organization: org_2) - SpaceAuditor.make(user: space_2b_auditor, space: space_2b) - OrganizationUser.make(user: space_2b_auditor, organization: org_2) - SpaceDeveloper.make(user: space_2b_developer, space: space_2b) - OrganizationUser.make(user: space_2b_developer, organization: org_2) + create(:organization_manager, user: org_1_manager, organization: org_1) + create(:organization_billing_manager, user: org_1_billing_manager, organization: org_1) + create(:organization_auditor, user: org_1_auditor, organization: org_1) + create(:organization_user, user: org_1_user, organization: org_1) + + create(:space_manager, user: space_1a_manager, space: space_1a) + create(:organization_user, user: space_1a_manager, organization: org_1) + create(:space_auditor, user: space_1a_auditor, space: space_1a) + create(:organization_user, user: space_1a_auditor, organization: org_1) + create(:space_developer, user: space_1a_developer, space: space_1a) + create(:organization_user, user: space_1a_developer, organization: org_1) + + create(:space_manager, user: space_2a_manager, space: space_2a) + create(:organization_user, user: space_2a_manager, organization: org_2) + create(:space_auditor, user: space_2a_auditor, space: space_2a) + create(:organization_user, user: space_2a_auditor, organization: org_2) + create(:space_developer, user: space_2a_developer, space: space_2a) + create(:organization_user, user: space_2a_developer, organization: org_2) + + create(:space_manager, user: space_2b_manager, space: space_2b) + create(:organization_user, user: space_2b_manager, organization: org_2) + create(:space_auditor, user: space_2b_auditor, space: space_2b) + create(:organization_user, user: space_2b_auditor, organization: org_2) + create(:space_developer, user: space_2b_developer, space: space_2b) + create(:organization_user, user: space_2b_developer, organization: org_2) end context 'when an {admin, read_only_admin, global_auditor} lists users' do it 'sees all the org users in managed org' do - expect(User.make(guid: 'global-user').readable_users(true).map(&:guid)). + expect(create(:user, guid: 'global-user').readable_users(true).map(&:guid)). to(match_array(%w[ global-user org_1_manager @@ -445,12 +445,12 @@ module VCAP::CloudController end describe '#membership_spaces' do - let(:user) { User.make } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let(:organization) { create(:organization) } - let(:developer_space) { Space.make organization: } - let(:auditor_space) { Space.make organization: } - let(:manager_space) { Space.make organization: } + let(:developer_space) { create(:space, organization:) } + let(:auditor_space) { create(:space, organization:) } + let(:manager_space) { create(:space, organization:) } before do organization.add_user user @@ -466,10 +466,10 @@ module VCAP::CloudController end it "omits spaces that the user isn't a member of" do - outside_user = User.make guid: 'outside_user_guid' + outside_user = create(:user, guid: 'outside_user_guid') organization.add_user outside_user - different_space = Space.make(organization:) + different_space = create(:space, organization:) different_space.add_developer outside_user @@ -479,11 +479,11 @@ module VCAP::CloudController end describe '#membership_organizations' do - let(:user) { User.make } - let(:user_organization) { Organization.make } - let(:manager_organization) { Organization.make } - let(:auditor_organization) { Organization.make } - let(:billing_manager_organization) { Organization.make } + let(:user) { create(:user) } + let(:user_organization) { create(:organization) } + let(:manager_organization) { create(:organization) } + let(:auditor_organization) { create(:organization) } + let(:billing_manager_organization) { create(:organization) } before do user_organization.add_user user @@ -515,17 +515,17 @@ module VCAP::CloudController end describe '#visible_users_in_my_orgs' do - let(:user_organization) { Organization.make } - let(:manager_organization) { Organization.make } - let(:auditor_organization) { Organization.make } - let(:billing_manager_organization) { Organization.make } - let(:outside_organization) { Organization.make } - - let(:other_user1) { User.make(guid: 'other_user1-guid') } - let(:other_user2) { User.make(guid: 'other_user2-guid') } - let(:other_user3) { User.make(guid: 'other_user3-guid') } - let(:other_user4) { User.make(guid: 'other_user4-guid') } - let(:outside_other_user) { User.make(guid: 'outside_other_user-guid') } + let(:user_organization) { create(:organization) } + let(:manager_organization) { create(:organization) } + let(:auditor_organization) { create(:organization) } + let(:billing_manager_organization) { create(:organization) } + let(:outside_organization) { create(:organization) } + + let(:other_user1) { create(:user, guid: 'other_user1-guid') } + let(:other_user2) { create(:user, guid: 'other_user2-guid') } + let(:other_user3) { create(:user, guid: 'other_user3-guid') } + let(:other_user4) { create(:user, guid: 'other_user4-guid') } + let(:outside_other_user) { create(:user, guid: 'outside_other_user-guid') } before do user_organization.add_user(other_user1) @@ -537,10 +537,10 @@ module VCAP::CloudController end it 'returns a list of ids for users in the same orgs that the user is a member of' do - user = User.make - org_manager = User.make - org_auditor = User.make - org_billing_manager = User.make + user = create(:user) + org_manager = create(:user) + org_auditor = create(:user) + org_billing_manager = create(:user) user_organization.add_user(user) manager_organization.add_manager(org_manager) diff --git a/spec/unit/models/services/managed_service_instance_spec.rb b/spec/unit/models/services/managed_service_instance_spec.rb index b75d2d98617..792d9bff50f 100644 --- a/spec/unit/models/services/managed_service_instance_spec.rb +++ b/spec/unit/models/services/managed_service_instance_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ManagedServiceInstance, type: :model do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:email) { Sham.email } let(:guid) { Sham.guid } @@ -24,8 +24,8 @@ module VCAP::CloudController it do expect(subject).to have_associated :service_bindings, associated_instance: lambda { |service_instance| - app = VCAP::CloudController::AppModel.make(space: service_instance.space) - ServiceBinding.make(app: app, service_instance: service_instance, credentials: Sham.service_credentials) + app = create(:app_model, space: service_instance.space) + create(:service_binding, app: app, service_instance: service_instance, credentials: Sham.service_credentials) } end end @@ -41,38 +41,38 @@ module VCAP::CloudController it 'accepts user-provided tags where combined length of all tags is exactly 2048 characters' do expect do - ManagedServiceInstance.make tags: max_tags + create(:managed_service_instance, tags: max_tags) end.not_to raise_error end it 'accepts user-provided tags where combined length of all tags is less than 2048 characters' do expect do - ManagedServiceInstance.make tags: max_tags[0..50] + create(:managed_service_instance, tags: max_tags[0..50]) end.not_to raise_error end it 'does not accept user-provided tags with combined length of over 2048 characters' do expect do - ManagedServiceInstance.make tags: max_tags + ['z'] + create(:managed_service_instance, tags: max_tags + ['z']) end.to raise_error(Sequel::ValidationFailed).with_message('tags too_long') end it 'does not accept a single user-provided tag of length greater than 2048 characters' do expect do - ManagedServiceInstance.make tags: ['a' * 2049] + create(:managed_service_instance, tags: ['a' * 2049]) end.to raise_error(Sequel::ValidationFailed).with_message('tags too_long') end it 'does not bind an app and a service instance from different app spaces' do ProcessModelFactory.make(space: service_instance.space) - service_binding = ServiceBinding.make + service_binding = create(:service_binding) expect do service_instance.add_service_binding(service_binding) end.to raise_error ServiceInstance::InvalidServiceBinding end it 'validates org and space quotas using MaxServiceInstancePolicy' do - space_quota_definition = SpaceQuotaDefinition.make + space_quota_definition = create(:space_quota_definition) service_instance.space.space_quota_definition = space_quota_definition max_memory_policies = service_instance.validation_policies.select { |policy| policy.instance_of? MaxServiceInstancePolicy } expect(max_memory_policies.length).to eq(2) @@ -81,7 +81,7 @@ module VCAP::CloudController end it 'validates org and space quotas using PaidServiceInstancePolicy' do - space_quota_definition = SpaceQuotaDefinition.make + space_quota_definition = create(:space_quota_definition) service_instance.space.space_quota_definition = space_quota_definition policies = service_instance.validation_policies.select { |policy| policy.instance_of? PaidServiceInstancePolicy } expect(policies.length).to eq(2) @@ -91,25 +91,21 @@ module VCAP::CloudController end describe '#valid_with_plan?' do - let(:original_plan) { ServicePlan.make(free: true) } + let(:original_plan) { create(:service_plan, free: true) } let(:free_quota) do - QuotaDefinition.make( - total_services: 1, - non_basic_services_allowed: false - ) + create(:quota_definition, total_services: 1, + non_basic_services_allowed: false) end - let(:org) { Organization.make(quota_definition: free_quota) } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization, quota_definition: free_quota) } + let(:space) { create(:space, organization: org) } let(:service_instance) do - ManagedServiceInstance.make( - space: space, - service_plan: original_plan - ) + create(:managed_service_instance, space: space, + service_plan: original_plan) end context 'for valid requested plans' do - let(:new_plan) { ServicePlan.make(free: true) } + let(:new_plan) { create(:service_plan, free: true) } it 'does not change the plan' do service_instance.valid_with_plan?(new_plan) @@ -122,7 +118,7 @@ module VCAP::CloudController end context 'for invalid requested plans' do - let(:new_plan) { ServicePlan.make(free: false) } + let(:new_plan) { create(:service_plan, free: false) } it 'does not change the plan' do service_instance.valid_with_plan?(new_plan) @@ -147,12 +143,12 @@ module VCAP::CloudController end it 'saves with is_gateway_service true' do - instance = ManagedServiceInstance.make + instance = create(:managed_service_instance) expect(instance.refresh.is_gateway_service).to be(true) end it 'creates a CREATED service usage event' do - instance = ManagedServiceInstance.make + instance = create(:managed_service_instance) event = ServiceUsageEvent.last expect(ServiceUsageEvent.count).to eq(1) @@ -161,14 +157,14 @@ module VCAP::CloudController end it 'allows really long dashboard urls' do - instance = ManagedServiceInstance.make + instance = create(:managed_service_instance) instance.update dashboard_url: 'a' * 1024 expect(instance.guid).to be end end describe '#save_with_new_operation' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:developer) { make_developer_for_space(service_instance.space) } before do @@ -208,10 +204,10 @@ module VCAP::CloudController end describe '#save_and_update_operation' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } let(:developer) { make_developer_for_space(service_instance.space) } let(:manager) { make_manager_for_space(service_instance.space) } - let(:admin_read_only) { set_current_user_as_admin_read_only(user: User.make) } + let(:admin_read_only) { set_current_user_as_admin_read_only(user: create(:user)) } before do last_operation = { state: 'in progress', description: '10%' } @@ -240,7 +236,7 @@ module VCAP::CloudController describe '#route_service?' do context 'when the service instance is not a route service' do - let!(:service_instance) { ManagedServiceInstance.make } + let!(:service_instance) { create(:managed_service_instance) } it 'returns false' do expect(service_instance).not_to be_route_service @@ -248,7 +244,7 @@ module VCAP::CloudController end context 'when the service instance is a route service' do - let!(:service_instance) { ManagedServiceInstance.make(:routing) } + let!(:service_instance) { create(:managed_service_instance, :routing) } it 'returns false' do expect(service_instance).to be_route_service @@ -257,8 +253,8 @@ module VCAP::CloudController end describe '#shareable?' do - let(:service) { Service.make } - let(:service_instance) { ManagedServiceInstance.make } + let(:service) { create(:service) } + let(:service_instance) { create(:managed_service_instance) } before do allow(service).to receive(:shareable?).and_return(is_shareable) @@ -283,22 +279,20 @@ module VCAP::CloudController end describe '#as_summary_json' do - let(:service_broker) { ServiceBroker.make(name: 'some_broker') } - let(:service) { Service.make(label: 'YourSQL', guid: '9876XZ', service_broker: service_broker) } + let(:service_broker) { create(:service_broker, name: 'some_broker') } + let(:service) { create(:service, label: 'YourSQL', guid: '9876XZ', service_broker: service_broker) } let(:maintenance_info) { nil } - let(:service_plan) { ServicePlan.make(name: 'Gold Plan', guid: '12763abc', service: service, maintenance_info: maintenance_info) } + let(:service_plan) { create(:service_plan, name: 'Gold Plan', guid: '12763abc', service: service, maintenance_info: maintenance_info) } let(:service_instance_maintenance_info) { nil } let(:developer) { make_developer_for_space(service_instance.space) } let(:manager) { make_manager_for_space(service_instance.space) } - subject(:service_instance) { ManagedServiceInstance.make(service_plan: service_plan, maintenance_info: service_instance_maintenance_info) } + subject(:service_instance) { create(:managed_service_instance, service_plan: service_plan, maintenance_info: service_instance_maintenance_info) } it 'returns detailed summary' do - last_operation = ServiceInstanceOperation.make( - state: 'in progress', - description: '50% all the time', - type: 'create' - ) + last_operation = create(:service_instance_operation, state: 'in progress', + description: '50% all the time', + type: 'create') service_instance.service_instance_operation = last_operation service_instance.dashboard_url = 'http://dashboard.example.com' @@ -351,96 +345,78 @@ module VCAP::CloudController end context 'quota' do - let(:free_plan) { ServicePlan.make(free: true) } - let(:paid_plan) { ServicePlan.make(free: false) } + let(:free_plan) { create(:service_plan, free: true) } + let(:paid_plan) { create(:service_plan, free: false) } let(:free_quota) do - QuotaDefinition.make( - total_services: 1, - non_basic_services_allowed: false - ) + create(:quota_definition, total_services: 1, + non_basic_services_allowed: false) end let(:paid_quota) do - QuotaDefinition.make( - total_services: 1, - non_basic_services_allowed: true - ) + create(:quota_definition, total_services: 1, + non_basic_services_allowed: true) end context 'exceed quota' do it 'raises quota error when quota is exceeded' do - org = Organization.make(quota_definition: free_quota) - space = Space.make(organization: org) - ManagedServiceInstance.make( - space: space, - service_plan: free_plan - ).save(validate: false) + org = create(:organization, quota_definition: free_quota) + space = create(:space, organization: org) + create(:managed_service_instance, space: space, + service_plan: free_plan).save(validate: false) space.refresh expect do - ManagedServiceInstance.make( - space: space, - service_plan: free_plan - ) + create(:managed_service_instance, space: space, + service_plan: free_plan) end.to raise_error(Sequel::ValidationFailed, /quota service_instance_quota_exceeded/) end it 'does not raise error when quota is not exceeded' do - org = Organization.make(quota_definition: paid_quota) - space = Space.make(organization: org) + org = create(:organization, quota_definition: paid_quota) + space = create(:space, organization: org) expect do - ManagedServiceInstance.make( - space: space, - service_plan: free_plan - ) + create(:managed_service_instance, space: space, + service_plan: free_plan) end.not_to raise_error end end context 'create free services' do it 'does not raise error when created in free quota' do - org = Organization.make(quota_definition: free_quota) - space = Space.make(organization: org) + org = create(:organization, quota_definition: free_quota) + space = create(:space, organization: org) expect do - ManagedServiceInstance.make( - space: space, - service_plan: free_plan - ) + create(:managed_service_instance, space: space, + service_plan: free_plan) end.not_to raise_error end it 'does not raise error when created in paid quota' do - org = Organization.make(quota_definition: paid_quota) - space = Space.make(organization: org) + org = create(:organization, quota_definition: paid_quota) + space = create(:space, organization: org) expect do - ManagedServiceInstance.make( - space: space, - service_plan: free_plan - ) + create(:managed_service_instance, space: space, + service_plan: free_plan) end.not_to raise_error end end context 'create paid services' do it 'raises error when created in free quota' do - org = Organization.make(quota_definition: free_quota) - space = Space.make(organization: org) + org = create(:organization, quota_definition: free_quota) + space = create(:space, organization: org) expect do - ManagedServiceInstance.make( - space: space, - service_plan: paid_plan - ) + create(:managed_service_instance, space: space, + service_plan: paid_plan) end.to raise_error(Sequel::ValidationFailed, /service_plan paid_services_not_allowed_by_quota/) end it 'does not raise error when created in paid quota' do - org = Organization.make(quota_definition: paid_quota) - space = Space.make(organization: org) + org = create(:organization, quota_definition: paid_quota) + space = create(:space, organization: org) expect do - ManagedServiceInstance.make( - space: space, - service_plan: paid_plan - ) + create(:managed_service_instance, space: space, + service_plan: paid_plan) end.not_to raise_error end end @@ -449,10 +425,8 @@ module VCAP::CloudController describe '#destroy' do context 'when the instance has bindings' do before do - ServiceBinding.make( - app: AppModel.make(space: service_instance.space), - service_instance: service_instance - ) + create(:service_binding, app: create(:app_model, space: service_instance.space), + service_instance: service_instance) end it 'raises a ForeignKeyConstraintViolation error' do @@ -471,7 +445,7 @@ module VCAP::CloudController end it 'cascade deletes all ServiceInstanceOperations for this instance' do - last_operation = ServiceInstanceOperation.make + last_operation = create(:service_instance_operation) service_instance.service_instance_operation = last_operation service_instance.destroy @@ -482,7 +456,7 @@ module VCAP::CloudController end describe '#bindable?' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } context 'when the service plan is bindable' do before { expect(service_instance.service_plan).to receive(:bindable?).and_return(true) } @@ -500,9 +474,9 @@ module VCAP::CloudController describe 'tags' do let(:instance_tags) { %w[a b c] } let(:service_tags) { %w[relational mysql] } - let(:service_instance) { ManagedServiceInstance.make(service_plan: service_plan, tags: instance_tags) } - let(:service_plan) { ServicePlan.make(service:) } - let(:service) { Service.make(tags: service_tags) } + let(:service_instance) { create(:managed_service_instance, service_plan: service_plan, tags: instance_tags) } + let(:service_plan) { create(:service_plan, service:) } + let(:service) { create(:service, tags: service_tags) } describe '#tags' do it 'returns the instance tags' do @@ -524,7 +498,7 @@ module VCAP::CloudController end context 'when the instance tags are not set' do - let(:service_instance) { ManagedServiceInstance.make service_plan: } + let(:service_instance) { create(:managed_service_instance, service_plan:) } it 'returns only the service tags' do expect(service_instance.merged_tags).to eq(service_tags) @@ -532,7 +506,7 @@ module VCAP::CloudController end context 'when the service tags are not set' do - let(:service_plan) { ServicePlan.make } + let(:service_plan) { create(:service_plan) } it 'returns only the instance tags' do expect(service_instance.merged_tags).to eq(instance_tags) @@ -581,12 +555,10 @@ module VCAP::CloudController it 'includes the last operation hash' do updated_at_time = Time.now.utc - last_operation = ServiceInstanceOperation.make( - state: 'in progress', - description: '50% all the time', - type: 'create', - updated_at: updated_at_time - ) + last_operation = create(:service_instance_operation, state: 'in progress', + description: '50% all the time', + type: 'create', + updated_at: updated_at_time) service_instance.service_instance_operation = last_operation expect(service_instance.to_hash['last_operation']).to include({ diff --git a/spec/unit/models/services/route_binding_spec.rb b/spec/unit/models/services/route_binding_spec.rb index c29255135a9..5d0cc1a056e 100644 --- a/spec/unit/models/services/route_binding_spec.rb +++ b/spec/unit/models/services/route_binding_spec.rb @@ -20,32 +20,32 @@ module VCAP::CloudController describe 'Validations' do it 'must have a service instance' do - binding.route = Route.make + binding.route = create(:route) binding.valid? expect(binding.errors[:service_instance]).to eq [:presence] end it 'must have a route' do - binding.service_instance = ManagedServiceInstance.make + binding.service_instance = create(:managed_service_instance) binding.valid? expect(binding.errors[:route]).to eq [:presence] end it 'requires a service instance to have route_forwarding enabled' do - space = Space.make - binding.route = Route.make(space:) - binding.service_instance = ManagedServiceInstance.make(space:) + space = create(:space) + binding.route = create(:route, space:) + binding.service_instance = create(:managed_service_instance, space:) binding.valid? expect(binding.errors[:service_instance]).to eq [:route_binding_not_allowed] end it 'requires a service instance and route be in the same space' do - space = Space.make - other_space = Space.make + space = create(:space) + other_space = create(:space) - service_instance = ManagedServiceInstance.make(:routing, space:) - route = Route.make space: other_space + service_instance = create(:managed_service_instance, :routing, space:) + route = create(:route, space: other_space) binding.service_instance = service_instance binding.route = route @@ -55,11 +55,11 @@ module VCAP::CloudController end context 'when a unique constraint violation occurs' do - let(:space) { Space.make } - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } + let(:route) { create(:route, space:) } before { RouteBinding.create(service_instance:, route:) } @@ -73,7 +73,7 @@ module VCAP::CloudController end it 'raises other unique constraint violations normally' do - another_route = Route.make(space:) + another_route = create(:route, space:) binding_with_duplicate_guid = RouteBinding.new( guid: RouteBinding.first.guid, service_instance: service_instance, @@ -85,11 +85,11 @@ module VCAP::CloudController end describe '#save_with_new_operation' do - let(:space) { Space.make } - let(:service_offering) { Service.make(requires: ['route_forwarding']) } - let(:service_plan) { ServicePlan.make(service: service_offering) } - let(:service_instance) { ManagedServiceInstance.make(space:, service_plan:) } - let(:route) { Route.make(space:) } + let(:space) { create(:space) } + let(:service_offering) { create(:service, requires: ['route_forwarding']) } + let(:service_plan) { create(:service_plan, service: service_offering) } + let(:service_instance) { create(:managed_service_instance, space:, service_plan:) } + let(:route) { create(:route, space:) } let(:route_service_url) { 'https://foo.com' } let(:route_binding) do RouteBinding.new( diff --git a/spec/unit/models/services/service_binding_spec.rb b/spec/unit/models/services/service_binding_spec.rb index fde838b2224..4244b71ac55 100644 --- a/spec/unit/models/services/service_binding_spec.rb +++ b/spec/unit/models/services/service_binding_spec.rb @@ -6,17 +6,17 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } describe 'Associations' do - it { is_expected.to have_associated :app, associated_instance: ->(binding) { AppModel.make(space: binding.space) } } - it { is_expected.to have_associated :service_instance, associated_instance: ->(binding) { ServiceInstance.make(space: binding.space) } } + it { is_expected.to have_associated :app, associated_instance: ->(binding) { create(:app_model, space: binding.space) } } + it { is_expected.to have_associated :service_instance, associated_instance: ->(binding) { create(:service_instance, space: binding.space) } } it 'has a v2 app through the v3 app' do - service_binding = ServiceBinding.make + service_binding = create(:service_binding) app = service_binding.app - ProcessModel.make(app: app, type: 'non-web') + create(:process_model, app: app, type: 'non-web') expect(service_binding.reload.v2_app).to be_nil - web_process = ProcessModel.make(app: app, type: 'web') + web_process = create(:process_model, app: app, type: 'web') expect(service_binding.reload.v2_app.guid).to eq(web_process.guid) end end @@ -30,7 +30,7 @@ module VCAP::CloudController it 'validates max length of name' do too_long = 'a' * (255 + 1) - binding = ServiceBinding.make + binding = create(:service_binding) binding.name = too_long expect { binding.save }.to raise_error(Sequel::ValidationFailed, /must be less than 256 characters/) @@ -39,7 +39,7 @@ module VCAP::CloudController it 'validates max length of volume_mounts' do too_long = 'a' * (65_535 + 1) - binding = ServiceBinding.make + binding = create(:service_binding) binding.volume_mounts = too_long expect { binding.save }.to raise_error(Sequel::ValidationFailed, /volume_mounts max_length/) @@ -68,7 +68,7 @@ module VCAP::CloudController let(:overly_long_url) { "syslog://example.com/#{'s' * 10_000}" } it 'refuses to save this service binding' do - binding = ServiceBinding.make + binding = create(:service_binding) binding.syslog_drain_url = overly_long_url expect { binding.save }.to raise_error Sequel::ValidationFailed, /syslog_drain_url max_length/ @@ -76,16 +76,16 @@ module VCAP::CloudController end context 'when a binding already exists with the same app_guid and name' do - let(:app) { AppModel.make } - let(:service_instance) { ServiceInstance.make(space: app.space) } + let(:app) { create(:app_model) } + let(:service_instance) { create(:service_instance, space: app.space) } context 'and the name is null' do let(:existing_binding) do - ServiceBinding.make(app: app, name: nil, service_instance: service_instance, type: 'app') + create(:service_binding, app: app, name: nil, service_instance: service_instance, type: 'app') end it 'does NOT add a uniqueness error' do - other_service_instance = ServiceInstance.make(space: existing_binding.space) + other_service_instance = create(:service_instance, space: existing_binding.space) conflict = ServiceBinding.new(app: existing_binding.app, name: nil, service_instance: other_service_instance, type: 'app') expect(conflict.valid?).to be(true) end @@ -93,7 +93,7 @@ module VCAP::CloudController end describe 'changing the binding after creation' do - subject(:binding) { ServiceBinding.make } + subject(:binding) { create(:service_binding) } describe 'the associated app' do it 'allows changing to the same app' do @@ -103,7 +103,7 @@ module VCAP::CloudController end it 'does not allow changing app after it has been set' do - binding.app = AppModel.make + binding.app = create(:app_model) expect { binding.save }.to raise_error Sequel::ValidationFailed, /app/ end end @@ -116,22 +116,22 @@ module VCAP::CloudController end it 'does not allow changing service_instance after it has been set' do - binding.service_instance = ServiceInstance.make(space: binding.app.space) + binding.service_instance = create(:service_instance, space: binding.app.space) expect { binding.save }.to raise_error Sequel::ValidationFailed, /service_instance/ end end end describe 'service instance and app space matching' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } context 'when the service instance and the app are in different spaces' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } context 'when the service instance has not been shared into the app space' do it 'is not valid' do expect do - ServiceBinding.make(service_instance:, app:) + create(:service_binding, service_instance:, app:) end.to raise_error(Sequel::ValidationFailed, /service_instance space_mismatch/) end end @@ -142,16 +142,16 @@ module VCAP::CloudController end it 'is valid' do - expect(ServiceBinding.make(service_instance:, app:)).to be_valid + expect(create(:service_binding, service_instance:, app:)).to be_valid end end end context 'when the service instance and the app are in the same space' do - let(:service_instance) { ManagedServiceInstance.make(space: app.space) } + let(:service_instance) { create(:managed_service_instance, space: app.space) } it 'is valid' do - expect(ServiceBinding.make(service_instance:, app:)).to be_valid + expect(create(:service_binding, service_instance:, app:)).to be_valid end end end @@ -171,13 +171,11 @@ module VCAP::CloudController describe 'encrypted columns' do describe 'credentials' do it_behaves_like 'a model with an encrypted attribute' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } def new_model - ServiceBinding.make( - service_instance: service_instance, - credentials: value_to_encrypt - ) + create(:service_binding, service_instance: service_instance, + credentials: value_to_encrypt) end let(:encrypted_attr) { :credentials } @@ -187,13 +185,11 @@ def new_model describe 'volume_mounts' do it_behaves_like 'a model with an encrypted attribute' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } def new_model - ServiceBinding.make( - service_instance: service_instance, - volume_mounts: value_to_encrypt - ) + create(:service_binding, service_instance: service_instance, + volume_mounts: value_to_encrypt) end let(:encrypted_attr) { :volume_mounts } @@ -202,7 +198,7 @@ def new_model end describe '#in_suspended_org?' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } subject(:service_binding) { VCAP::CloudController::ServiceBinding.new(app: app_model) } @@ -224,21 +220,19 @@ def new_model end describe 'logging service bindings' do - let(:service) { Service.make } - let(:service_plan) { ServicePlan.make(service:) } + let(:service) { create(:service) } + let(:service_plan) { create(:service_plan, service:) } let(:service_instance) do - ManagedServiceInstance.make( - service_plan: service_plan, - name: 'not a syslog drain instance' - ) + create(:managed_service_instance, service_plan: service_plan, + name: 'not a syslog drain instance') end context 'service that does not require syslog_drain' do - let(:service) { Service.make(requires: []) } + let(:service) { create(:service, requires: []) } it 'allows a non syslog_drain with a nil syslog drain url' do expect do - service_binding = ServiceBinding.make(service_instance:) + service_binding = create(:service_binding, service_instance:) service_binding.syslog_drain_url = nil service_binding.save end.not_to raise_error @@ -246,7 +240,7 @@ def new_model it 'allows a non syslog_drain with an empty syslog drain url' do expect do - service_binding = ServiceBinding.make(service_instance:) + service_binding = create(:service_binding, service_instance:) service_binding.syslog_drain_url = '' service_binding.save end.not_to raise_error @@ -254,11 +248,11 @@ def new_model end context 'service that does require a syslog_drain' do - let(:service) { Service.make(requires: ['syslog_drain']) } + let(:service) { create(:service, requires: ['syslog_drain']) } it 'allows a syslog_drain with a syslog drain url' do expect do - service_binding = ServiceBinding.make(service_instance:) + service_binding = create(:service_binding, service_instance:) service_binding.syslog_drain_url = 'http://syslogurl.com' service_binding.save end.not_to raise_error @@ -268,37 +262,37 @@ def new_model describe 'restaging' do let(:v2_app) { ProcessModelFactory.make(state: 'STARTED', instances: 1, type: 'web') } - let(:service_instance) { ManagedServiceInstance.make(space: v2_app.space) } + let(:service_instance) { create(:managed_service_instance, space: v2_app.space) } it 'does not trigger restaging when creating a binding' do - ServiceBinding.make(app: v2_app.app, service_instance: service_instance) + create(:service_binding, app: v2_app.app, service_instance: service_instance) v2_app.refresh expect(v2_app.needs_staging?).to be false end it 'does not trigger restaging when directly destroying a binding' do - binding = ServiceBinding.make(app: v2_app.app, service_instance: service_instance) + binding = create(:service_binding, app: v2_app.app, service_instance: service_instance) expect { binding.destroy }.not_to change { v2_app.refresh.needs_staging? }.from(false) end end describe '#service_instance_name' do let(:v2_app) { ProcessModelFactory.make(state: 'STARTED', instances: 1, type: 'web') } - let(:service_instance) { ManagedServiceInstance.make(space: v2_app.space) } + let(:service_instance) { create(:managed_service_instance, space: v2_app.space) } it 'returns the name of the associated service instance' do - binding = ServiceBinding.make(app: v2_app.app, service_instance: service_instance) + binding = create(:service_binding, app: v2_app.app, service_instance: service_instance) expect(binding.service_instance_name).to eq(service_instance.name) end end describe '#user_visibility_filter' do - let(:app_model) { AppModel.make } - let!(:service_instance) { ManagedServiceInstance.make } - let!(:other_binding) { ServiceBinding.make } + let(:app_model) { create(:app_model) } + let!(:service_instance) { create(:managed_service_instance) } + let!(:other_binding) { create(:service_binding) } let!(:service_binding) do service_instance.add_shared_space(app_model.space) - ServiceBinding.make(service_instance: service_instance, app: app_model) + create(:service_binding, service_instance: service_instance, app: app_model) end context "when a user is a developer in the app's space" do @@ -334,7 +328,7 @@ def new_model end context "when a user has no access to the app's space or the service instance's space" do - let(:user) { User.make } + let(:user) { create(:user) } it 'the service binding is not visible' do expect(ServiceBinding.user_visible(user).all).to be_empty @@ -351,8 +345,8 @@ def new_model end describe '#save_with_new_operation' do - let(:service_instance) { ServiceInstance.make } - let(:app) { AppModel.make(space: service_instance.space) } + let(:service_instance) { create(:service_instance) } + let(:app) { create(:app_model, space: service_instance.space) } let(:binding) do ServiceBinding.new( service_instance: service_instance, @@ -459,10 +453,10 @@ def new_model describe '#destroy' do it 'cascades deletion of related dependencies' do - binding = ServiceBinding.make - ServiceBindingLabelModel.make(key_name: 'foo', value: 'bar', service_binding: binding) - ServiceBindingAnnotationModel.make(key_name: 'baz', value: 'wow', service_binding: binding) - last_operation = ServiceBindingOperation.make + binding = create(:service_binding) + create(:service_binding_label_model, key_name: 'foo', value: 'bar', service_binding: binding) + create(:service_binding_annotation_model, key_name: 'baz', value: 'wow', service_binding: binding) + last_operation = create(:service_binding_operation) binding.service_binding_operation = last_operation binding.destroy diff --git a/spec/unit/models/services/service_broker_spec.rb b/spec/unit/models/services/service_broker_spec.rb index ceb7f9c89ed..bae95077e4d 100644 --- a/spec/unit/models/services/service_broker_spec.rb +++ b/spec/unit/models/services/service_broker_spec.rb @@ -21,8 +21,8 @@ module VCAP::CloudController it { is_expected.to have_associated :space } it 'has associated service_plans' do - service = Service.make(:v2) - service_plan = ServicePlan.make(service:) + service = create(:service) + service_plan = create(:service_plan, service:) service_broker = service.service_broker expect(service_broker.service_plans).to include(service_plan) end @@ -30,7 +30,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of name' do - existing_broker = ServiceBroker.make + existing_broker = create(:service_broker) expect do ServiceBroker.create(name: existing_broker.name, broker_url: 'http://example.com', auth_username: 'user', auth_password: 'pass') end.to raise_error(Sequel::ValidationFailed, 'Name must be unique') @@ -78,7 +78,7 @@ module VCAP::CloudController end describe '#in_transitional_state?' do - let(:broker) { ServiceBroker.make } + let(:broker) { create(:service_broker) } it 'returns true when state is SYNCHRONIZING' do broker.state = ServiceBrokerStateEnum::SYNCHRONIZING @@ -107,7 +107,7 @@ module VCAP::CloudController end describe '#available?' do - let(:broker) { ServiceBroker.make } + let(:broker) { create(:service_broker) } it 'returns false when state is SYNCHRONIZING' do broker.state = ServiceBrokerStateEnum::SYNCHRONIZING @@ -141,13 +141,13 @@ module VCAP::CloudController end describe '#destroy' do - let(:service_broker) { ServiceBroker.make } + let(:service_broker) { create(:service_broker) } it 'destroys all resources associated with the broker' do - service = Service.make(service_broker:) - service_plan = ServicePlan.make(service:) - label = ServiceBrokerLabelModel.make(resource_guid: service_broker.guid, key_name: 'foo', value: 'bar') - annotation = ServiceBrokerAnnotationModel.make(resource_guid: service_broker.guid, key_name: 'alpha', value: 'beta') + service = create(:service, service_broker:) + service_plan = create(:service_plan, service:) + label = create(:service_broker_label_model, resource_guid: service_broker.guid, key_name: 'foo', value: 'bar') + annotation = create(:service_broker_annotation_model, resource_guid: service_broker.guid, key_name: 'alpha', value: 'beta') service_broker.destroy @@ -160,9 +160,9 @@ module VCAP::CloudController context 'when a service instance exists' do it 'does not allow the broker to be destroyed' do - service = Service.make(service_broker:) - service_plan = ServicePlan.make(service:) - ManagedServiceInstance.make(service_plan:) + service = create(:service, service_broker:) + service_plan = create(:service_plan, service:) + create(:managed_service_instance, service_plan:) expect do service_broker.destroy rescue Sequel::ForeignKeyConstraintViolation @@ -193,7 +193,7 @@ module VCAP::CloudController describe 'space_scoped?' do context 'when the broker has an associated space' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:broker) do ServiceBroker.new( name: name, @@ -215,13 +215,13 @@ module VCAP::CloudController end describe 'has_service_instances?' do - let(:service_broker) { ServiceBroker.make } - let(:service) { Service.make(service_broker:) } - let!(:service_plan) { ServicePlan.make(service:) } + let(:service_broker) { create(:service_broker) } + let(:service) { create(:service, service_broker:) } + let!(:service_plan) { create(:service_plan, service:) } context 'when there are service instances' do before do - ManagedServiceInstance.make(service_plan:) + create(:managed_service_instance, service_plan:) end it 'returns true' do diff --git a/spec/unit/models/services/service_dashboard_client_spec.rb b/spec/unit/models/services/service_dashboard_client_spec.rb index 35ed4ee8867..5465d4073cf 100644 --- a/spec/unit/models/services/service_dashboard_client_spec.rb +++ b/spec/unit/models/services/service_dashboard_client_spec.rb @@ -2,8 +2,8 @@ module VCAP::CloudController RSpec.describe ServiceDashboardClient do - let(:service_broker) { ServiceBroker.make } - let(:other_broker) { ServiceBroker.make } + let(:service_broker) { create(:service_broker) } + let(:other_broker) { create(:service_broker) } let(:uaa_id) { 'claimed_client_id' } it { is_expected.to have_timestamp_columns } @@ -14,7 +14,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of uaa_id' do - existing = ServiceDashboardClient.make(service_broker:) + existing = create(:service_dashboard_client, service_broker:) expect do ServiceDashboardClient.create(uaa_id: existing.uaa_id, service_broker: other_broker) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -25,7 +25,7 @@ module VCAP::CloudController it { is_expected.to validate_presence :uaa_id } context 'when all fields are valid' do - let(:client) { ServiceDashboardClient.make_unsaved(service_broker:) } + let(:client) { build(:service_dashboard_client, service_broker:) } it 'is valid' do expect(client).to be_valid @@ -60,7 +60,7 @@ module VCAP::CloudController context 'when a claim without a broker id exists' do before do - ServiceDashboardClient.make(service_broker: nil, uaa_id: uaa_id) + create(:service_dashboard_client, service_broker: nil, uaa_id: uaa_id) end it 'claims the client for the broker' do @@ -120,7 +120,7 @@ module VCAP::CloudController context 'when one client exists with the specified uaa_id' do let!(:client) do - ServiceDashboardClient.make(uaa_id: 'some-uaa-id', service_broker: nil) + create(:service_dashboard_client, uaa_id: 'some-uaa-id', service_broker: nil) end it 'returns the client' do diff --git a/spec/unit/models/services/service_instance_operation_spec.rb b/spec/unit/models/services/service_instance_operation_spec.rb index 9b151a01a79..b3dbbe59927 100644 --- a/spec/unit/models/services/service_instance_operation_spec.rb +++ b/spec/unit/models/services/service_instance_operation_spec.rb @@ -16,7 +16,7 @@ module VCAP::CloudController } end - let(:operation) { ServiceInstanceOperation.make(operation_attributes) } + let(:operation) { create(:service_instance_operation, operation_attributes) } before do operation.this.update(updated_at: updated_at_time, created_at: created_at_time) @@ -55,13 +55,13 @@ module VCAP::CloudController describe 'when two are created with the same id' do describe 'when a ServiceInstanceOperation exists' do - let(:service_instance) { ServiceInstance.make } + let(:service_instance) { create(:service_instance) } - before { ServiceInstanceOperation.make(service_instance_id: service_instance.id) } + before { create(:service_instance_operation, service_instance_id: service_instance.id) } it 'raises an exception when creating another ServiceInstanceOperation' do expect do - ServiceInstanceOperation.make(service_instance_id: service_instance.id) + create(:service_instance_operation, service_instance_id: service_instance.id) end.to raise_error(Sequel::UniqueConstraintViolation) end end diff --git a/spec/unit/models/services/service_instance_spec.rb b/spec/unit/models/services/service_instance_spec.rb index 8d2242e5203..3eb3a33d0fd 100644 --- a/spec/unit/models/services/service_instance_spec.rb +++ b/spec/unit/models/services/service_instance_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController let(:service_instance_attrs) do { name: 'my favorite service', - space: VCAP::CloudController::Space.make + space: create(:space) } end @@ -16,9 +16,9 @@ module VCAP::CloudController describe 'Associations' do describe 'service_plan_sti_eager_load' do it 'eager loads successfully' do - service_plan = ServicePlan.make.reload - instance1 = ManagedServiceInstance.make(service_plan:) - instance2 = ManagedServiceInstance.make + service_plan = create(:service_plan).reload + instance1 = create(:managed_service_instance, service_plan:) + instance2 = create(:managed_service_instance) eager_loaded_instances = nil expect do eager_loaded_instances = ServiceInstance.eager(:service_plan_sti_eager_load).all.to_a @@ -37,8 +37,8 @@ module VCAP::CloudController describe 'changing space' do it 'fails when existing service bindings are in a different space' do - service_instance.add_service_binding(ServiceBinding.make(service_instance:)) - expect { service_instance.space = Space.make }.to raise_error ServiceInstance::InvalidServiceBinding + service_instance.add_service_binding(create(:service_binding, service_instance:)) + expect { service_instance.space = create(:space) }.to raise_error ServiceInstance::InvalidServiceBinding end end end @@ -74,7 +74,7 @@ module VCAP::CloudController end describe 'when one service instance is renamed to an existing service instance name' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:service_instance_attrs_foo) { { name: 'foo', space: space } } let(:service_instance_attrs_bar) { { name: 'bar', space: space } } @@ -110,7 +110,7 @@ module VCAP::CloudController describe 'when a ManagedServiceInstance exists' do before do - service_plan = ServicePlan.make.reload + service_plan = create(:service_plan).reload ManagedServiceInstance.create(service_instance_attrs.merge(service_plan:)) end @@ -128,10 +128,10 @@ module VCAP::CloudController end describe 'when a ManagedServiceInstance has been shared' do - let(:space) { Space.make } - let(:originating_space) { Space.make } + let(:space) { create(:space) } + let(:originating_space) { create(:space) } let(:service_instance) do - ManagedServiceInstance.make(name: 'shared-service', space: originating_space) + create(:managed_service_instance, name: 'shared-service', space: originating_space) end before do @@ -140,13 +140,13 @@ module VCAP::CloudController it 'raises an exception when creating another ManagedServiceInstance' do expect do - ManagedServiceInstance.make(name: 'shared-service', space: space) + create(:managed_service_instance, name: 'shared-service', space: space) end.to raise_error(Sequel::ValidationFailed, /name unique/) end it 'raises an exception when creating another UserProvidedServiceInstance' do expect do - UserProvidedServiceInstance.make(name: 'shared-service', space: space) + create(:user_provided_service_instance, name: 'shared-service', space: space) end.to raise_error(Sequel::ValidationFailed, /name unique/) end @@ -177,8 +177,8 @@ module VCAP::CloudController let!(:service_instance) { ServiceInstance.create(service_instance_attrs) } it 'deletes associated resources' do - label = ServiceInstanceLabelModel.make(resource_guid: service_instance.guid, key_name: 'foo', value: 'bar') - annotation = ServiceInstanceAnnotationModel.make(resource_guid: service_instance.guid, key_name: 'alpha', value: 'beta') + label = create(:service_instance_label_model, resource_guid: service_instance.guid, key_name: 'foo', value: 'bar') + annotation = create(:service_instance_annotation_model, resource_guid: service_instance.guid, key_name: 'alpha', value: 'beta') service_instance.destroy @@ -187,7 +187,7 @@ module VCAP::CloudController end it 'cascade deletes the related ServiceInstanceOperation for this instance' do - last_operation = ServiceInstanceOperation.make + last_operation = create(:service_instance_operation) service_instance.service_instance_operation = last_operation service_instance.destroy @@ -207,10 +207,10 @@ module VCAP::CloudController end describe '#update' do - let!(:service_instance) { ManagedServiceInstance.make } + let!(:service_instance) { create(:managed_service_instance) } context 'updating service_plan' do - let!(:service_plan) { ServicePlan.make } + let!(:service_plan) { create(:service_plan) } it 'creates an UPDATE service usage event' do expect do @@ -243,10 +243,10 @@ module VCAP::CloudController let(:process) { ProcessModelFactory.make(space: service_instance.space) } let(:process2) { ProcessModelFactory.make(space: service_instance.space) } let!(:service_binding) do - ServiceBinding.make(app_guid: process.app.guid, service_instance_guid: service_instance.guid) + create(:service_binding, app_guid: process.app.guid, service_instance_guid: service_instance.guid) end let!(:service_binding2) do - ServiceBinding.make(app_guid: process2.app.guid, service_instance_guid: service_instance.guid) + create(:service_binding, app_guid: process2.app.guid, service_instance_guid: service_instance.guid) end context 'and syslog_drain_url changes' do @@ -321,11 +321,9 @@ module VCAP::CloudController describe '#as_summary_json' do it 'contains name, guid, binding count and type' do - instance = VCAP::CloudController::ServiceInstance.make( - guid: 'ABCDEFG12', - name: 'Random-Number-Service' - ) - VCAP::CloudController::ServiceBinding.make(service_instance: instance) + instance = create(:service_instance, guid: 'ABCDEFG12', + name: 'Random-Number-Service') + create(:service_binding, service_instance: instance) expect(instance.as_summary_json).to eq({ 'guid' => 'ABCDEFG12', @@ -337,7 +335,7 @@ module VCAP::CloudController end describe '#in_suspended_org?' do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } subject(:service_instance) { VCAP::CloudController::ServiceInstance.new(space:) } @@ -436,7 +434,7 @@ module VCAP::CloudController end context 'when the service instance is shared' do - let(:target_space) { VCAP::CloudController::Space.make } + let(:target_space) { create(:space) } let(:target_space_dev) { make_developer_for_space(target_space) } let(:target_org_user) { make_user_for_org(target_space.organization) } let(:target_space_auditor) { make_auditor_for_space(target_space) } @@ -494,7 +492,7 @@ module VCAP::CloudController describe '#shared?' do context 'when the service instance has shared spaces' do before do - service_instance.add_shared_space(Space.make) + service_instance.add_shared_space(create(:space)) end it 'returns true' do @@ -511,7 +509,7 @@ module VCAP::CloudController describe '#has_bindings?' do it 'returns true when there are bindings' do - ServiceBinding.make(service_instance:) + create(:service_binding, service_instance:) expect(service_instance).to have_bindings end @@ -522,7 +520,7 @@ module VCAP::CloudController describe '#has_keys?' do it 'returns true when there are keys' do - ServiceKey.make(service_instance:) + create(:service_key, service_instance:) expect(service_instance).to have_keys end @@ -534,7 +532,7 @@ module VCAP::CloudController describe '#has_routes?' do it 'returns true when there are routes' do allow(service_instance).to receive(:route_service?).and_return(true) - RouteBinding.make(service_instance: service_instance, route: Route.make(space: service_instance.space)) + create(:route_binding, service_instance: service_instance, route: create(:route, space: service_instance.space)) expect(service_instance).to have_routes end @@ -544,9 +542,9 @@ module VCAP::CloudController end describe 'metadata' do - let(:service_instance) { ServiceInstance.make } - let(:annotation) { ServiceInstanceAnnotationModel.make(service_instance: service_instance, key_name: 'test', value: 'bommel') } - let(:label) { ServiceInstanceLabelModel.make(service_instance: service_instance, key_name: 'test', value: 'bommel') } + let(:service_instance) { create(:service_instance) } + let(:annotation) { create(:service_instance_annotation_model, service_instance: service_instance, key_name: 'test', value: 'bommel') } + let(:label) { create(:service_instance_label_model, service_instance: service_instance, key_name: 'test', value: 'bommel') } it 'can access a service_instance from its metadata' do expect(annotation.resource_guid).to eq(service_instance.guid) diff --git a/spec/unit/models/services/service_key_spec.rb b/spec/unit/models/services/service_key_spec.rb index 4ddf0c50d0c..8c64c02cccd 100644 --- a/spec/unit/models/services/service_key_spec.rb +++ b/spec/unit/models/services/service_key_spec.rb @@ -16,14 +16,14 @@ module VCAP::CloudController it { is_expected.to have_timestamp_columns } describe 'Associations' do - it { is_expected.to have_associated :service_instance, associated_instance: ->(service_key) { ServiceInstance.make(space: service_key.space) } } + it { is_expected.to have_associated :service_instance, associated_instance: ->(service_key) { create(:service_instance, space: service_key.space) } } end describe 'uniqueness' do it 'enforces uniqueness of name and service_instance_id' do - existing = ServiceKey.make + existing = create(:service_key) expect do - ServiceKey.make(name: existing.name, service_instance: existing.service_instance) + create(:service_key, name: existing.name, service_instance: existing.service_instance) end.to raise_error(Sequel::ValidationFailed, /unique/) end end @@ -35,7 +35,7 @@ module VCAP::CloudController it { is_expected.to validate_db_presence :credentials } context 'MaxServiceKeysPolicy' do - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } let(:existing_service_key_dataset) { double(Sequel::Dataset, count: 1) } let(:policy) { double(MaxServiceKeysPolicy) } let(:space_policy) { double(MaxServiceKeysPolicy) } @@ -53,7 +53,7 @@ module VCAP::CloudController end context 'with a space quota' do - let(:space_quota) { SpaceQuotaDefinition.make(organization: service_key.service_instance.organization) } + let(:space_quota) { create(:space_quota_definition, organization: service_key.service_instance.organization) } before do quota = space_quota @@ -88,14 +88,12 @@ module VCAP::CloudController end it_behaves_like 'a model with an encrypted attribute' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } def new_model - ServiceKey.make( - name: Sham.name, - service_instance: service_instance, - credentials: value_to_encrypt - ) + create(:service_key, name: Sham.name, + service_instance: service_instance, + credentials: value_to_encrypt) end let(:encrypted_attr) { :credentials } @@ -104,7 +102,7 @@ def new_model describe '#credhub_reference?' do context 'when it is not a credhub reference' do - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } it 'returns true' do expect(service_key.credhub_reference?).to be(false) @@ -117,7 +115,7 @@ def new_model 'credhub-ref' => '((/c/my-service-broker/my-service/faa677f5-25cd-4f1e-8921-14a9d5ab48b8/credentials))' } end - let(:service_key) { ServiceKey.make(credentials: credhub_ref) } + let(:service_key) { create(:service_key, credentials: credhub_ref) } it 'returns false' do expect(service_key.credhub_reference?).to be(true) @@ -127,7 +125,7 @@ def new_model describe '#credhub_reference' do context 'when the service key has no credentials' do - let(:service_key) { ServiceKey.make(credentials: nil) } + let(:service_key) { create(:service_key, credentials: nil) } it 'returns nil' do expect(service_key.credhub_reference).to be_nil @@ -135,7 +133,7 @@ def new_model end context 'when it does not have a credhub reference' do - let(:service_key) { ServiceKey.make } + let(:service_key) { create(:service_key) } it 'returns nil' do expect(service_key.credhub_reference).to be_nil @@ -145,7 +143,7 @@ def new_model context 'when it has a credhub reference' do let(:credential_name) { '((/c/my-service-broker/my-service/faa677f5-25cd-4f1e-8921-14a9d5ab48b8/credentials))' } let(:credhub_ref) { { 'credhub-ref' => credential_name } } - let(:service_key) { ServiceKey.make(credentials: credhub_ref) } + let(:service_key) { create(:service_key, credentials: credhub_ref) } it 'returns false' do expect(service_key.credhub_reference).to eq(credential_name) @@ -154,12 +152,12 @@ def new_model end describe 'user_visibility_filter' do - let!(:service_instance) { ManagedServiceInstance.make } - let!(:service_key) { ServiceKey.make(service_instance:) } - let!(:other_key) { ServiceKey.make } + let!(:service_instance) { create(:managed_service_instance) } + let!(:service_key) { create(:service_key, service_instance:) } + let!(:other_key) { create(:service_key) } let(:developer) { make_developer_for_space(service_instance.space) } let(:auditor) { make_auditor_for_space(service_instance.space) } - let(:other_user) { User.make } + let(:other_user) { create(:user, guid: SecureRandom.uuid) } it 'only open to the space developers' do visible_to_developer = ServiceKey.user_visible(developer) @@ -173,7 +171,7 @@ def new_model end describe '#save_with_attributes_and_new_operation' do - let(:service_instance) { ServiceInstance.make } + let(:service_instance) { create(:service_instance) } let(:binding) do ServiceKey.new( service_instance: service_instance, @@ -266,10 +264,10 @@ def new_model describe '#destroy' do it 'cascades deletion of related dependencies' do - binding = ServiceKey.make - ServiceKeyLabelModel.make(key_name: 'foo', value: 'bar', service_key: binding) - ServiceKeyAnnotationModel.make(key_name: 'baz', value: 'wow', service_key: binding) - last_operation = ServiceKeyOperation.make + binding = create(:service_key) + create(:service_key_label_model, key_name: 'foo', value: 'bar', service_key: binding) + create(:service_key_annotation_model, key_name: 'baz', value: 'wow', service_key: binding) + last_operation = create(:service_key_operation) binding.service_key_operation = last_operation binding.destroy diff --git a/spec/unit/models/services/service_operation_shared.rb b/spec/unit/models/services/service_operation_shared.rb index 768297f12d1..f03846b43fa 100644 --- a/spec/unit/models/services/service_operation_shared.rb +++ b/spec/unit/models/services/service_operation_shared.rb @@ -1,5 +1,5 @@ RSpec.shared_examples 'a model including the ServiceOperationMixin' do |service_class, operation_association, operation_class, service_key| - let(:service) { service_class.make } + let(:service) { create(service_class.name.demodulize.underscore.to_sym) } before do @service = service diff --git a/spec/unit/models/services/service_plan_spec.rb b/spec/unit/models/services/service_plan_spec.rb index f9e49c3dfa8..7f071619062 100644 --- a/spec/unit/models/services/service_plan_spec.rb +++ b/spec/unit/models/services/service_plan_spec.rb @@ -7,16 +7,16 @@ module VCAP::CloudController describe 'Associations' do it { is_expected.to have_associated :service } it { is_expected.to have_associated :service_instances, class: ManagedServiceInstance } - it { is_expected.to have_associated :service_plan_visibilities, { test_instance: ServicePlan.make(public: false) } } + it { is_expected.to have_associated :service_plan_visibilities, { test_instance: create(:service_plan, public: false) } } it { is_expected.to have_associated :labels, class: ServicePlanLabelModel } it { is_expected.to have_associated :annotations, class: ServicePlanAnnotationModel } end describe 'uniqueness' do it 'enforces uniqueness of name within a service' do - existing = ServicePlan.make + existing = create(:service_plan) expect do - ServicePlan.make(name: existing.name, service: existing.service) + create(:service_plan, name: existing.name, service: existing.service) end.to raise_error(Sequel::ValidationFailed, /already has a plan named/) end end @@ -29,8 +29,8 @@ module VCAP::CloudController it { is_expected.to strip_whitespace :name } context 'when the unique_id is not unique across different services' do - let(:existing_service_plan) { ServicePlan.make } - let(:service_plan) { ServicePlan.make(unique_id: existing_service_plan.unique_id, service: Service.make) } + let(:existing_service_plan) { create(:service_plan) } + let(:service_plan) { create(:service_plan, unique_id: existing_service_plan.unique_id, service: create(:service)) } it 'is valid' do expect(service_plan).to be_valid @@ -39,12 +39,12 @@ module VCAP::CloudController context 'for plans belonging to private brokers' do it 'does not allow the plan to be public' do - space = Space.make - private_broker = ServiceBroker.make(space:) - service = Service.make service_broker: private_broker + space = create(:space) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker) expect do - ServicePlan.make service: service, public: true + create(:service_plan, service: service, public: true) end.to raise_error Sequel::ValidationFailed, 'public may not be true for plans belonging to private service brokers' end end @@ -90,20 +90,20 @@ module VCAP::CloudController describe '#save' do context 'before_filters' do it 'defaults public to true if a value is not supplied' do - service = Service.make + service = create(:service) - expect(ServicePlan.make(service: service, public: false).public).to be(false) - expect(ServicePlan.make(service: service, public: true).public).to be(true) - expect(ServicePlan.make(service:).public).to be(true) + expect(create(:service_plan, service: service, public: false).public).to be(false) + expect(create(:service_plan, service: service, public: true).public).to be(true) + expect(create(:service_plan, service:).public).to be(true) end it 'defaults to false if a value is not supplied but a private broker is' do - space = Space.make - private_broker = ServiceBroker.make space_id: space.id, space_guid: space.guid - service = Service.make service_broker: private_broker + space = create(:space) + private_broker = create(:service_broker, space_id: space.id, space_guid: space.guid) + service = create(:service, service_broker: private_broker) - expect(ServicePlan.make(service: service, public: false).public).to be(false) - expect(ServicePlan.make(service:).public).to be(false) + expect(create(:service_plan, service: service, public: false).public).to be(false) + expect(create(:service_plan, service:).public).to be(false) end end @@ -112,7 +112,7 @@ module VCAP::CloudController let(:attrs) { { unique_id: nil } } it 'generates guid for the unique_id' do - plan = ServicePlan.make(attrs) + plan = create(:service_plan, attrs) expect(plan.unique_id).to be_a_guid end end @@ -121,25 +121,25 @@ module VCAP::CloudController let(:attrs) { { unique_id: Sham.guid } } it 'persists the given unique_id' do - plan = ServicePlan.make(attrs) + plan = create(:service_plan, attrs) expect(plan.unique_id).to eq(attrs[:unique_id]) end end context 'when a plan with the same name has already been added for this service' do - let(:service) { Service.make(label: 'my-service') } + let(:service) { create(:service, label: 'my-service') } - before { ServicePlan.make(name: 'dumbo', service_id: service.id) } + before { create(:service_plan, name: 'dumbo', service_id: service.id) } it 'throws a useful error' do - expect { ServicePlan.make(name: 'dumbo', service_id: service.id) }. + expect { create(:service_plan, name: 'dumbo', service_id: service.id) }. to raise_exception('Plan names must be unique within a service. Service my-service already has a plan named dumbo') end end end context 'on update' do - let(:plan) { ServicePlan.make } + let(:plan) { create(:service_plan) } context 'when the unique_id is unset' do before { plan.unique_id = nil } @@ -162,12 +162,12 @@ module VCAP::CloudController end describe '#destroy' do - let(:service_plan) { ServicePlan.make(public: false) } + let(:service_plan) { create(:service_plan, public: false) } it 'destroys associated dependencies' do - service_plan_visibility = ServicePlanVisibility.make(service_plan:) - service_plan_label = ServicePlanLabelModel.make(resource_guid: service_plan.guid, key_name: 'flavor', value: 'pear') - service_plan_annotation = ServicePlanAnnotationModel.make(resource_guid: service_plan.guid, key_name: 'colour', value: 'purple') + service_plan_visibility = create(:service_plan_visibility, service_plan:) + service_plan_label = create(:service_plan_label_model, resource_guid: service_plan.guid, key_name: 'flavor', value: 'pear') + service_plan_annotation = create(:service_plan_annotation_model, resource_guid: service_plan.guid, key_name: 'colour', value: 'purple') service_plan.destroy @@ -177,8 +177,8 @@ module VCAP::CloudController end it 'cannot be destroyed if associated service_instances exist' do - service_plan = ServicePlan.make - ManagedServiceInstance.make(service_plan:) + service_plan = create(:service_plan) + create(:managed_service_instance, service_plan:) expect do service_plan.destroy end.to raise_error Sequel::DatabaseError, /foreign key/ @@ -186,16 +186,16 @@ module VCAP::CloudController end describe '.plan_ids_from_private_brokers' do - let(:organization) { Organization.make } - let(:space_1) { Space.make(organization: organization, id: Space.count + 9998) } - let(:space_2) { Space.make(organization: organization, id: Space.count + 9999) } - let(:user) { User.make } - let(:broker_1) { ServiceBroker.make(space: space_1) } - let(:broker_2) { ServiceBroker.make(space: space_2) } - let(:service_1) { Service.make(service_broker: broker_1) } - let(:service_2) { Service.make(service_broker: broker_2) } - let!(:service_plan_1) { ServicePlan.make(service: service_1, public: false) } - let!(:service_plan_2) { ServicePlan.make(service: service_2, public: false) } + let(:organization) { create(:organization) } + let(:space_1) { create(:space, organization: organization, id: Space.count + 9998) } + let(:space_2) { create(:space, organization: organization, id: Space.count + 9999) } + let(:user) { create(:user) } + let(:broker_1) { create(:service_broker, space: space_1) } + let(:broker_2) { create(:service_broker, space: space_2) } + let(:service_1) { create(:service, service_broker: broker_1) } + let(:service_2) { create(:service, service_broker: broker_2) } + let!(:service_plan_1) { create(:service_plan, service: service_1, public: false) } + let!(:service_plan_2) { create(:service_plan, service: service_2, public: false) } before do organization.add_user user @@ -208,9 +208,9 @@ module VCAP::CloudController end it "doesn't return plans for private services in spaces the user doesn't have roles in" do - broker = ServiceBroker.make - service = Service.make(service_broker: broker) - plan = ServicePlan.make(service: service, public: false) + broker = create(:service_broker) + service = create(:service, service_broker: broker) + plan = create(:service_plan, service: service, public: false) expect(ServicePlan.plan_ids_from_private_brokers(user).select_map(:service_plans__id)).not_to include plan end @@ -218,21 +218,21 @@ module VCAP::CloudController describe '.plan_ids_for_visible_service_instances' do context 'when the service plans have service instances associated with them' do - let(:organization) { Organization.make } - let(:space) { Space.make(organization:) } - let(:other_space) { Space.make(organization:) } - let(:user) { User.make } - let(:broker) { ServiceBroker.make } - let(:service) { Service.make(service_broker: broker) } - let(:service_plan) { ServicePlan.make(service: service, public: true, active: true) } - let(:non_public_plan) { ServicePlan.make(service: service, public: false, active: true) } - let(:inactive_plan) { ServicePlan.make(service: service, public: true, active: false) } - let(:other_plan) { ServicePlan.make(service: service, public: true, active: true) } - let!(:service_instance) { ManagedServiceInstance.make(service_plan:, space:) } - let!(:service_instance2) { ManagedServiceInstance.make(service_plan: non_public_plan, space: space) } - let!(:service_instance3) { ManagedServiceInstance.make(service_plan: inactive_plan, space: space) } - let!(:user_provided_service_instance) { UserProvidedServiceInstance.make(space:) } - let!(:other_service_instance) { ManagedServiceInstance.make(service_plan: other_plan, space: other_space) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } + let(:other_space) { create(:space, organization:) } + let(:user) { create(:user) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } + let(:service_plan) { create(:service_plan, service: service, public: true, active: true) } + let(:non_public_plan) { create(:service_plan, service: service, public: false, active: true) } + let(:inactive_plan) { create(:service_plan, service: service, public: true, active: false) } + let(:other_plan) { create(:service_plan, service: service, public: true, active: true) } + let!(:service_instance) { create(:managed_service_instance, service_plan:, space:) } + let!(:service_instance2) { create(:managed_service_instance, service_plan: non_public_plan, space: space) } + let!(:service_instance3) { create(:managed_service_instance, service_plan: inactive_plan, space: space) } + let!(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } + let!(:other_service_instance) { create(:managed_service_instance, service_plan: other_plan, space: other_space) } before do organization.add_user user @@ -256,13 +256,13 @@ module VCAP::CloudController describe '.organization_visible' do it 'returns plans that are visible to the organization' do - hidden_private_plan = ServicePlan.make(public: false) - visible_public_plan = ServicePlan.make(public: true) - visible_private_plan = ServicePlan.make(public: false) - inactive_public_plan = ServicePlan.make(public: true, active: false) + hidden_private_plan = create(:service_plan, public: false) + visible_public_plan = create(:service_plan, public: true) + visible_private_plan = create(:service_plan, public: false) + inactive_public_plan = create(:service_plan, public: true, active: false) - organization = Organization.make - ServicePlanVisibility.make(organization: organization, service_plan: visible_private_plan) + organization = create(:organization) + create(:service_plan_visibility, organization: organization, service_plan: visible_private_plan) visible = ServicePlan.organization_visible(organization).all expect(visible).to include(visible_public_plan) @@ -274,23 +274,23 @@ module VCAP::CloudController describe '.space_visible' do it 'returns plans that are visible to the space' do - hidden_private_plan = ServicePlan.make(public: false) - visible_public_plan = ServicePlan.make(public: true) - visible_private_plan = ServicePlan.make(public: false) - inactive_public_plan = ServicePlan.make(public: true, active: false) + hidden_private_plan = create(:service_plan, public: false) + visible_public_plan = create(:service_plan, public: true) + visible_private_plan = create(:service_plan, public: false) + inactive_public_plan = create(:service_plan, public: true, active: false) - organization = Organization.make - space = Space.make(organization:) - ServicePlanVisibility.make(organization: organization, service_plan: visible_private_plan) + organization = create(:organization) + space = create(:space, organization:) + create(:service_plan_visibility, organization: organization, service_plan: visible_private_plan) - space_scoped_broker1 = ServiceBroker.make(space:) - space_scoped_broker1_service = Service.make(service_broker: space_scoped_broker1) - space_scoped_broker1_plan = ServicePlan.make(service: space_scoped_broker1_service) - space_scoped_broker1_plan_inactive = ServicePlan.make(service: space_scoped_broker1_service, active: false) + space_scoped_broker1 = create(:service_broker, space:) + space_scoped_broker1_service = create(:service, service_broker: space_scoped_broker1) + space_scoped_broker1_plan = create(:service_plan, service: space_scoped_broker1_service) + space_scoped_broker1_plan_inactive = create(:service_plan, service: space_scoped_broker1_service, active: false) - space_scoped_broker2 = ServiceBroker.make(space: Space.make) - space_scoped_broker2_service = Service.make(service_broker: space_scoped_broker2) - space_scoped_broker2_plan = ServicePlan.make(service: space_scoped_broker2_service) + space_scoped_broker2 = create(:service_broker, space: create(:space)) + space_scoped_broker2_service = create(:service, service_broker: space_scoped_broker2) + space_scoped_broker2_plan = create(:service_plan, service: space_scoped_broker2_service) visible = ServicePlan.space_visible(space).all expect(visible).to include(visible_public_plan) @@ -306,11 +306,11 @@ module VCAP::CloudController describe '#visible_in_space?' do it 'returns true when included in .space_visible set' do - visible_private_plan = ServicePlan.make(public: false) + visible_private_plan = create(:service_plan, public: false) - organization = Organization.make - space = Space.make(organization:) - ServicePlanVisibility.make(organization: organization, service_plan: visible_private_plan) + organization = create(:organization) + space = create(:space, organization:) + create(:service_plan_visibility, organization: organization, service_plan: visible_private_plan) visible = ServicePlan.space_visible(space).all expect(visible).to include(visible_private_plan) @@ -318,9 +318,9 @@ module VCAP::CloudController end it 'returns false when not included in .space_visible set' do - hidden_private_plan = ServicePlan.make(public: false) - organization = Organization.make - space = Space.make(organization:) + hidden_private_plan = create(:service_plan, public: false) + organization = create(:organization) + space = create(:space, organization:) visible = ServicePlan.space_visible(space).all expect(visible).not_to include(hidden_private_plan) @@ -329,19 +329,19 @@ module VCAP::CloudController end describe '#bindable?' do - let(:service_plan) { ServicePlan.make(service: service, bindable: plan_bindable) } + let(:service_plan) { create(:service_plan, service: service, bindable: plan_bindable) } context 'when the plan does not specify if it is bindable' do let(:plan_bindable) { nil } context 'and the service is bindable' do - let(:service) { Service.make(bindable: true) } + let(:service) { create(:service, bindable: true) } specify { expect(service_plan).to be_bindable } end context 'and the service is unbindable' do - let(:service) { Service.make(bindable: false) } + let(:service) { create(:service, bindable: false) } specify { expect(service_plan).not_to be_bindable } end @@ -351,13 +351,13 @@ module VCAP::CloudController let(:plan_bindable) { false } context 'and the service is bindable' do - let(:service) { Service.make(bindable: true) } + let(:service) { create(:service, bindable: true) } specify { expect(service_plan).not_to be_bindable } end context 'and the service is unbindable' do - let(:service) { Service.make(bindable: false) } + let(:service) { create(:service, bindable: false) } specify { expect(service_plan).not_to be_bindable } end @@ -367,13 +367,13 @@ module VCAP::CloudController let(:plan_bindable) { true } context 'and the service is bindable' do - let(:service) { Service.make(bindable: true) } + let(:service) { create(:service, bindable: true) } specify { expect(service_plan).to be_bindable } end context 'and the service is unbindable' do - let(:service) { Service.make(bindable: false) } + let(:service) { create(:service, bindable: false) } specify { expect(service_plan).to be_bindable } end @@ -381,19 +381,19 @@ module VCAP::CloudController end describe '#plan_updateable?' do - let(:service_plan) { ServicePlan.make(service:, plan_updateable:) } + let(:service_plan) { create(:service_plan, service:, plan_updateable:) } context 'when the plan does not specify if it is updateable' do let(:plan_updateable) { nil } context 'and the service is plan_updateable' do - let(:service) { Service.make(plan_updateable: true) } + let(:service) { create(:service, plan_updateable: true) } specify { expect(service_plan).to be_plan_updateable } end context 'and the service is not plan_updateable' do - let(:service) { Service.make(plan_updateable: false) } + let(:service) { create(:service, plan_updateable: false) } specify { expect(service_plan).not_to be_plan_updateable } end @@ -403,13 +403,13 @@ module VCAP::CloudController let(:plan_updateable) { false } context 'and the service is plan_updateable' do - let(:service) { Service.make(plan_updateable: true) } + let(:service) { create(:service, plan_updateable: true) } specify { expect(service_plan).not_to be_plan_updateable } end context 'and the service is not plan_updateable' do - let(:service) { Service.make(plan_updateable: false) } + let(:service) { create(:service, plan_updateable: false) } specify { expect(service_plan).not_to be_plan_updateable } end @@ -419,13 +419,13 @@ module VCAP::CloudController let(:plan_updateable) { true } context 'and the service is updateable' do - let(:service) { Service.make(plan_updateable: true) } + let(:service) { create(:service, plan_updateable: true) } specify { expect(service_plan).to be_plan_updateable } end context 'and the service is not updateable' do - let(:service) { Service.make(plan_updateable: false) } + let(:service) { create(:service, plan_updateable: false) } specify { expect(service_plan).to be_plan_updateable } end @@ -435,7 +435,7 @@ module VCAP::CloudController let(:plan_updateable) { nil } context 'and the service updateable is also nil' do - let(:service) { Service.make(plan_updateable: nil) } + let(:service) { create(:service, plan_updateable: nil) } specify { expect(service_plan.plan_updateable?).to be(false) } end @@ -444,16 +444,16 @@ module VCAP::CloudController describe '#broker_space_scoped?' do it 'returns true if the plan belongs to a service that belongs to a private broker' do - space = Space.make - broker = ServiceBroker.make(space:) - service = Service.make service_broker: broker - plan = ServicePlan.make(service:) + space = create(:space) + broker = create(:service_broker, space:) + service = create(:service, service_broker: broker) + plan = create(:service_plan, service:) expect(plan).to be_broker_space_scoped end it 'returns false if the plan belongs to a service that belongs to a public broker' do - plan = ServicePlan.make + plan = create(:service_plan) expect(plan).not_to be_broker_space_scoped end @@ -461,28 +461,26 @@ module VCAP::CloudController describe '.visibility_type' do it 'returns "public" for public plans' do - plan = ServicePlan.make(public: true) + plan = create(:service_plan, public: true) expect(plan.visibility_type).to eq('public') end it 'returns "admin" for private plans' do - plan = ServicePlan.make(public: false) + plan = create(:service_plan, public: false) expect(plan.visibility_type).to eq('admin') end it 'returns "space" for plans from space-scoped brokers' do - plan = ServicePlan.make(service: Service.make(service_broker: ServiceBroker.make(space: Space.make))) + plan = create(:service_plan, service: create(:service, service_broker: create(:service_broker, space: create(:space)))) expect(plan.visibility_type).to eq('space') end it 'returns "organization" for org restricted plans' do - plan = ServicePlanVisibility.make( - service_plan: ServicePlan.make(public: false), - organization: Organization.make - ).service_plan + plan = create(:service_plan_visibility, service_plan: create(:service_plan, public: false), + organization: create(:organization)).service_plan expect(plan.visibility_type).to eq('organization') end diff --git a/spec/unit/models/services/service_plan_visibility_spec.rb b/spec/unit/models/services/service_plan_visibility_spec.rb index 1b0d81b5df9..a705f654c08 100644 --- a/spec/unit/models/services/service_plan_visibility_spec.rb +++ b/spec/unit/models/services/service_plan_visibility_spec.rb @@ -11,7 +11,7 @@ module VCAP::CloudController describe 'uniqueness' do it 'enforces uniqueness of organization and service plan combination' do - existing = ServicePlanVisibility.make + existing = create(:service_plan_visibility) expect do ServicePlanVisibility.create(service_plan: existing.service_plan, organization: existing.organization) end.to raise_error(Sequel::ValidationFailed, /unique/) @@ -24,11 +24,11 @@ module VCAP::CloudController context 'when the service plan visibility is for a private broker' do it 'returns a validation error' do - organization = Organization.make - space = Space.make(organization:) - private_broker = ServiceBroker.make(space:) - service = Service.make service_broker: private_broker, active: true - plan = ServicePlan.make(service: service, public: false) + organization = create(:organization) + space = create(:space, organization:) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + plan = create(:service_plan, service: service, public: false) expect do ServicePlanVisibility.create service_plan: plan, organization: organization @@ -38,10 +38,10 @@ module VCAP::CloudController context 'when the service plan visibility is for a public plan' do it 'returns a validation error' do - organization = Organization.make - private_broker = ServiceBroker.make - service = Service.make service_broker: private_broker, active: true - plan = ServicePlan.make(service: service, public: true) + organization = create(:organization) + private_broker = create(:service_broker) + service = create(:service, service_broker: private_broker, active: true) + plan = create(:service_plan, service: service, public: true) expect do ServicePlanVisibility.create service_plan: plan, organization: organization @@ -56,25 +56,25 @@ module VCAP::CloudController end describe '.visible_private_plan_ids_for_user(user)' do - let!(:user) { User.make } - let!(:org1) { Organization.make } - let!(:org2) { Organization.make } - let!(:org3) { Organization.make } + let!(:user) { create(:user) } + let!(:org1) { create(:organization) } + let!(:org2) { create(:organization) } + let!(:org3) { create(:organization) } - let!(:plan_visible_to_both) { ServicePlan.make(public: false) } - let!(:plan_visible_to_org1) { ServicePlan.make(public: false) } - let!(:plan_visible_to_org2) { ServicePlan.make(public: false) } - let!(:plan_hidden_from_both) { ServicePlan.make(public: false) } - let!(:plan_not_visible_to_users_org) { ServicePlan.make(public: false) } + let!(:plan_visible_to_both) { create(:service_plan, public: false) } + let!(:plan_visible_to_org1) { create(:service_plan, public: false) } + let!(:plan_visible_to_org2) { create(:service_plan, public: false) } + let!(:plan_hidden_from_both) { create(:service_plan, public: false) } + let!(:plan_not_visible_to_users_org) { create(:service_plan, public: false) } before do user.add_organization(org1) user.add_organization(org2) - ServicePlanVisibility.make(organization: org1, service_plan: plan_visible_to_both) - ServicePlanVisibility.make(organization: org2, service_plan: plan_visible_to_both) - ServicePlanVisibility.make(organization: org1, service_plan: plan_visible_to_org1) - ServicePlanVisibility.make(organization: org2, service_plan: plan_visible_to_org2) - ServicePlanVisibility.make(organization: org3, service_plan: plan_not_visible_to_users_org) + create(:service_plan_visibility, organization: org1, service_plan: plan_visible_to_both) + create(:service_plan_visibility, organization: org2, service_plan: plan_visible_to_both) + create(:service_plan_visibility, organization: org1, service_plan: plan_visible_to_org1) + create(:service_plan_visibility, organization: org2, service_plan: plan_visible_to_org2) + create(:service_plan_visibility, organization: org3, service_plan: plan_not_visible_to_users_org) end it "returns the list of ids for plans the user's orgs can see" do @@ -84,12 +84,12 @@ module VCAP::CloudController end describe '.visible_private_plan_ids_for_organization' do - let!(:organization) { Organization.make } - let!(:visible_plan) { ServicePlan.make(public: false) } - let!(:hidden_plan) { ServicePlan.make(public: false) } + let!(:organization) { create(:organization) } + let!(:visible_plan) { create(:service_plan, public: false) } + let!(:hidden_plan) { create(:service_plan, public: false) } before do - ServicePlanVisibility.make(organization: organization, service_plan: visible_plan) + create(:service_plan_visibility, organization: organization, service_plan: visible_plan) end it "returns the list of ids for plans the user's orgs can see" do diff --git a/spec/unit/models/services/service_spec.rb b/spec/unit/models/services/service_spec.rb index 0bfff917c82..7e132685554 100644 --- a/spec/unit/models/services/service_spec.rb +++ b/spec/unit/models/services/service_spec.rb @@ -17,7 +17,7 @@ module VCAP::CloudController describe 'urls' do it 'validates format of info_url' do - service = Service.make_unsaved(info_url: 'bogus_url', service_broker: nil) + service = build(:service, info_url: 'bogus_url', service_broker: nil) expect(service).not_to be_valid expect(service.errors.on(:info_url)).to include 'must be a valid url' end @@ -27,7 +27,7 @@ module VCAP::CloudController it 'raises an error on save' do super_long_tag = 'a' * 2049 expect do - Service.make(label: 'super-long-service', tags: [super_long_tag]) + create(:service, label: 'super-long-service', tags: [super_long_tag]) end.to raise_error('Service tags for service super-long-service must be 2048 characters or less.') end end @@ -48,11 +48,11 @@ module VCAP::CloudController end describe '#destroy' do - let(:service_offering) { Service.make } + let(:service_offering) { create(:service) } it 'deletes associated resources' do - label = ServiceOfferingLabelModel.make(resource_guid: service_offering.guid, key_name: 'foo', value: 'bar') - annotation = ServiceOfferingAnnotationModel.make(resource_guid: service_offering.guid, key_name: 'alpha', value: 'beta') + label = create(:service_offering_label_model, resource_guid: service_offering.guid, key_name: 'foo', value: 'bar') + annotation = create(:service_offering_annotation_model, resource_guid: service_offering.guid, key_name: 'alpha', value: 'beta') service_offering.destroy @@ -62,16 +62,16 @@ module VCAP::CloudController end describe '#user_visibility_filter' do - let(:private_service) { Service.make } - let(:public_service) { Service.make } - let(:nonadmin_org) { Organization.make } - let(:admin_user) { User.make } - let(:nonadmin_user) { User.make } - let!(:private_plan) { ServicePlan.make service: private_service, public: false } + let(:private_service) { create(:service) } + let(:public_service) { create(:service) } + let(:nonadmin_org) { create(:organization) } + let(:admin_user) { create(:user) } + let(:nonadmin_user) { create(:user) } + let!(:private_plan) { create(:service_plan, service: private_service, public: false) } before do - ServicePlan.make service: public_service, public: true - ServicePlan.make service: public_service, public: false + create(:service_plan, service: public_service, public: true) + create(:service_plan, service: public_service, public: false) VCAP::CloudController::SecurityContext.set(admin_user, { 'scope' => [VCAP::CloudController::Roles::CLOUD_CONTROLLER_ADMIN_SCOPE] }) nonadmin_user.add_organization nonadmin_org VCAP::CloudController::SecurityContext.clear @@ -105,61 +105,61 @@ def records(user) describe 'services from private brokers' do it 'does not return the services to users with no roles in the space' do - space = Space.make - space_developer = User.make + space = create(:space) + space_developer = create(:user) space.organization.add_user space_developer - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker, active: true) - ServicePlan.make(service: service, active: true, public: false) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + create(:service_plan, service: service, active: true, public: false) records = Service.user_visible(space_developer).all expect(records.map(&:guid)).not_to include service.guid end it "returns services from private brokers to space developers in that private broker's space" do - space = Space.make - space_developer = User.make + space = create(:space) + space_developer = create(:user) space.organization.add_user space_developer space.add_developer space_developer - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker, active: true) - ServicePlan.make(service: service, active: true, public: false) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + create(:service_plan, service: service, active: true, public: false) records = Service.user_visible(space_developer).all expect(records.map(&:guid)).to include service.guid end it "returns services from private brokers to space auditors in that private broker's space" do - space = Space.make - space_auditor = User.make + space = create(:space) + space_auditor = create(:user) space.organization.add_user space_auditor space.add_auditor space_auditor - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker, active: true) - ServicePlan.make(service: service, active: true, public: false) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + create(:service_plan, service: service, active: true, public: false) records = Service.user_visible(space_auditor).all expect(records.map(&:guid)).to include service.guid end it "returns services from private brokers to space managers in that private broker's space" do - space = Space.make - space_manager = User.make + space = create(:space) + space_manager = create(:user) space.organization.add_user space_manager space.add_manager space_manager - private_broker = ServiceBroker.make(space:) - service = Service.make(service_broker: private_broker, active: true) - ServicePlan.make(service: service, active: true, public: false) + private_broker = create(:service_broker, space:) + service = create(:service, service_broker: private_broker, active: true) + create(:service_plan, service: service, active: true, public: false) records = Service.user_visible(space_manager).all expect(records).to include service end @@ -168,13 +168,13 @@ def records(user) describe '#tags' do it 'returns the provided service tags' do - service = Service.make(tags: %w[a b c]) + service = create(:service, tags: %w[a b c]) expect(service.tags).to match_array(%w[a b c]) end context 'null tags in the database' do it 'returns an empty array' do - service = Service.make(tags: nil) + service = create(:service, tags: nil) expect(service.tags).to eq [] end end @@ -183,7 +183,7 @@ def records(user) describe '#requires' do context 'null requires in the database' do it 'returns an empty array' do - service = Service.make(requires: nil) + service = create(:service, requires: nil) expect(service.requires).to eq [] end end @@ -193,7 +193,7 @@ def records(user) context 'with a URL in the database' do it 'returns the appropriate URL' do sham_url = Sham.url - service = Service.make(documentation_url: sham_url) + service = create(:service, documentation_url: sham_url) expect(service.documentation_url).to eq sham_url end end @@ -203,7 +203,7 @@ def records(user) context 'with a long description in the database' do it 'return the appropriate long description' do sham_long_description = Sham.long_description - service = Service.make(long_description: sham_long_description) + service = create(:service, long_description: sham_long_description) expect(service.long_description).to eq sham_long_description end end @@ -211,16 +211,16 @@ def records(user) describe '#purge' do let!(:event_repository) { double(Repositories::ServiceUsageEventRepository) } - let!(:service_plan) { ServicePlan.make(service: service, public: false) } - let!(:service_plan_visibility) { ServicePlanVisibility.make(service_plan:) } - let!(:service_instance) { ManagedServiceInstance.make(service_plan:) } - let!(:service_binding) { ServiceBinding.make(service_instance:) } + let!(:service_plan) { create(:service_plan, service: service, public: false) } + let!(:service_plan_visibility) { create(:service_plan_visibility, service_plan:) } + let!(:service_instance) { create(:managed_service_instance, service_plan:) } + let!(:service_binding) { create(:service_binding, service_instance:) } - let!(:service_plan_2) { ServicePlan.make(service: service, public: false) } - let!(:service_plan_visibility_2) { ServicePlanVisibility.make(service_plan: service_plan_2) } - let!(:service_instance_2) { ManagedServiceInstance.make(service_plan: service_plan_2) } - let!(:service_binding_2) { ServiceBinding.make(service_instance: service_instance_2) } - let!(:service) { Service.make } + let!(:service_plan_2) { create(:service_plan, service: service, public: false) } + let!(:service_plan_visibility_2) { create(:service_plan_visibility, service_plan: service_plan_2) } + let!(:service_instance_2) { create(:managed_service_instance, service_plan: service_plan_2) } + let!(:service_binding_2) { create(:service_binding, service_instance: service_instance_2) } + let!(:service) { create(:service) } before do allow(Repositories::ServiceUsageEventRepository).to receive(:new).and_return(event_repository) @@ -274,7 +274,7 @@ def records(user) end context 'when deleting a service instance fails' do - let(:service) { Service.make } + let(:service) { create(:service) } before do allow_any_instance_of(VCAP::CloudController::ServiceInstance).to receive(:destroy).and_raise('Boom') @@ -288,7 +288,7 @@ def records(user) end context 'when deleting a service plan fails' do - let(:service) { Service.make } + let(:service) { create(:service) } before do allow_any_instance_of(VCAP::CloudController::ServicePlan).to receive(:destroy).and_raise('Boom') @@ -325,15 +325,15 @@ def records(user) describe '.organization_visible' do it 'returns plans that are visible to the organization' do - hidden_private_plan = ServicePlan.make(public: false) + hidden_private_plan = create(:service_plan, public: false) hidden_private_service = hidden_private_plan.service - visible_public_plan = ServicePlan.make(public: true) + visible_public_plan = create(:service_plan, public: true) visible_public_service = visible_public_plan.service - visible_private_plan = ServicePlan.make(public: false) + visible_private_plan = create(:service_plan, public: false) visible_private_service = visible_private_plan.service - organization = Organization.make - ServicePlanVisibility.make(organization: organization, service_plan: visible_private_plan) + organization = create(:organization) + create(:service_plan_visibility, organization: organization, service_plan: visible_private_plan) visible = Service.organization_visible(organization).all expect(visible).to include(visible_public_service) @@ -343,22 +343,22 @@ def records(user) end describe '.space_or_org_visible_for_user' do - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } let(:dev) { make_developer_for_space(space) } let(:expected_service_names) { [@private_service, @visible_service].map(&:label) } before do - @private_broker = ServiceBroker.make(space:) - @private_service = Service.make(service_broker: @private_broker, active: true, label: 'Private Service') - @private_plan = ServicePlan.make(service: @private_service, public: false, name: 'Private Plan') + @private_broker = create(:service_broker, space:) + @private_service = create(:service, service_broker: @private_broker, active: true, label: 'Private Service') + @private_plan = create(:service_plan, service: @private_service, public: false, name: 'Private Plan') - @public_broker = ServiceBroker.make - @visible_service = Service.make(service_broker: @public_broker, active: true, label: 'Visible Service') - @visible_plan = ServicePlan.make(service: @visible_service, public: true, active: true, name: 'Visible Plan') - @hidden_service = Service.make(service_broker: @public_broker, active: true, label: 'Hidden Service') - @hidden_plan = ServicePlan.make(service: @hidden_service, public: false, name: 'Hidden Plan') + @public_broker = create(:service_broker) + @visible_service = create(:service, service_broker: @public_broker, active: true, label: 'Visible Service') + @visible_plan = create(:service_plan, service: @visible_service, public: true, active: true, name: 'Visible Plan') + @hidden_service = create(:service, service_broker: @public_broker, active: true, label: 'Hidden Service') + @hidden_plan = create(:service_plan, service: @hidden_service, public: false, name: 'Hidden Plan') end it 'returns services that are visible to the spaces org and to the user in that space' do @@ -393,17 +393,17 @@ def records(user) describe '.public_visible' do it 'returns services that have a plan that is public and active' do - public_active_service = Service.make(active: true) - ServicePlan.make(active: true, public: true, service: public_active_service) + public_active_service = create(:service, active: true) + create(:service_plan, active: true, public: true, service: public_active_service) - private_active_service = Service.make(active: true) - ServicePlan.make(active: true, public: false, service: private_active_service) + private_active_service = create(:service, active: true) + create(:service_plan, active: true, public: false, service: private_active_service) - public_inactive_service = Service.make(active: false) - ServicePlan.make(active: false, public: true, service: public_inactive_service) + public_inactive_service = create(:service, active: false) + create(:service_plan, active: false, public: true, service: public_inactive_service) - private_inactive_service = Service.make(active: false) - ServicePlan.make(active: false, public: false, service: private_inactive_service) + private_inactive_service = create(:service, active: false) + create(:service_plan, active: false, public: false, service: private_inactive_service) public_visible = Service.public_visible.all expect(public_visible).to eq [public_active_service] @@ -412,7 +412,7 @@ def records(user) describe '#route_service?' do context 'when requires include "route_forwarding"' do - let(:service) { Service.make(requires: ['route_forwarding']) } + let(:service) { create(:service, requires: ['route_forwarding']) } it 'returns true' do expect(service).to be_route_service @@ -420,7 +420,7 @@ def records(user) end context 'when requires does not include "route_forwarding"' do - let(:service) { Service.make(requires: []) } + let(:service) { create(:service, requires: []) } it 'returns false' do expect(service).not_to be_route_service @@ -430,7 +430,7 @@ def records(user) describe '#shareable?' do context 'when the service metadata include shareable true' do - let(:service) { Service.make(extra: '{"shareable":true}') } + let(:service) { create(:service, extra: '{"shareable":true}') } it 'returns true' do expect(service).to be_shareable @@ -438,7 +438,7 @@ def records(user) end context 'when the service metadata include shareable false' do - let(:service) { Service.make(extra: '{"shareable":false}') } + let(:service) { create(:service, extra: '{"shareable":false}') } it 'returns false' do expect(service).not_to be_shareable @@ -446,7 +446,7 @@ def records(user) end context 'when the service does not include the shareable field in metadata' do - let(:service) { Service.make(extra: '{"other-key": "value"}') } + let(:service) { create(:service, extra: '{"other-key": "value"}') } it 'returns false' do expect(service).not_to be_shareable @@ -454,7 +454,7 @@ def records(user) end context 'when the service metadata is nil' do - let(:service) { Service.make(extra: nil) } + let(:service) { create(:service, extra: nil) } it 'returns false' do expect(service).not_to be_shareable @@ -462,7 +462,7 @@ def records(user) end context 'when extra contains malformed json' do - let(:service) { Service.make(extra: '{"not-json"}') } + let(:service) { create(:service, extra: '{"not-json"}') } it 'returns false' do expect(service).not_to be_shareable @@ -471,7 +471,7 @@ def records(user) end describe '#client' do - let(:service) { Service.make(service_broker: ServiceBroker.make) } + let(:service) { create(:service, service_broker: create(:service_broker)) } it 'returns a broker client' do fake_client = double(VCAP::Services::ServiceBrokers::V2::Client) @@ -482,7 +482,7 @@ def records(user) end context 'when the purging field is true' do - let(:service) { Service.make(purging: true) } + let(:service) { create(:service, purging: true) } it 'returns a null broker client' do expect(service.client).to be_a(VCAP::Services::ServiceBrokers::NullClient) @@ -492,19 +492,19 @@ def records(user) describe '#public' do it 'is false when there are no service plans' do - service_offering = Service.make + service_offering = create(:service) expect(service_offering.public?).to be false end it 'is false when there are non-public service plans' do - service_offering = Service.make - ServicePlan.make(public: false, service: service_offering) + service_offering = create(:service) + create(:service_plan, public: false, service: service_offering) expect(service_offering.public?).to be false end it 'is true when there are public service plans' do - service_offering = Service.make - ServicePlan.make(public: true, service: service_offering) + service_offering = create(:service) + create(:service_plan, public: true, service: service_offering) expect(service_offering.public?).to be true end end diff --git a/spec/unit/models/services/user_provided_service_instance_spec.rb b/spec/unit/models/services/user_provided_service_instance_spec.rb index a0e44e3d052..9d0cc56eb22 100644 --- a/spec/unit/models/services/user_provided_service_instance_spec.rb +++ b/spec/unit/models/services/user_provided_service_instance_spec.rb @@ -2,13 +2,13 @@ module VCAP::CloudController RSpec.describe VCAP::CloudController::UserProvidedServiceInstance, type: :model do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it_behaves_like 'a model with an encrypted attribute' do def new_model VCAP::CloudController::UserProvidedServiceInstance.create( name: Sham.name, - space: VCAP::CloudController::Space.make, + space: create(:space), credentials: value_to_encrypt ) end @@ -24,8 +24,8 @@ def new_model it do expect(subject).to have_associated :service_bindings, associated_instance: lambda { |service_instance| - app = VCAP::CloudController::AppModel.make(space: service_instance.space) - ServiceBinding.make(app: app, service_instance: service_instance, credentials: Sham.service_credentials) + app = create(:app_model, space: service_instance.space) + create(:service_binding, app: app, service_instance: service_instance, credentials: Sham.service_credentials) } end end @@ -39,9 +39,9 @@ def new_model it { is_expected.to strip_whitespace :syslog_drain_url } it 'does not bind an app and a service instance from different app spaces' do - service_instance = VCAP::CloudController::UserProvidedServiceInstance.make + service_instance = create(:user_provided_service_instance) VCAP::CloudController::ProcessModelFactory.make(space: service_instance.space) - service_binding = VCAP::CloudController::ServiceBinding.make + service_binding = create(:service_binding) expect do service_instance.add_service_binding(service_binding) end.to raise_error VCAP::CloudController::ServiceInstance::InvalidServiceBinding @@ -49,46 +49,46 @@ def new_model it 'raises an error if the route_service_url is not https' do expect do - VCAP::CloudController::UserProvidedServiceInstance.make(route_service_url: 'http://route.url.com') + create(:user_provided_service_instance, route_service_url: 'http://route.url.com') end. to raise_error(Sequel::ValidationFailed, 'service_instance route_service_url_not_https') end it 'raises an error if the route_service_url does not have a valid host' do expect do - VCAP::CloudController::UserProvidedServiceInstance.make(route_service_url: 'https://.com') + create(:user_provided_service_instance, route_service_url: 'https://.com') end. to raise_error(Sequel::ValidationFailed, 'service_instance route_service_url_invalid') end it 'raises an error if the route_service_url format is invalid' do expect do - VCAP::CloudController::UserProvidedServiceInstance.make(route_service_url: 'https\\route') + create(:user_provided_service_instance, route_service_url: 'https\\route') end. to raise_error(Sequel::ValidationFailed, 'service_instance route_service_url_invalid') end it 'accepts user-provided tags where combined length of all tags is exactly 2048 characters' do expect do - UserProvidedServiceInstance.make tags: max_tags + create(:user_provided_service_instance, tags: max_tags) end.not_to raise_error end it 'accepts user-provided tags where combined length of all tags is less than 2048 characters' do expect do - UserProvidedServiceInstance.make tags: max_tags[0..50] + create(:user_provided_service_instance, tags: max_tags[0..50]) end.not_to raise_error end it 'does not accept user-provided tags with combined length of over 2048 characters' do expect do - UserProvidedServiceInstance.make tags: max_tags + ['z'] + create(:user_provided_service_instance, tags: max_tags + ['z']) end.to raise_error(Sequel::ValidationFailed).with_message('tags too_long') end it 'does not accept a single user-provided tag of length greater than 2048 characters' do expect do - UserProvidedServiceInstance.make tags: ['a' * 2049] + create(:user_provided_service_instance, tags: ['a' * 2049]) end.to raise_error(Sequel::ValidationFailed).with_message('tags too_long') end end @@ -102,7 +102,7 @@ def new_model it 'saves with is_gateway_service false' do instance = VCAP::CloudController::UserProvidedServiceInstance.create( name: 'awesome-service', - space: VCAP::CloudController::Space.make, + space: create(:space), credentials: { 'foo' => 'bar' }, route_service_url: 'https://route.url.com' ) @@ -110,7 +110,7 @@ def new_model end it 'creates a CREATED service usage event' do - instance = VCAP::CloudController::UserProvidedServiceInstance.make + instance = create(:user_provided_service_instance) event = ServiceUsageEvent.last expect(ServiceUsageEvent.count).to eq(1) @@ -119,14 +119,14 @@ def new_model end it 'creates the service instance if the route_service_url is empty' do - VCAP::CloudController::UserProvidedServiceInstance.make(route_service_url: '') + create(:user_provided_service_instance, route_service_url: '') expect(ServiceInstance.count).to eq(1) end end describe '#delete' do it 'creates a DELETED service usage event' do - instance = VCAP::CloudController::UserProvidedServiceInstance.make + instance = create(:user_provided_service_instance) instance.destroy event = VCAP::CloudController::ServiceUsageEvent.last @@ -139,7 +139,7 @@ def new_model describe '#tags' do let(:instance_tags) { %w[a b c] } - let(:service_instance) { UserProvidedServiceInstance.make(tags: instance_tags) } + let(:service_instance) { create(:user_provided_service_instance, tags: instance_tags) } it 'returns the instance tags' do expect(service_instance.tags).to eq instance_tags diff --git a/spec/unit/presenters/api/organization_presenter_spec.rb b/spec/unit/presenters/api/organization_presenter_spec.rb index 49dfcef1e43..86eecfaaab3 100644 --- a/spec/unit/presenters/api/organization_presenter_spec.rb +++ b/spec/unit/presenters/api/organization_presenter_spec.rb @@ -4,11 +4,11 @@ describe '#to_hash' do subject { OrganizationPresenter.new(org) } - let(:org) { VCAP::CloudController::Organization.make } + let(:org) { create(:organization) } before do - VCAP::CloudController::Space.make(organization: org) - user = VCAP::CloudController::User.make + create(:space, organization: org) + user = create(:user) user.add_organization org user.add_managed_organization org end diff --git a/spec/unit/presenters/api/quota_definition_presenter_spec.rb b/spec/unit/presenters/api/quota_definition_presenter_spec.rb index e578d7515cf..e711bb433a7 100644 --- a/spec/unit/presenters/api/quota_definition_presenter_spec.rb +++ b/spec/unit/presenters/api/quota_definition_presenter_spec.rb @@ -4,7 +4,7 @@ describe '#to_hash' do subject { QuotaDefinitionPresenter.new(quota_definition) } - let(:quota_definition) { VCAP::CloudController::QuotaDefinition.make } + let(:quota_definition) { create(:quota_definition) } it 'creates a valid JSON' do expect(subject.to_hash).to eq({ diff --git a/spec/unit/presenters/api/service_broker_presenter_spec.rb b/spec/unit/presenters/api/service_broker_presenter_spec.rb index c0ef7752a76..a5d519fb62a 100644 --- a/spec/unit/presenters/api/service_broker_presenter_spec.rb +++ b/spec/unit/presenters/api/service_broker_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController RSpec.describe ServiceBrokerPresenter do - let(:broker) { ServiceBroker.make } + let(:broker) { create(:service_broker) } subject(:presenter) { ServiceBrokerPresenter.new(broker) } diff --git a/spec/unit/presenters/api/space_presenter_spec.rb b/spec/unit/presenters/api/space_presenter_spec.rb index 8acfaef8428..c9521b3d122 100644 --- a/spec/unit/presenters/api/space_presenter_spec.rb +++ b/spec/unit/presenters/api/space_presenter_spec.rb @@ -4,7 +4,7 @@ describe '#to_hash' do subject { SpacePresenter.new(space) } - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } it 'creates a valid JSON' do expect(subject.to_hash).to eq({ diff --git a/spec/unit/presenters/api/user_presenter_spec.rb b/spec/unit/presenters/api/user_presenter_spec.rb index 64c5ab7e441..1239c67890b 100644 --- a/spec/unit/presenters/api/user_presenter_spec.rb +++ b/spec/unit/presenters/api/user_presenter_spec.rb @@ -4,7 +4,7 @@ describe '#to_hash' do subject { UserPresenter.new(user) } - let(:user) { VCAP::CloudController::User.make(admin: true) } + let(:user) { create(:user, admin: true) } it 'creates a valid JSON' do expect(subject.to_hash).to eq({ diff --git a/spec/unit/presenters/api/user_summary_presenter_spec.rb b/spec/unit/presenters/api/user_summary_presenter_spec.rb index 03f57667f63..78207e1cfec 100644 --- a/spec/unit/presenters/api/user_summary_presenter_spec.rb +++ b/spec/unit/presenters/api/user_summary_presenter_spec.rb @@ -4,13 +4,13 @@ describe '#to_hash' do subject { UserSummaryPresenter.new(user) } - let(:org) { VCAP::CloudController::Organization.make } - let(:managed_org) { VCAP::CloudController::Organization.make } - let(:billing_managed_org) { VCAP::CloudController::Organization.make } - let(:audited_org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } - let(:managed_space) { VCAP::CloudController::Space.make(organization: managed_org) } - let(:audited_space) { VCAP::CloudController::Space.make(organization: audited_org) } + let(:org) { create(:organization) } + let(:managed_org) { create(:organization) } + let(:billing_managed_org) { create(:organization) } + let(:audited_org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:managed_space) { create(:space, organization: managed_org) } + let(:audited_space) { create(:space, organization: audited_org) } let(:user) do u = make_developer_for_space(space) u.add_organization(managed_org) diff --git a/spec/unit/presenters/mixins/metadata_presentation_helpers_spec.rb b/spec/unit/presenters/mixins/metadata_presentation_helpers_spec.rb index 715bb492509..a112f282154 100644 --- a/spec/unit/presenters/mixins/metadata_presentation_helpers_spec.rb +++ b/spec/unit/presenters/mixins/metadata_presentation_helpers_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController::Presenters::Mixins RSpec.describe MetadataPresentationHelpers do let(:dummy_class) { Class.new { include MetadataPresentationHelpers } } subject { dummy_class.new } - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } describe '#hashified_labels' do context 'when the list of labels is empty' do @@ -18,26 +18,20 @@ module VCAP::CloudController::Presenters::Mixins context 'when there are multiple labels' do let(:release_label) do - VCAP::CloudController::AppLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: app.guid - ) + create(:app_label_model, key_name: 'release', + value: 'stable', + resource_guid: app.guid) end let(:potato_label) do - VCAP::CloudController::AppLabelModel.make( - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed', - resource_guid: app.guid - ) + create(:app_label_model, key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed', + resource_guid: app.guid) end let(:prefixless_label) do - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app.guid, - key_name: 'cake_type', - value: 'birthday' - ) + create(:app_annotation_model, resource_guid: app.guid, + key_name: 'cake_type', + value: 'birthday') end let(:labels) { [release_label, potato_label, prefixless_label] } @@ -63,27 +57,21 @@ module VCAP::CloudController::Presenters::Mixins context 'when there are multiple annotations' do let(:philosophical_annotation) do - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app.guid, - key_prefix: 'subject.edu', - key_name: 'philosophy', - value: 'All we are is dust in the wind, dude' - ) + create(:app_annotation_model, resource_guid: app.guid, + key_prefix: 'subject.edu', + key_name: 'philosophy', + value: 'All we are is dust in the wind, dude') end let(:most_excellent_annotation) do - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app.guid, - key_prefix: 'nynex.net', - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@s.preston), Test tel(222222) pager(3333333#555) email(theodore@logan)' - ) + create(:app_annotation_model, resource_guid: app.guid, + key_prefix: 'nynex.net', + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@s.preston), Test tel(222222) pager(3333333#555) email(theodore@logan)') end let(:prefixless_annotation) do - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app.guid, - key_name: 'pies', - value: 'apple, blueberry, marionberry, pumpkin, rhuharb, coconut creme, lemon meringue' - ) + create(:app_annotation_model, resource_guid: app.guid, + key_name: 'pies', + value: 'apple, blueberry, marionberry, pumpkin, rhuharb, coconut creme, lemon meringue') end let(:annotations) { [philosophical_annotation, most_excellent_annotation, prefixless_annotation] } diff --git a/spec/unit/presenters/runtime_environment/service_instance_presenter_spec.rb b/spec/unit/presenters/runtime_environment/service_instance_presenter_spec.rb index 5d07274d891..02b350bd05a 100644 --- a/spec/unit/presenters/runtime_environment/service_instance_presenter_spec.rb +++ b/spec/unit/presenters/runtime_environment/service_instance_presenter_spec.rb @@ -7,14 +7,14 @@ context 'for a managed service instance' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make(service_plan: service_plan, tags: ['meow']) + create(:managed_service_instance, service_plan: service_plan, tags: ['meow']) end let(:service_plan) do - VCAP::CloudController::ServicePlan.make(service:) + create(:service_plan, service:) end - let(:service) { VCAP::CloudController::Service.make(tags: %w[relational mysql]) } + let(:service) { create(:service, tags: %w[relational mysql]) } it { is_expected.to have_key(:label) } it { is_expected.to have_key(:provider) } @@ -32,7 +32,7 @@ end context 'for a provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } specify do expect(subject[:label]).to eq('user-provided') diff --git a/spec/unit/presenters/system_environment/service_binding_presenter_spec.rb b/spec/unit/presenters/system_environment/service_binding_presenter_spec.rb index db31d474d80..ee1dd3e8ba5 100644 --- a/spec/unit/presenters/system_environment/service_binding_presenter_spec.rb +++ b/spec/unit/presenters/system_environment/service_binding_presenter_spec.rb @@ -4,21 +4,17 @@ module VCAP::CloudController RSpec.describe ServiceBindingPresenter do context 'for a managed service instance' do - let(:service) { Service.make(requires: ['syslog_drain'], label: Sham.label) } - let(:service_plan) { ServicePlan.make(name: Sham.name, service: service) } + let(:service) { create(:service, requires: ['syslog_drain'], label: Sham.label) } + let(:service_plan) { create(:service_plan, name: Sham.name, service: service) } let(:service_instance) do - ManagedServiceInstance.make( - name: instance_name, - service_plan: service_plan - ) + create(:managed_service_instance, name: instance_name, + service_plan: service_plan) end let(:instance_name) { Sham.name } let(:binding_options) { nil } let(:service_binding) do - ServiceBinding.make( - name: binding_name, - service_instance: service_instance - ) + create(:service_binding, name: binding_name, + service_instance: service_instance) end let(:binding_name) { nil } @@ -98,11 +94,11 @@ module VCAP::CloudController context 'for a provided service instance' do let(:service_instance) do - UserProvidedServiceInstance.make + create(:user_provided_service_instance) end let(:service_binding) do - ServiceBinding.make(service_instance:) + create(:service_binding, service_instance:) end describe '#to_hash' do diff --git a/spec/unit/presenters/system_environment/service_instance_presenter_spec.rb b/spec/unit/presenters/system_environment/service_instance_presenter_spec.rb index 2b05685ac29..a09f38c918d 100644 --- a/spec/unit/presenters/system_environment/service_instance_presenter_spec.rb +++ b/spec/unit/presenters/system_environment/service_instance_presenter_spec.rb @@ -7,14 +7,14 @@ context 'for a managed service instance' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make(service_plan: service_plan, tags: ['meow']) + create(:managed_service_instance, service_plan: service_plan, tags: ['meow']) end let(:service_plan) do - VCAP::CloudController::ServicePlan.make(service:) + create(:service_plan, service:) end - let(:service) { VCAP::CloudController::Service.make(tags: %w[relational mysql]) } + let(:service) { create(:service, tags: %w[relational mysql]) } it { is_expected.to have_key(:label) } it { is_expected.to have_key(:provider) } @@ -32,7 +32,7 @@ end context 'for a provided service instance' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(tags: %w[wonderful the-best]) } + let(:service_instance) { create(:user_provided_service_instance, tags: %w[wonderful the-best]) } specify do expect(subject[:label]).to eq('user-provided') diff --git a/spec/unit/presenters/system_environment/system_env_presenter_spec.rb b/spec/unit/presenters/system_environment/system_env_presenter_spec.rb index 4094bcbe19a..8aac6d8dfc3 100644 --- a/spec/unit/presenters/system_environment/system_env_presenter_spec.rb +++ b/spec/unit/presenters/system_environment/system_env_presenter_spec.rb @@ -38,7 +38,7 @@ module VCAP::CloudController describe '#system_env' do context 'when there are no services' do - let(:app) { AppModel.make(environment_variables: { 'jesse' => 'awesome' }) } + let(:app) { create(:app_model, environment_variables: { 'jesse' => 'awesome' }) } it 'contains an empty vcap_services' do expect(system_env_presenter.system_env[:VCAP_SERVICES]).to eq({}) @@ -49,16 +49,16 @@ module VCAP::CloudController end context 'when there are services' do - let(:space) { Space.make } - let(:app) { AppModel.make(environment_variables: { 'jesse' => 'awesome' }, space: space) } - let(:service) { Service.make(label: 'elephantsql-n/a') } - let(:service_alt) { Service.make(label: 'giraffesql-n/a') } - let(:service_plan) { ServicePlan.make(service:) } - let(:service_plan_alt) { ServicePlan.make(service: service_alt) } - let(:service_instance) { ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } - let(:service_instance_same_label) { ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'elephantsql-2') } - let(:service_instance_diff_label) { ManagedServiceInstance.make(space: space, service_plan: service_plan_alt, name: 'giraffesql-vip-uat') } - let!(:service_binding) { ServiceBinding.make(app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } + let(:space) { create(:space) } + let(:app) { create(:app_model, environment_variables: { 'jesse' => 'awesome' }, space: space) } + let(:service) { create(:service, label: 'elephantsql-n/a') } + let(:service_alt) { create(:service, label: 'giraffesql-n/a') } + let(:service_plan) { create(:service_plan, service:) } + let(:service_plan_alt) { create(:service_plan, service: service_alt) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'elephantsql-vip-uat', tags: ['excellent']) } + let(:service_instance_same_label) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'elephantsql-2') } + let(:service_instance_diff_label) { create(:managed_service_instance, space: space, service_plan: service_plan_alt, name: 'giraffesql-vip-uat') } + let!(:service_binding) { create(:service_binding, app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com') } it 'contains a populated vcap_services' do expect(system_env_presenter.system_env[:VCAP_SERVICES]).not_to eq({}) @@ -75,8 +75,8 @@ module VCAP::CloudController end context 'when a create service binding is in progress' do - let(:service_binding_operation) { ServiceBindingOperation.make(type: 'create', state: 'in progress') } - let!(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding_operation) { create(:service_binding_operation, type: 'create', state: 'in progress') } + let!(:service_binding) { create(:service_binding, app:, service_instance:) } before do service_binding.service_binding_operation = service_binding_operation @@ -88,8 +88,8 @@ module VCAP::CloudController end context 'when a service binding has successfully been asynchronously created' do - let(:service_binding_operation) { ServiceBindingOperation.make(state: 'succeeded') } - let!(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding_operation) { create(:service_binding_operation, state: 'succeeded') } + let!(:service_binding) { create(:service_binding, app:, service_instance:) } before do service_binding.service_binding_operation = service_binding_operation @@ -105,8 +105,8 @@ module VCAP::CloudController end context 'when a delete service binding is in progress' do - let(:service_binding_operation) { ServiceBindingOperation.make(type: 'delete', state: 'in progress') } - let!(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding_operation) { create(:service_binding_operation, type: 'delete', state: 'in progress') } + let!(:service_binding) { create(:service_binding, app:, service_instance:) } before do service_binding.service_binding_operation = service_binding_operation @@ -118,8 +118,8 @@ module VCAP::CloudController end context 'when a delete service binding failed' do - let(:service_binding_operation) { ServiceBindingOperation.make(type: 'delete', state: 'failed') } - let!(:service_binding) { ServiceBinding.make(app:, service_instance:) } + let(:service_binding_operation) { create(:service_binding_operation, type: 'delete', state: 'failed') } + let!(:service_binding) { create(:service_binding, app:, service_instance:) } before do service_binding.service_binding_operation = service_binding_operation @@ -132,7 +132,7 @@ module VCAP::CloudController context 'when there are multiple service bindings for the same service instance' do it 'includes only the latest binding' do - newer_binding = ServiceBinding.make(app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com', created_at: Time.now.utc + 10.seconds) + newer_binding = create(:service_binding, app: app, service_instance: service_instance, syslog_drain_url: 'logs.go-here.com', created_at: Time.now.utc + 10.seconds) bindings = system_env_presenter.system_env[:VCAP_SERVICES][service.label.to_sym] expect(bindings).to have(1).items @@ -141,10 +141,10 @@ module VCAP::CloudController end context 'when there are multiple service bindings for the same service offering and plan' do - let!(:service_instance_2) { ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'instance-2') } - let!(:service_instance_3) { ManagedServiceInstance.make(space: space, service_plan: service_plan, name: 'instance-3') } - let!(:service_binding_2) { ServiceBinding.make(app: app, service_instance: service_instance_2) } - let!(:service_binding_3) { ServiceBinding.make(app: app, service_instance: service_instance_3) } + let!(:service_instance_2) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'instance-2') } + let!(:service_instance_3) { create(:managed_service_instance, space: space, service_plan: service_plan, name: 'instance-3') } + let!(:service_binding_2) { create(:service_binding, app: app, service_instance: service_instance_2) } + let!(:service_binding_3) { create(:service_binding, app: app, service_instance: service_instance_3) } it 'returns bindings in natural order by id' do bindings = system_env_presenter.system_env[:VCAP_SERVICES][service.label.to_sym] @@ -161,23 +161,21 @@ module VCAP::CloudController describe 'volume mounts' do context 'when the service binding has volume mounts' do let!(:service_binding) do - ServiceBinding.make( - app: app, - service_instance: service_instance, - syslog_drain_url: 'logs.go-here.com', - volume_mounts: [{ - container_dir: '/data/images', - mode: 'r', - device_type: 'shared', - device: { - driver: 'cephfs', - volume_id: 'abc', - mount_config: { - key: 'value' - } - } - }] - ) + create(:service_binding, app: app, + service_instance: service_instance, + syslog_drain_url: 'logs.go-here.com', + volume_mounts: [{ + container_dir: '/data/images', + mode: 'r', + device_type: 'shared', + device: { + driver: 'cephfs', + volume_id: 'abc', + mount_config: { + key: 'value' + } + } + }]) end it 'includes only the public volume information' do @@ -195,7 +193,7 @@ module VCAP::CloudController end context 'when the service is user-provided' do - let(:service_instance) { UserProvidedServiceInstance.make(space: space, name: 'elephantsql-vip-uat') } + let(:service_instance) { create(:user_provided_service_instance, space: space, name: 'elephantsql-vip-uat') } it 'includes service binding and instance information' do expect(system_env_presenter.system_env[:VCAP_SERVICES][:'user-provided']).to have(1).items @@ -207,8 +205,8 @@ module VCAP::CloudController describe 'grouping' do before do - ServiceBinding.make(app: app, service_instance: service_instance_same_label) - ServiceBinding.make(app: app, service_instance: service_instance_diff_label) + create(:service_binding, app: app, service_instance: service_instance_same_label) + create(:service_binding, app: app, service_instance: service_instance_diff_label) end it 'groups services by label' do diff --git a/spec/unit/presenters/v2/app_usage_event_presenter_spec.rb b/spec/unit/presenters/v2/app_usage_event_presenter_spec.rb index 60b596fd7ce..76578e3968d 100644 --- a/spec/unit/presenters/v2/app_usage_event_presenter_spec.rb +++ b/spec/unit/presenters/v2/app_usage_event_presenter_spec.rb @@ -13,7 +13,7 @@ module CloudController::Presenters::V2 let(:relations_hash) { { 'relationship_key' => 'relationship_value' } } describe '#entity_hash' do - let(:app_usage_event) { VCAP::CloudController::AppUsageEvent.make } + let(:app_usage_event) { create(:app_usage_event) } before do app_usage_event.buildpack_name = 'some-buildpack' diff --git a/spec/unit/presenters/v2/organization_presenter_spec.rb b/spec/unit/presenters/v2/organization_presenter_spec.rb index b5e6bce6b97..ef23bd3256d 100644 --- a/spec/unit/presenters/v2/organization_presenter_spec.rb +++ b/spec/unit/presenters/v2/organization_presenter_spec.rb @@ -10,7 +10,7 @@ module CloudController::Presenters::V2 let(:orphans) { 'orphans' } let(:relations_presenter) { instance_double(RelationsPresenter, to_hash: relations_hash) } let(:relations_hash) { { 'relationship_key' => 'relationship_value' } } - let(:quota_definition) { VCAP::CloudController::QuotaDefinition.make } + let(:quota_definition) { create(:quota_definition) } describe '#entity_hash' do before do @@ -18,12 +18,10 @@ module CloudController::Presenters::V2 end let(:org) do - VCAP::CloudController::Organization.make( - name: 'george', - billing_enabled: true, - quota_definition_guid: quota_definition.guid, - status: 'active' - ) + create(:organization, name: 'george', + billing_enabled: true, + quota_definition_guid: quota_definition.guid, + status: 'active') end it 'returns the organization entity and associated urls' do @@ -43,7 +41,7 @@ module CloudController::Presenters::V2 end context 'with isolation segments assigned' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:assigner) { VCAP::CloudController::IsolationSegmentAssign.new } before do diff --git a/spec/unit/presenters/v2/process_model_presenter_spec.rb b/spec/unit/presenters/v2/process_model_presenter_spec.rb index c5ef3892be0..5cbd64b3ad3 100644 --- a/spec/unit/presenters/v2/process_model_presenter_spec.rb +++ b/spec/unit/presenters/v2/process_model_presenter_spec.rb @@ -14,7 +14,7 @@ module CloudController::Presenters::V2 describe '#entity_hash' do before do allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) - VCAP::CloudController::Buildpack.make(name: 'schmuby') + create(:buildpack, name: 'schmuby') process.app.lifecycle_data.update( buildpacks: ) @@ -22,11 +22,11 @@ module CloudController::Presenters::V2 buildpack_receipt_detect_output: 'detected buildpack', buildpack_receipt_buildpack_guid: 'i am a buildpack guid' ) - VCAP::CloudController::DropletModel.make(app: process.app, package: process.latest_package, error_description: 'because') + create(:droplet_model, app: process.app, package: process.latest_package, error_description: 'because') end - let(:space) { VCAP::CloudController::Space.make } - let(:stack) { VCAP::CloudController::Stack.make } + let(:space) { create(:space) } + let(:stack) { create(:stack) } let(:process) do VCAP::CloudController::ProcessModelFactory.make( name: 'utako', @@ -49,9 +49,7 @@ module CloudController::Presenters::V2 let(:buildpack) { 'https://github.com/custombuildpack' } let(:buildpacks) { [buildpack] } let(:revision) do - VCAP::CloudController::RevisionModel.make( - environment_variables: {} - ) + create(:revision_model, environment_variables: {}) end it 'returns the app entity and associated urls' do @@ -167,7 +165,7 @@ module CloudController::Presenters::V2 describe 'docker' do context 'with no credentials' do before do - VCAP::CloudController::PackageModel.make(:docker, app: process.app, docker_image: 'someimage') + create(:package_model, :docker, app: process.app, docker_image: 'someimage') process.reload end @@ -183,7 +181,7 @@ module CloudController::Presenters::V2 context 'with credentials' do before do - VCAP::CloudController::PackageModel.make(:docker, app: process.app, docker_image: 'someimage', docker_username: 'user', docker_password: 'secret') + create(:package_model, :docker, app: process.app, docker_image: 'someimage', docker_username: 'user', docker_password: 'secret') process.reload end diff --git a/spec/unit/presenters/v2/relations_presenter_spec.rb b/spec/unit/presenters/v2/relations_presenter_spec.rb index 5d9077fc3e9..aa61d0b1933 100644 --- a/spec/unit/presenters/v2/relations_presenter_spec.rb +++ b/spec/unit/presenters/v2/relations_presenter_spec.rb @@ -3,7 +3,7 @@ module CloudController::Presenters::V2 RSpec.describe RelationsPresenter do describe '#to_hash' do - let(:test_model) { VCAP::CloudController::TestModel.make(unique_value: 'something', required_attr: true) } + let(:test_model) { create(:test_model, unique_value: 'something', required_attr: true) } let(:opts) { {} } before do @@ -23,7 +23,7 @@ module CloudController::Presenters::V2 end describe 'to_one relationship' do - let(:test_model_many_to_one) { VCAP::CloudController::TestModelManyToOne.make } + let(:test_model_many_to_one) { create(:test_model_many_to_one) } it 'includes to_one relationship link when association is set' do test_model_many_to_one.test_model = test_model @@ -45,7 +45,7 @@ module CloudController::Presenters::V2 end describe 'to_many relationship' do - let(:test_model_many_to_many) { VCAP::CloudController::TestModelManyToMany.make } + let(:test_model_many_to_many) { create(:test_model_many_to_many) } it 'includes to_many relationship link when association is set' do test_model.add_test_model_many_to_many(test_model_many_to_many) @@ -82,8 +82,8 @@ module CloudController::Presenters::V2 end it 'serializes related inline objects inline' do - test_model_many_to_many = VCAP::CloudController::TestModelManyToMany.make - test_model_second_level = VCAP::CloudController::TestModelSecondLevel.make + test_model_many_to_many = create(:test_model_many_to_many) + test_model_second_level = create(:test_model_second_level) test_model_many_to_many.test_model_second_levels.to_a test_model.add_test_model_many_to_many test_model_many_to_many test_model_many_to_many.add_test_model_second_level test_model_second_level @@ -114,8 +114,8 @@ module CloudController::Presenters::V2 describe 'orphan_relations enabled' do it 'serializes related n:many inline objects as orphans' do - test_model_many_to_many = VCAP::CloudController::TestModelManyToMany.make - test_model_second_level = VCAP::CloudController::TestModelSecondLevel.make + test_model_many_to_many = create(:test_model_many_to_many) + test_model_second_level = create(:test_model_second_level) test_model_many_to_many.test_model_second_levels.to_a test_model.add_test_model_many_to_many test_model_many_to_many test_model_many_to_many.add_test_model_second_level test_model_second_level @@ -146,7 +146,7 @@ module CloudController::Presenters::V2 end it 'serializes related n:one inline objects as orphans' do - test_model_many_to_one = VCAP::CloudController::TestModelManyToOne.make + test_model_many_to_one = create(:test_model_many_to_one) test_model_many_to_one.test_model = test_model orphans = {} @@ -173,8 +173,8 @@ module CloudController::Presenters::V2 end it 'excludes relations named in exclude_relations' do - test_model_many_to_many = VCAP::CloudController::TestModelManyToMany.make - test_model_second_level = VCAP::CloudController::TestModelSecondLevel.make + test_model_many_to_many = create(:test_model_many_to_many) + test_model_second_level = create(:test_model_second_level) test_model_many_to_many.test_model_second_levels.to_a test_model.add_test_model_many_to_many test_model_many_to_many test_model_many_to_many.add_test_model_second_level test_model_second_level @@ -193,8 +193,8 @@ module CloudController::Presenters::V2 end it 'only includes relations named in include_relations' do - test_model_many_to_many = VCAP::CloudController::TestModelManyToMany.make - test_model_second_level = VCAP::CloudController::TestModelSecondLevel.make + test_model_many_to_many = create(:test_model_many_to_many) + test_model_second_level = create(:test_model_second_level) test_model_many_to_many.test_model_second_levels.to_a test_model.add_test_model_many_to_many test_model_many_to_many test_model_many_to_many.add_test_model_second_level test_model_second_level diff --git a/spec/unit/presenters/v2/route_mapping_presenter_spec.rb b/spec/unit/presenters/v2/route_mapping_presenter_spec.rb index 69ca590ae64..4a8cbd57b75 100644 --- a/spec/unit/presenters/v2/route_mapping_presenter_spec.rb +++ b/spec/unit/presenters/v2/route_mapping_presenter_spec.rb @@ -13,9 +13,9 @@ module CloudController::Presenters::V2 let(:relations_hash) { { 'relationship_key' => 'relationship_value' } } describe '#entity_hash' do - let(:app) { VCAP::CloudController::AppModel.make } - let(:route) { VCAP::CloudController::Route.make(space: app.space) } - let(:route_mapping) { VCAP::CloudController::RouteMappingModel.make(app: app, route: route, app_port: 9090) } + let(:app) { create(:app_model) } + let(:route) { create(:route, space: app.space) } + let(:route_mapping) { create(:route_mapping_model, app: app, route: route, app_port: 9090) } before do allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) @@ -36,11 +36,9 @@ module CloudController::Presenters::V2 context 'docker app' do let(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - route: route, - app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED - ) + create(:route_mapping_model, app: app, + route: route, + app_port: VCAP::CloudController::ProcessModel::NO_APP_PORT_SPECIFIED) end it 'presents the app_port as nil' do diff --git a/spec/unit/presenters/v2/route_presenter_spec.rb b/spec/unit/presenters/v2/route_presenter_spec.rb index b179f148f81..fabdc420685 100644 --- a/spec/unit/presenters/v2/route_presenter_spec.rb +++ b/spec/unit/presenters/v2/route_presenter_spec.rb @@ -17,18 +17,16 @@ module CloudController::Presenters::V2 allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) end - let(:space) { VCAP::CloudController::Space.make } - let(:domain) { VCAP::CloudController::SharedDomain.make } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(:routing, space:) } + let(:space) { create(:space) } + let(:domain) { create(:shared_domain) } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } let(:route) do - VCAP::CloudController::Route.make( - host: 'host', - path: '/some-path', - domain: domain, - space: space - ) + create(:route, host: 'host', + path: '/some-path', + domain: domain, + space: space) end - let!(:route_binding) { VCAP::CloudController::RouteBinding.make(route:, service_instance:) } + let!(:route_binding) { create(:route_binding, route:, service_instance:) } it 'returns the route entity and associated urls' do expect(subject.entity_hash(controller, route, opts, depth, parents, orphans)).to eq( @@ -48,7 +46,7 @@ module CloudController::Presenters::V2 end context 'when the domain is a private domain' do - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } it 'uses the private_domains url' do expect(subject.entity_hash(controller, route, opts, depth, parents, orphans)).to include( diff --git a/spec/unit/presenters/v2/service_binding_presenter_spec.rb b/spec/unit/presenters/v2/service_binding_presenter_spec.rb index a4844fa5a2e..7cbbd89b25a 100644 --- a/spec/unit/presenters/v2/service_binding_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_binding_presenter_spec.rb @@ -20,11 +20,9 @@ module CloudController::Presenters::V2 let(:volume_mount) { [{ 'container_dir' => 'mount' }] } let(:service_binding) do - VCAP::CloudController::ServiceBinding.make( - credentials: { 'secret' => 'key' }, - syslog_drain_url: 'syslog://drain.example.com', - volume_mounts: volume_mount - ) + create(:service_binding, credentials: { 'secret' => 'key' }, + syslog_drain_url: 'syslog://drain.example.com', + volume_mounts: volume_mount) end it 'returns the service binding entity' do @@ -54,7 +52,7 @@ module CloudController::Presenters::V2 context 'when there is operation associated with this binding' do context 'and the operation type is create' do - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make(type: 'create', state: 'in progress', description: '10% complete') } + let(:binding_operation) { create(:service_binding_operation, type: 'create', state: 'in progress', description: '10% complete') } before do service_binding.service_binding_operation = binding_operation @@ -74,7 +72,7 @@ module CloudController::Presenters::V2 end context 'and the operation type is delete' do - let(:binding_operation) { VCAP::CloudController::ServiceBindingOperation.make(type: 'delete', state: 'in progress', description: '10% complete') } + let(:binding_operation) { create(:service_binding_operation, type: 'delete', state: 'in progress', description: '10% complete') } before do service_binding.service_binding_operation = binding_operation @@ -96,12 +94,10 @@ module CloudController::Presenters::V2 context 'when a name is provided' do let(:service_binding) do - VCAP::CloudController::ServiceBinding.make( - credentials: { 'secret' => 'key' }, - syslog_drain_url: 'syslog://drain.example.com', - volume_mounts: volume_mount, - name: 'some-binding-name' - ) + create(:service_binding, credentials: { 'secret' => 'key' }, + syslog_drain_url: 'syslog://drain.example.com', + volume_mounts: volume_mount, + name: 'some-binding-name') end it 'returns the service binding entity' do diff --git a/spec/unit/presenters/v2/service_instance_presenter_spec.rb b/spec/unit/presenters/v2/service_instance_presenter_spec.rb index b09565a1b0c..b9600e3967f 100644 --- a/spec/unit/presenters/v2/service_instance_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_instance_presenter_spec.rb @@ -19,8 +19,8 @@ module CloudController::Presenters::V2 describe 'ManagedServiceInstance' do describe '#entity_hash' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } - let(:service_plan) { VCAP::CloudController::ServicePlan.make } + let(:service_instance) { create(:managed_service_instance) } + let(:service_plan) { create(:service_plan) } before do service_instance.service_plan_id = service_plan.id @@ -44,7 +44,7 @@ module CloudController::Presenters::V2 end context 'when maintenance_info is available as string' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(maintenance_info: '{ "version": "2.0" }') } + let(:service_instance) { create(:managed_service_instance, maintenance_info: '{ "version": "2.0" }') } it 'includes `maintenance_info` in the entity' do expect(subject.entity_hash(controller, service_instance, opts, depth, parents, orphans)['maintenance_info']).to eq( @@ -56,7 +56,7 @@ module CloudController::Presenters::V2 end context 'when maintenance_info is available as Hash' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(maintenance_info: { version: '3.0' }) } + let(:service_instance) { create(:managed_service_instance, maintenance_info: { version: '3.0' }) } it 'includes `maintenance_info` in the entity' do expect(subject.entity_hash(controller, service_instance, opts, depth, parents, orphans)['maintenance_info']).to eq( @@ -68,7 +68,7 @@ module CloudController::Presenters::V2 end context 'when maintenance_info is invalid JSON' do - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(maintenance_info: 'invalid') } + let(:service_instance) { create(:managed_service_instance, maintenance_info: 'invalid') } it 'returns empty JSON object for maintenance_info' do expect(subject.entity_hash(controller, service_instance, opts, depth, parents, orphans)['maintenance_info']).to eq({}) @@ -79,7 +79,7 @@ module CloudController::Presenters::V2 describe 'UserProvidedServiceInstance' do describe '#entity_hash' do - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it 'returns the service instance entity' do expect(subject.entity_hash(controller, service_instance, opts, depth, parents, orphans)).to eq( diff --git a/spec/unit/presenters/v2/service_instance_shared_from_presenter_spec.rb b/spec/unit/presenters/v2/service_instance_shared_from_presenter_spec.rb index c20d6245001..3c9821647c7 100644 --- a/spec/unit/presenters/v2/service_instance_shared_from_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_instance_shared_from_presenter_spec.rb @@ -4,7 +4,7 @@ module CloudController::Presenters::V2 RSpec.describe ServiceInstanceSharedFromPresenter do describe '#to_hash' do it 'returns the space and org name' do - space = VCAP::CloudController::Space.make + space = create(:space) presenter = ServiceInstanceSharedFromPresenter.new expect(presenter.to_hash(space)).to eq( { diff --git a/spec/unit/presenters/v2/service_instance_shared_to_presenter_spec.rb b/spec/unit/presenters/v2/service_instance_shared_to_presenter_spec.rb index fbd6d6e7fce..b7f46c3fe8c 100644 --- a/spec/unit/presenters/v2/service_instance_shared_to_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_instance_shared_to_presenter_spec.rb @@ -4,7 +4,7 @@ module CloudController::Presenters::V2 RSpec.describe ServiceInstanceSharedToPresenter do describe '#to_hash' do it 'returns the space name, org name, and bound app count' do - space = VCAP::CloudController::Space.make + space = create(:space) presenter = ServiceInstanceSharedToPresenter.new expect(presenter.to_hash(space, 42)).to eq( { diff --git a/spec/unit/presenters/v2/service_key_presenter_spec.rb b/spec/unit/presenters/v2/service_key_presenter_spec.rb index 65cb6481ef2..ee6d1f4606c 100644 --- a/spec/unit/presenters/v2/service_key_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_key_presenter_spec.rb @@ -10,7 +10,7 @@ module CloudController::Presenters::V2 let(:relations_presenter) { instance_double(RelationsPresenter, to_hash: relations_hash) } let(:relations_hash) { { 'some_relation_url' => 'http://example.com' } } let(:presenter) { ServiceKeyPresenter.new } - let(:service_key) { VCAP::CloudController::ServiceKey.make } + let(:service_key) { create(:service_key) } before do allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) diff --git a/spec/unit/presenters/v2/service_plan_presenter_spec.rb b/spec/unit/presenters/v2/service_plan_presenter_spec.rb index 1a458c96f31..405acf2bf41 100644 --- a/spec/unit/presenters/v2/service_plan_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_plan_presenter_spec.rb @@ -19,12 +19,10 @@ module CloudController::Presenters::V2 end let(:service_plan) do - VCAP::CloudController::ServicePlan.make( - create_instance_schema:, - update_instance_schema:, - create_binding_schema:, - maintenance_info: - ) + create(:service_plan, create_instance_schema:, + update_instance_schema:, + create_binding_schema:, + maintenance_info:) end let(:maintenance_info) { { version: '2.0' } } diff --git a/spec/unit/presenters/v2/service_presenter_spec.rb b/spec/unit/presenters/v2/service_presenter_spec.rb index 6e60b032f28..563ad76bcf8 100644 --- a/spec/unit/presenters/v2/service_presenter_spec.rb +++ b/spec/unit/presenters/v2/service_presenter_spec.rb @@ -19,9 +19,9 @@ module CloudController::Presenters::V2 end let(:volume_mount) { [{ 'container_dir' => 'mount' }] } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(name: 'broker-1') } + let(:service_broker) { create(:service_broker, name: 'broker-1') } let(:service) do - VCAP::CloudController::Service.make(service_broker:) + create(:service, service_broker:) end it 'returns the service binding entity' do diff --git a/spec/unit/presenters/v2/shared_domain_presenter_spec.rb b/spec/unit/presenters/v2/shared_domain_presenter_spec.rb index e0cdb6afc03..0d544d403c0 100644 --- a/spec/unit/presenters/v2/shared_domain_presenter_spec.rb +++ b/spec/unit/presenters/v2/shared_domain_presenter_spec.rb @@ -17,9 +17,9 @@ module CloudController::Presenters::V2 allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) end - let(:space) { VCAP::CloudController::Space.make } - let(:domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: 'tcp-group') } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(:routing, space:) } + let(:space) { create(:space) } + let(:domain) { create(:shared_domain, router_group_guid: 'tcp-group') } + let(:service_instance) { create(:managed_service_instance, :routing, space:) } it 'returns the domain entity and associated urls' do expect(subject.entity_hash(controller, domain, opts, depth, parents, orphans)).to eq( diff --git a/spec/unit/presenters/v2/space_presenter_spec.rb b/spec/unit/presenters/v2/space_presenter_spec.rb index b28117e6a62..af1427a0f77 100644 --- a/spec/unit/presenters/v2/space_presenter_spec.rb +++ b/spec/unit/presenters/v2/space_presenter_spec.rb @@ -17,18 +17,16 @@ module CloudController::Presenters::V2 allow(RelationsPresenter).to receive(:new).and_return(relations_presenter) end - let(:organization) { VCAP::CloudController::Organization.make } - let(:space_quota_definition) { VCAP::CloudController::SpaceQuotaDefinition.make(organization:) } + let(:organization) { create(:organization) } + let(:space_quota_definition) { create(:space_quota_definition, organization:) } context 'when a space is associated to an isolation segment' do - let(:isolation_segment_model) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment_model) { create(:isolation_segment_model) } let(:space) do - VCAP::CloudController::Space.make( - name: 'no_unicorns_no_rainbows', - organization: organization, - space_quota_definition: space_quota_definition, - allow_ssh: true - ) + create(:space, name: 'no_unicorns_no_rainbows', + organization: organization, + space_quota_definition: space_quota_definition, + allow_ssh: true) end before do @@ -56,11 +54,9 @@ module CloudController::Presenters::V2 context 'when a space is not associated to an isolation segment' do let(:space) do - VCAP::CloudController::Space.make( - name: 'no_unicorns_no_rainbows', - organization: organization, - allow_ssh: true - ) + create(:space, name: 'no_unicorns_no_rainbows', + organization: organization, + allow_ssh: true) end it 'returns the space and does not show isolation segment url' do diff --git a/spec/unit/presenters/v2/user_presenter_spec.rb b/spec/unit/presenters/v2/user_presenter_spec.rb index a5553177140..0362d065997 100644 --- a/spec/unit/presenters/v2/user_presenter_spec.rb +++ b/spec/unit/presenters/v2/user_presenter_spec.rb @@ -11,8 +11,8 @@ module CloudController::Presenters::V2 let(:orphans) { 'orphans' } let(:relations_presenter) { instance_double(RelationsPresenter, to_hash: relations_hash) } let(:relations_hash) { { 'relationship_key' => 'relationship_value' } } - let(:organization) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization:) } + let(:organization) { create(:organization) } + let(:space) { create(:space, organization:) } describe '#entity_hash' do before do diff --git a/spec/unit/presenters/v3/app_env_presenter_spec.rb b/spec/unit/presenters/v3/app_env_presenter_spec.rb index 21cd0ebcdb6..0e848eaf25f 100644 --- a/spec/unit/presenters/v3/app_env_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_env_presenter_spec.rb @@ -4,17 +4,15 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppEnvPresenter do let(:app) do - VCAP::CloudController::AppModel.make( - created_at: Time.at(1), - updated_at: Time.at(2), - environment_variables: { 'some' => 'stuff' }, - desired_state: 'STOPPED' - ) + create(:app_model, created_at: Time.at(1), + updated_at: Time.at(2), + environment_variables: { 'some' => 'stuff' }, + desired_state: 'STOPPED') end let(:buildpack_name) { 'the-happiest-buildpack' } before do - VCAP::CloudController::Buildpack.make(name: buildpack_name) + create(:buildpack, name: buildpack_name) VCAP::CloudController::BuildpackLifecycleDataModel.create( buildpacks: [buildpack_name], stack: 'the-happiest-stack', @@ -27,9 +25,9 @@ module VCAP::CloudController::Presenters::V3 subject(:presenter) { AppEnvPresenter.new(app, show_secrets) } describe '#to_hash' do - let(:service) { VCAP::CloudController::Service.make(label: 'rabbit', tags: ['swell']) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service:) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: app.space, service_plan: service_plan, name: 'rabbit-instance') } + let(:service) { create(:service, label: 'rabbit', tags: ['swell']) } + let(:service_plan) { create(:service_plan, service:) } + let(:service_instance) { create(:managed_service_instance, space: app.space, service_plan: service_plan, name: 'rabbit-instance') } let!(:service_binding) do VCAP::CloudController::ServiceBinding.create(app: app, service_instance: service_instance, type: 'app', credentials: { 'url' => 'www.service.com/foo' }, syslog_drain_url: 'logs.go-here-2.com') diff --git a/spec/unit/presenters/v3/app_environment_variables_presenter_spec.rb b/spec/unit/presenters/v3/app_environment_variables_presenter_spec.rb index 8126b0bde87..142cb600079 100644 --- a/spec/unit/presenters/v3/app_environment_variables_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_environment_variables_presenter_spec.rb @@ -4,9 +4,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppEnvironmentVariablesPresenter do let(:app) do - VCAP::CloudController::AppModel.make( - environment_variables: { 'CUSTOM_ENV_VAR' => 'hello' } - ) + create(:app_model, environment_variables: { 'CUSTOM_ENV_VAR' => 'hello' }) end subject(:presenter) { AppEnvironmentVariablesPresenter.new(app) } diff --git a/spec/unit/presenters/v3/app_feature_presenter_spec.rb b/spec/unit/presenters/v3/app_feature_presenter_spec.rb index 4abc8e972a5..6dcecbe0f33 100644 --- a/spec/unit/presenters/v3/app_feature_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_feature_presenter_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppSshFeaturePresenter do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } describe '#to_hash' do it 'presents the app feature as json' do @@ -18,7 +18,7 @@ module VCAP::CloudController::Presenters::V3 end RSpec.describe AppServiceBindingK8sFeaturePresenter do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } describe '#to_hash' do it 'presents the app feature as json' do @@ -31,7 +31,7 @@ module VCAP::CloudController::Presenters::V3 end RSpec.describe AppFileBasedVcapServicesFeaturePresenter do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } describe '#to_hash' do it 'presents the app feature as json' do diff --git a/spec/unit/presenters/v3/app_manifest_presenter_spec.rb b/spec/unit/presenters/v3/app_manifest_presenter_spec.rb index 78591220b08..31e0d73303e 100644 --- a/spec/unit/presenters/v3/app_manifest_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_manifest_presenter_spec.rb @@ -5,9 +5,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppManifestPresenter do let(:environment_variables) { { 'one' => 'potato', 'two' => 'tomato' } } let(:app) do - VCAP::CloudController::AppModel.make( - environment_variables: - ) + create(:app_model, environment_variables:) end let(:space) { app.space } @@ -27,10 +25,8 @@ module VCAP::CloudController::Presenters::V3 context 'for docker apps' do let(:app) do - VCAP::CloudController::AppModel.make( - :docker, - environment_variables: - ) + create(:app_model, :docker, + environment_variables:) end it 'returns the application name' do @@ -66,25 +62,21 @@ module VCAP::CloudController::Presenters::V3 context 'when the app has other associated resources' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - space: space, - name: 'service-instance-a' - ) + create(:managed_service_instance, space: space, + name: 'service-instance-a') end let(:service_instance2) do - VCAP::CloudController::ManagedServiceInstance.make( - space: space, - name: 'service-instance-z' - ) + create(:managed_service_instance, space: space, + name: 'service-instance-z') end - let(:service_binding) { VCAP::CloudController::ServiceBinding.make(app:, service_instance:) } - let(:service_binding2) { VCAP::CloudController::ServiceBinding.make(app: app, service_instance: service_instance2) } + let(:service_binding) { create(:service_binding, app:, service_instance:) } + let(:service_binding2) { create(:service_binding, app: app, service_instance: service_instance2) } let(:service_bindings) { [service_binding2, service_binding] } - let(:route) { VCAP::CloudController::Route.make host: 'aaa' } - let(:route2) { VCAP::CloudController::Route.make host: 'zzz' } - let!(:route_mapping1) { VCAP::CloudController::RouteMappingModel.make(app:, route:) } - let!(:route_mapping2) { VCAP::CloudController::RouteMappingModel.make(app: app, route: route2) } + let(:route) { create(:route, host: 'aaa') } + let(:route2) { create(:route, host: 'zzz') } + let!(:route_mapping1) { create(:route_mapping_model, app:, route:) } + let!(:route_mapping2) { create(:route_mapping_model, app: app, route: route2) } let!(:process1) do VCAP::CloudController::ProcessModelFactory.make( @@ -98,21 +90,19 @@ module VCAP::CloudController::Presenters::V3 ) end let!(:process2) do - VCAP::CloudController::ProcessModel.make( - app: app, - type: 'zzzzz' - ) + create(:process_model, app: app, + type: 'zzzzz') end - let!(:app_label) { VCAP::CloudController::AppLabelModel.make(resource_guid: app.guid, key_name: 'potato', value: 'idaho') } - let!(:app_annotation) { VCAP::CloudController::AppAnnotationModel.make(resource_guid: app.guid, key_name: 'style', value: 'mashed') } + let!(:app_label) { create(:app_label_model, resource_guid: app.guid, key_name: 'potato', value: 'idaho') } + let!(:app_annotation) { create(:app_annotation_model, resource_guid: app.guid, key_name: 'style', value: 'mashed') } - let!(:sidecar1) { VCAP::CloudController::SidecarModel.make(name: 'authenticator', command: './authenticator', app: app) } - let!(:sidecar2) { VCAP::CloudController::SidecarModel.make(name: 'my_sidecar', command: 'rackup', app: app) } + let!(:sidecar1) { create(:sidecar_model, name: 'authenticator', command: './authenticator', app: app) } + let!(:sidecar2) { create(:sidecar_model, name: 'my_sidecar', command: 'rackup', app: app) } - let!(:sidecar_process_type1) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'worker', sidecar: sidecar1, app_guid: app.guid) } - let!(:sidecar_process_type2) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'web', sidecar: sidecar1, app_guid: app.guid) } - let!(:sidecar_process_type3) { VCAP::CloudController::SidecarProcessTypeModel.make(type: 'other_worker', sidecar: sidecar2, app_guid: app.guid) } + let!(:sidecar_process_type1) { create(:sidecar_process_type_model, type: 'worker', sidecar: sidecar1, app_guid: app.guid) } + let!(:sidecar_process_type2) { create(:sidecar_process_type_model, type: 'web', sidecar: sidecar1, app_guid: app.guid) } + let!(:sidecar_process_type3) { create(:sidecar_process_type_model, type: 'other_worker', sidecar: sidecar2, app_guid: app.guid) } it 'presents the app manifest' do result = AppManifestPresenter.new(app, service_bindings, app.route_mappings).to_hash @@ -170,11 +160,9 @@ module VCAP::CloudController::Presenters::V3 context 'when a process is missing attributes' do let!(:process1) do - VCAP::CloudController::ProcessModel.make( - app: app, - health_check_timeout: nil, - health_check_http_endpoint: nil - ) + create(:process_model, app: app, + health_check_timeout: nil, + health_check_http_endpoint: nil) end it 'does not include the missing attributes in the hash' do @@ -206,7 +194,7 @@ module VCAP::CloudController::Presenters::V3 context 'when the app is a buildpack app' do before do - VCAP::CloudController::Buildpack.make(name: 'limabean') + create(:buildpack, name: 'limabean') app.lifecycle_data.update( buildpacks: ['limabean', 'git://user:pass@github.com/repo'], stack: 'the-happiest-stack' @@ -222,7 +210,7 @@ module VCAP::CloudController::Presenters::V3 end context 'when the app is a docker app' do - let(:app) { VCAP::CloudController::AppModel.make :docker } + let(:app) { create(:app_model, :docker) } context 'when the app has a current droplet' do let(:docker_username) { 'xXxMyL1ttlePwnyxXx' } @@ -274,12 +262,10 @@ module VCAP::CloudController::Presenters::V3 end let!(:package) do - VCAP::CloudController::PackageModel.make( - :docker, - docker_image: 'my-image:tag', - docker_username: 'xXxMyL1ttlePwnyxXx', - app: app - ) + create(:package_model, :docker, + docker_image: 'my-image:tag', + docker_username: 'xXxMyL1ttlePwnyxXx', + app: app) end it 'omits all docker information, even if the app has packages' do diff --git a/spec/unit/presenters/v3/app_manifest_presenters/process_properties_presenter_spec.rb b/spec/unit/presenters/v3/app_manifest_presenters/process_properties_presenter_spec.rb index 38f41409dd4..33af9b318a3 100644 --- a/spec/unit/presenters/v3/app_manifest_presenters/process_properties_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_manifest_presenters/process_properties_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters RSpec.describe ProcessPropertiesPresenter do describe 'command' do - let(:app) { VCAP::CloudController::AppModel.make } + let(:app) { create(:app_model) } context 'when a process does not have a user-specified command' do before do @@ -35,17 +35,15 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters describe '#process_hash' do let(:process) do - VCAP::CloudController::ProcessModel.make( - health_check_type: 'http', - health_check_http_endpoint: '/healthy', - health_check_invocation_timeout: 10, - health_check_interval: 5, - readiness_health_check_type: 'http', - readiness_health_check_http_endpoint: '/ready', - readiness_health_check_invocation_timeout: 20, - readiness_health_check_interval: 7, - health_check_timeout: 30 - ) + create(:process_model, health_check_type: 'http', + health_check_http_endpoint: '/healthy', + health_check_invocation_timeout: 10, + health_check_interval: 5, + readiness_health_check_type: 'http', + readiness_health_check_http_endpoint: '/ready', + readiness_health_check_invocation_timeout: 20, + readiness_health_check_interval: 7, + health_check_timeout: 30) end it 'renders a compact hash of the process' do @@ -71,9 +69,7 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters context 'nullable fields' do context 'when command is present' do let(:process) do - VCAP::CloudController::ProcessModel.make( - command: './start-command' - ) + create(:process_model, command: './start-command') end it 'includes command in the hash' do @@ -84,9 +80,7 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters context 'when command is not present' do let(:process) do - VCAP::CloudController::ProcessModel.make( - command: nil - ) + create(:process_model, command: nil) end it 'does not include command in the hash' do @@ -97,9 +91,7 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters context 'when user is present' do let(:process) do - VCAP::CloudController::ProcessModel.make( - user: 'ContainerUser' - ) + create(:process_model, user: 'ContainerUser') end it 'includes user in the hash' do @@ -110,9 +102,7 @@ module VCAP::CloudController::Presenters::V3::AppManifestPresenters context 'when user is not present' do let(:process) do - VCAP::CloudController::ProcessModel.make( - user: nil - ) + create(:process_model, user: nil) end it 'does not include user in the hash' do diff --git a/spec/unit/presenters/v3/app_presenter_spec.rb b/spec/unit/presenters/v3/app_presenter_spec.rb index db3dad95550..13527d7bac1 100644 --- a/spec/unit/presenters/v3/app_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_presenter_spec.rb @@ -4,16 +4,14 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppPresenter do let(:app) do - VCAP::CloudController::AppModel.make( - name: 'Davis', - environment_variables: { 'some' => 'stuff' }, - desired_state: 'STOPPED', - droplet: VCAP::CloudController::DropletModel.make - ) + create(:app_model, name: 'Davis', + environment_variables: { 'some' => 'stuff' }, + desired_state: 'STOPPED', + droplet: create(:droplet_model)) end before do - VCAP::CloudController::Buildpack.make(name: 'limabean') + create(:buildpack, name: 'limabean') app.lifecycle_data.update( buildpacks: ['git://user:pass@github.com/repo', 'limabean'], stack: 'the-happiest-stack' @@ -61,28 +59,22 @@ module VCAP::CloudController::Presenters::V3 context 'when there are labels and annotations for the app' do let!(:release_label) do - VCAP::CloudController::AppLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: app.guid - ) + create(:app_label_model, key_name: 'release', + value: 'stable', + resource_guid: app.guid) end let!(:potato_label) do - VCAP::CloudController::AppLabelModel.make( - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed', - resource_guid: app.guid - ) + create(:app_label_model, key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed', + resource_guid: app.guid) end let!(:annotation) do - VCAP::CloudController::AppAnnotationModel.make( - resource_guid: app.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:app_annotation_model, resource_guid: app.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end it 'includes the metadata on the presented app' do diff --git a/spec/unit/presenters/v3/app_ssh_status_presenter_spec.rb b/spec/unit/presenters/v3/app_ssh_status_presenter_spec.rb index 82ff0ab09e9..64d1589d4f3 100644 --- a/spec/unit/presenters/v3/app_ssh_status_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_ssh_status_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe AppSshStatusPresenter do - let!(:app) { VCAP::CloudController::AppModel.make(enable_ssh: true) } + let!(:app) { create(:app_model, enable_ssh: true) } let(:globally_enabled) { TestConfig.config_instance.get(:allow_app_ssh_access) } before do diff --git a/spec/unit/presenters/v3/app_usage_event_presenter_spec.rb b/spec/unit/presenters/v3/app_usage_event_presenter_spec.rb index 5973fe8a642..382f9846826 100644 --- a/spec/unit/presenters/v3/app_usage_event_presenter_spec.rb +++ b/spec/unit/presenters/v3/app_usage_event_presenter_spec.rb @@ -2,7 +2,7 @@ require 'presenters/v3/app_usage_event_presenter' RSpec.describe VCAP::CloudController::Presenters::V3::AppUsageEventPresenter do - let(:usage_event) { VCAP::CloudController::AppUsageEvent.make } + let(:usage_event) { create(:app_usage_event) } describe '#to_hash' do let(:result) { described_class.new(usage_event).to_hash } @@ -34,12 +34,10 @@ context 'when the usage event is for a task' do let(:usage_event) do - VCAP::CloudController::AppUsageEvent.make( - app_guid: '', - process_type: nil, - task_guid: 'task-guid', - task_name: 'some-task' - ) + create(:app_usage_event, app_guid: '', + process_type: nil, + task_guid: 'task-guid', + task_name: 'some-task') end it 'displays null for the process.guid' do diff --git a/spec/unit/presenters/v3/build_presenter_spec.rb b/spec/unit/presenters/v3/build_presenter_spec.rb index 2a75502559a..b1fac154e86 100644 --- a/spec/unit/presenters/v3/build_presenter_spec.rb +++ b/spec/unit/presenters/v3/build_presenter_spec.rb @@ -3,23 +3,21 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe BuildPresenter do - let(:app) { VCAP::CloudController::AppModel.make } - let(:package) { VCAP::CloudController::PackageModel.make(app:) } - let!(:happy_buildpack) { VCAP::CloudController::Buildpack.make(name: 'the-happiest-buildpack') } + let(:app) { create(:app_model) } + let(:package) { create(:package_model, app:) } + let!(:happy_buildpack) { create(:buildpack, name: 'the-happiest-buildpack') } let(:buildpacks) { [happy_buildpack.name, 'http://bob:secret@example.com/happy'] } let(:stack) { 'the-happiest-stack' } let(:build) do - VCAP::CloudController::BuildModel.make( - state: VCAP::CloudController::BuildModel::STAGING_STATE, - package: package, - app: app, - staging_memory_in_mb: 1024, - staging_disk_in_mb: 1024, - staging_log_rate_limit: 2048, - created_by_user_guid: 'happy user guid', - created_by_user_name: 'happier user name', - created_by_user_email: 'this user emailed in' - ) + create(:build_model, state: VCAP::CloudController::BuildModel::STAGING_STATE, + package: package, + app: app, + staging_memory_in_mb: 1024, + staging_disk_in_mb: 1024, + staging_log_rate_limit: 2048, + created_by_user_guid: 'happy user guid', + created_by_user_name: 'happier user name', + created_by_user_email: 'this user emailed in') end describe '#to_hash' do @@ -81,9 +79,9 @@ module VCAP::CloudController::Presenters::V3 end context 'docker lifecycle' do - let(:app) { VCAP::CloudController::AppModel.make(:docker) } - let(:package) { VCAP::CloudController::PackageModel.make(:docker, app:) } - let(:build) { VCAP::CloudController::BuildModel.make(:docker, app:, package:) } + let(:app) { create(:app_model, :docker) } + let(:package) { create(:package_model, :docker, app:) } + let(:build) { create(:build_model, :docker, app:, package:) } it 'presents the build as a hash' do links = { @@ -110,12 +108,10 @@ module VCAP::CloudController::Presenters::V3 context 'when the droplet has finished staging' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - package_guid: package.guid, - app: app, - build: build - ) + create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE, + package_guid: package.guid, + app: app, + build: build) end before do diff --git a/spec/unit/presenters/v3/buildpack_presenter_spec.rb b/spec/unit/presenters/v3/buildpack_presenter_spec.rb index 74d0be2e0aa..64ff58457b5 100644 --- a/spec/unit/presenters/v3/buildpack_presenter_spec.rb +++ b/spec/unit/presenters/v3/buildpack_presenter_spec.rb @@ -2,7 +2,7 @@ require 'presenters/v3/buildpack_presenter' RSpec.describe VCAP::CloudController::Presenters::V3::BuildpackPresenter do - let(:buildpack) { VCAP::CloudController::Buildpack.make } + let(:buildpack) { create(:buildpack) } describe '#to_hash' do let(:result) { described_class.new(buildpack).to_hash } diff --git a/spec/unit/presenters/v3/cache_key_presenter_spec.rb b/spec/unit/presenters/v3/cache_key_presenter_spec.rb index 1005b495554..b80c5285131 100644 --- a/spec/unit/presenters/v3/cache_key_presenter_spec.rb +++ b/spec/unit/presenters/v3/cache_key_presenter_spec.rb @@ -5,7 +5,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe CacheKeyPresenter do context 'v2 app / v3 process' do it 'renders as app_guid/stack_name' do - process = VCAP::CloudController::ProcessModel.make + process = create(:process_model) key = CacheKeyPresenter.cache_key(guid: process.guid, stack_name: process.stack.name) @@ -15,8 +15,8 @@ module VCAP::CloudController::Presenters::V3 context 'v3 AppModel' do it 'renders as app_guid/stack_name' do - app = VCAP::CloudController::AppModel.make - stack_name = VCAP::CloudController::Stack.make.name + app = create(:app_model) + stack_name = create(:stack).name key = CacheKeyPresenter.cache_key(guid: app.guid, stack_name: stack_name) expect(key).to eq("#{app.guid}/#{stack_name}") end diff --git a/spec/unit/presenters/v3/deployment_presenter_spec.rb b/spec/unit/presenters/v3/deployment_presenter_spec.rb index 9b0265acba9..dafc8087f0c 100644 --- a/spec/unit/presenters/v3/deployment_presenter_spec.rb +++ b/spec/unit/presenters/v3/deployment_presenter_spec.rb @@ -3,25 +3,23 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe DeploymentPresenter do - let(:droplet) { VCAP::CloudController::DropletModel.make } - let(:previous_droplet) { VCAP::CloudController::DropletModel.make } - let(:app) { VCAP::CloudController::AppModel.make } - let(:process) { VCAP::CloudController::ProcessModel.make(guid: 'deploying-process-guid', type: 'web-deployment-guid-type') } + let(:droplet) { create(:droplet_model) } + let(:previous_droplet) { create(:droplet_model) } + let(:app) { create(:app_model) } + let(:process) { create(:process_model, guid: 'deploying-process-guid', type: 'web-deployment-guid-type') } let(:deployment_state) { VCAP::CloudController::DeploymentModel::DEPLOYING_STATE } let!(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app, - droplet: droplet, - previous_droplet: previous_droplet, - deploying_web_process: process, - last_healthy_at: '2019-07-12 19:01:54', - status_updated_at: '2019-07-11 19:01:54', - state: deployment_state, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON, - web_instances: 20, - memory_in_mb: 1000 - ) + create(:deployment_model_test_factory, app: app, + droplet: droplet, + previous_droplet: previous_droplet, + deploying_web_process: process, + last_healthy_at: '2019-07-12 19:01:54', + status_updated_at: '2019-07-11 19:01:54', + state: deployment_state, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON, + web_instances: 20, + memory_in_mb: 1000) end describe '#to_hash' do @@ -55,17 +53,15 @@ module VCAP::CloudController::Presenters::V3 context 'when the deployment has revision fields' do let!(:deployment) do - VCAP::CloudController::DeploymentModelTestFactory.make( - app: app, - droplet: droplet, - previous_droplet: previous_droplet, - deploying_web_process: process, - revision_guid: 'totes-a-guid', - revision_version: 96, - state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON - ) + create(:deployment_model_test_factory, app: app, + droplet: droplet, + previous_droplet: previous_droplet, + deploying_web_process: process, + revision_guid: 'totes-a-guid', + revision_version: 96, + state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) end it 'presents the deployment as json' do diff --git a/spec/unit/presenters/v3/domain_presenter_spec.rb b/spec/unit/presenters/v3/domain_presenter_spec.rb index 1ed3537e6bf..3b9283644a7 100644 --- a/spec/unit/presenters/v3/domain_presenter_spec.rb +++ b/spec/unit/presenters/v3/domain_presenter_spec.rb @@ -14,27 +14,21 @@ module VCAP::CloudController::Presenters::V3 context 'when the domain is public (shared)' do let(:domain) do - VCAP::CloudController::SharedDomain.make( - name: 'my.domain.com', - internal: true - ) + create(:shared_domain, name: 'my.domain.com', + internal: true) end let!(:domain_label) do - VCAP::CloudController::DomainLabelModel.make( - resource_guid: domain.guid, - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed' - ) + create(:domain_label_model, resource_guid: domain.guid, + key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed') end let!(:domain_annotation) do - VCAP::CloudController::DomainAnnotationModel.make( - resource_guid: domain.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:domain_annotation_model, resource_guid: domain.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end let(:routing_api_client) { instance_double(VCAP::CloudController::RoutingApi::Client) } @@ -63,30 +57,24 @@ module VCAP::CloudController::Presenters::V3 end context 'when the domain is private' do - let(:org) { VCAP::CloudController::Organization.make(guid: 'org') } + let(:org) { create(:organization, guid: 'org') } let(:domain) do - VCAP::CloudController::PrivateDomain.make( - name: 'my.domain.com', - internal: true, - owning_organization: org - ) + create(:private_domain, name: 'my.domain.com', + internal: true, + owning_organization: org) end let!(:domain_label) do - VCAP::CloudController::DomainLabelModel.make( - resource_guid: domain.guid, - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed' - ) + create(:domain_label_model, resource_guid: domain.guid, + key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed') end let!(:domain_annotation) do - VCAP::CloudController::DomainAnnotationModel.make( - resource_guid: domain.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:domain_annotation_model, resource_guid: domain.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end it 'presents the base domain properties as json' do @@ -117,9 +105,9 @@ module VCAP::CloudController::Presenters::V3 end context 'and has shared organizations' do - let(:shared_org_1) { VCAP::CloudController::Organization.make(guid: 'org2') } - let(:shared_org_2) { VCAP::CloudController::Organization.make(guid: 'org3') } - let(:shared_org_3) { VCAP::CloudController::Organization.make(guid: 'org4') } + let(:shared_org_1) { create(:organization, guid: 'org2') } + let(:shared_org_2) { create(:organization, guid: 'org3') } + let(:shared_org_3) { create(:organization, guid: 'org4') } before do shared_org_1.add_private_domain(domain) @@ -179,29 +167,23 @@ module VCAP::CloudController::Presenters::V3 allow(routing_api_client).to receive_messages(enabled?: true, router_group: router_group) end - let(:org) { VCAP::CloudController::Organization.make(guid: 'org') } + let(:org) { create(:organization, guid: 'org') } let(:domain) do - VCAP::CloudController::SharedDomain.make( - name: 'my.domain.com', - router_group_guid: 'some-router-guid' - ) + create(:shared_domain, name: 'my.domain.com', + router_group_guid: 'some-router-guid') end let!(:domain_label) do - VCAP::CloudController::DomainLabelModel.make( - resource_guid: domain.guid, - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed' - ) + create(:domain_label_model, resource_guid: domain.guid, + key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed') end let!(:domain_annotation) do - VCAP::CloudController::DomainAnnotationModel.make( - resource_guid: domain.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:domain_annotation_model, resource_guid: domain.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end it 'presents the base domain properties as json' do diff --git a/spec/unit/presenters/v3/domain_shared_orgs_presenter_spec.rb b/spec/unit/presenters/v3/domain_shared_orgs_presenter_spec.rb index 701c16f182b..676d56e92c5 100644 --- a/spec/unit/presenters/v3/domain_shared_orgs_presenter_spec.rb +++ b/spec/unit/presenters/v3/domain_shared_orgs_presenter_spec.rb @@ -9,11 +9,9 @@ module VCAP::CloudController::Presenters::V3 describe '#to_hash' do let(:domain) do - VCAP::CloudController::PrivateDomain.make( - name: 'my.domain.com', - internal: true, - owning_organization: org - ) + create(:private_domain, name: 'my.domain.com', + internal: true, + owning_organization: org) end subject do @@ -25,12 +23,12 @@ module VCAP::CloudController::Presenters::V3 end context 'when the domain is private' do - let(:org) { VCAP::CloudController::Organization.make(guid: 'org') } + let(:org) { create(:organization, guid: 'org') } context 'and has shared organizations' do - let(:shared_org_1) { VCAP::CloudController::Organization.make(guid: 'org2') } - let(:shared_org_2) { VCAP::CloudController::Organization.make(guid: 'org3') } - let(:shared_org_3) { VCAP::CloudController::Organization.make(guid: 'org4') } + let(:shared_org_1) { create(:organization, guid: 'org2') } + let(:shared_org_2) { create(:organization, guid: 'org3') } + let(:shared_org_3) { create(:organization, guid: 'org4') } before do shared_org_1.add_private_domain(domain) @@ -63,9 +61,9 @@ module VCAP::CloudController::Presenters::V3 end context 'and has no visible shared organizations' do - let(:shared_org_1) { VCAP::CloudController::Organization.make(guid: 'org2') } - let(:shared_org_2) { VCAP::CloudController::Organization.make(guid: 'org3') } - let(:shared_org_3) { VCAP::CloudController::Organization.make(guid: 'org4') } + let(:shared_org_1) { create(:organization, guid: 'org2') } + let(:shared_org_2) { create(:organization, guid: 'org3') } + let(:shared_org_3) { create(:organization, guid: 'org4') } let(:visible_org_guids) { [] } diff --git a/spec/unit/presenters/v3/droplet_presenter_spec.rb b/spec/unit/presenters/v3/droplet_presenter_spec.rb index fb22a505fae..9f9292bdaaa 100644 --- a/spec/unit/presenters/v3/droplet_presenter_spec.rb +++ b/spec/unit/presenters/v3/droplet_presenter_spec.rb @@ -4,16 +4,14 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe DropletPresenter do let(:droplet) do - VCAP::CloudController::DropletModel.make( - state: VCAP::CloudController::DropletModel::STAGED_STATE, - error_id: 'FAILED', - error_description: 'things went all sorts of bad', - process_types: { 'web' => 'npm start', 'worker' => 'start worker' }, - execution_metadata: 'black-box-string', - package_guid: 'abcdefabcdef12345', - droplet_hash: 'droplet-sha1-checksum', - sha256_checksum: 'droplet-sha256-checksum' - ) + create(:droplet_model, state: VCAP::CloudController::DropletModel::STAGED_STATE, + error_id: 'FAILED', + error_description: 'things went all sorts of bad', + process_types: { 'web' => 'npm start', 'worker' => 'start worker' }, + execution_metadata: 'black-box-string', + package_guid: 'abcdefabcdef12345', + droplet_hash: 'droplet-sha1-checksum', + sha256_checksum: 'droplet-sha256-checksum') end describe '#to_hash' do @@ -114,7 +112,7 @@ module VCAP::CloudController::Presenters::V3 describe 'links' do context 'when there is no package guid' do - let(:droplet) { VCAP::CloudController::DropletModel.make(package_guid: nil) } + let(:droplet) { create(:droplet_model, package_guid: nil) } it 'links to nil' do expect(result[:links][:package]).to be_nil @@ -127,11 +125,11 @@ module VCAP::CloudController::Presenters::V3 let(:buildpack1_name) { 'rosanna' } let(:buildpack1_other_name) { 'toto' } let(:buildpack1_version) { '1.9.82' } - let!(:buildpack1) { VCAP::CloudController::Buildpack.make(name: buildpack1_name, sha256_checksum: 'mammoth') } + let!(:buildpack1) { create(:buildpack, name: buildpack1_name, sha256_checksum: 'mammoth') } let(:buildpack2_name) { 'chris-cross' } let(:buildpack2_other_name) { 'sailing' } let(:buildpack2_version) { '1.9.79' } - let!(:buildpack2) { VCAP::CloudController::Buildpack.make(name: buildpack2_name, sha256_checksum: 'languid') } + let!(:buildpack2) { create(:buildpack, name: buildpack2_name, sha256_checksum: 'languid') } let(:buildpack_receipt_buildpack) { buildpack2_name } let(:buildpack_receipt_detect_output) { 'black cow' } @@ -192,10 +190,8 @@ module VCAP::CloudController::Presenters::V3 context 'docker lifecycle' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - :docker, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, :docker, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end before do @@ -222,10 +218,8 @@ module VCAP::CloudController::Presenters::V3 context 'cnb lifecycle' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - :cnb, - state: VCAP::CloudController::DropletModel::STAGED_STATE - ) + create(:droplet_model, :cnb, + state: VCAP::CloudController::DropletModel::STAGED_STATE) end let(:first_buildpack) { 'docker://first-buildpack:latest' } let(:second_buildpack) { 'https://second-buildpack.io' } @@ -254,28 +248,22 @@ module VCAP::CloudController::Presenters::V3 context 'when there are labels and annotations for the droplet' do let!(:release_label) do - VCAP::CloudController::DropletLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: droplet.guid - ) + create(:droplet_label_model, key_name: 'release', + value: 'stable', + resource_guid: droplet.guid) end let!(:potato_label) do - VCAP::CloudController::DropletLabelModel.make( - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed', - resource_guid: droplet.guid - ) + create(:droplet_label_model, key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed', + resource_guid: droplet.guid) end let!(:annotation) do - VCAP::CloudController::DropletAnnotationModel.make( - resource_guid: droplet.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:droplet_annotation_model, resource_guid: droplet.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end it 'includes the metadata on the presented droplet' do diff --git a/spec/unit/presenters/v3/event_presenter_spec.rb b/spec/unit/presenters/v3/event_presenter_spec.rb index 4955bfd2425..90ccac3f8db 100644 --- a/spec/unit/presenters/v3/event_presenter_spec.rb +++ b/spec/unit/presenters/v3/event_presenter_spec.rb @@ -2,7 +2,7 @@ require 'presenters/v3/event_presenter' RSpec.describe VCAP::CloudController::Presenters::V3::EventPresenter do - let(:event) { VCAP::CloudController::Event.make } + let(:event) { create(:event) } describe '#to_hash' do let(:result) { described_class.new(event).to_hash } diff --git a/spec/unit/presenters/v3/feature_flag_presenter_spec.rb b/spec/unit/presenters/v3/feature_flag_presenter_spec.rb index c28ba9e5c40..2b26e402ce2 100644 --- a/spec/unit/presenters/v3/feature_flag_presenter_spec.rb +++ b/spec/unit/presenters/v3/feature_flag_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe FeatureFlagPresenter do - let(:feature_flag) { VCAP::CloudController::FeatureFlag.make } + let(:feature_flag) { create(:feature_flag) } describe '#to_hash' do let(:result) { FeatureFlagPresenter.new(feature_flag).to_hash } diff --git a/spec/unit/presenters/v3/isolation_segment_presenter_spec.rb b/spec/unit/presenters/v3/isolation_segment_presenter_spec.rb index e07cb00e802..eb29d625b88 100644 --- a/spec/unit/presenters/v3/isolation_segment_presenter_spec.rb +++ b/spec/unit/presenters/v3/isolation_segment_presenter_spec.rb @@ -4,21 +4,17 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe IsolationSegmentPresenter do let!(:annotation) do - VCAP::CloudController::IsolationSegmentAnnotationModel.make( - key_name: 'vegetable', - value: 'asparagus', - resource_guid: isolation_segment.guid - ) + create(:isolation_segment_annotation_model, key_name: 'vegetable', + value: 'asparagus', + resource_guid: isolation_segment.guid) end let!(:label) do - VCAP::CloudController::IsolationSegmentLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: isolation_segment.guid - ) + create(:isolation_segment_label_model, key_name: 'release', + value: 'stable', + resource_guid: isolation_segment.guid) end - let(:isolation_segment) { VCAP::CloudController::IsolationSegmentModel.make } + let(:isolation_segment) { create(:isolation_segment_model) } describe '#to_hash' do let(:result) { IsolationSegmentPresenter.new(isolation_segment).to_hash } diff --git a/spec/unit/presenters/v3/job_presenter_spec.rb b/spec/unit/presenters/v3/job_presenter_spec.rb index 7ee141914c1..455f367c579 100644 --- a/spec/unit/presenters/v3/job_presenter_spec.rb +++ b/spec/unit/presenters/v3/job_presenter_spec.rb @@ -6,13 +6,11 @@ module VCAP::CloudController::Presenters::V3 shared_examples_for(JobPresenter) do let(:api_error) { nil } let(:job) do - VCAP::CloudController::PollableJobModel.make( - state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, - operation: "#{resource_type}.my_async_operation", - resource_type: resource_type, - resource_guid: resource.guid, - cf_api_error: api_error - ) + create(:pollable_job_model, state: VCAP::CloudController::PollableJobModel::COMPLETE_STATE, + operation: "#{resource_type}.my_async_operation", + resource_type: resource_type, + resource_guid: resource.guid, + cf_api_error: api_error) end let(:result) { JobPresenter.new(job).to_hash } @@ -108,8 +106,8 @@ module VCAP::CloudController::Presenters::V3 context 'when the job has a warning' do before do - VCAP::CloudController::JobWarningModel.make(job: job, detail: 'warning one') - VCAP::CloudController::JobWarningModel.make(job: job, detail: 'warning two') + create(:job_warning_model, job: job, detail: 'warning one') + create(:job_warning_model, job: job, detail: 'warning two') end it 'presents the list of warnings' do @@ -122,35 +120,35 @@ module VCAP::CloudController::Presenters::V3 context 'for apps' do it_behaves_like JobPresenter do let(:resource_type) { 'app' } - let(:resource) { VCAP::CloudController::AppModel.make } + let(:resource) { create(:app_model) } end end context 'for buildpacks' do it_behaves_like JobPresenter do let(:resource_type) { 'buildpack' } - let(:resource) { VCAP::CloudController::Buildpack.make } + let(:resource) { create(:buildpack) } end end context 'for droplets' do it_behaves_like JobPresenter do let(:resource_type) { 'droplet' } - let(:resource) { VCAP::CloudController::DropletModel.make(app: nil) } + let(:resource) { create(:droplet_model, app: nil, set_as_current_droplet: false) } end end context 'for packages' do it_behaves_like JobPresenter do let(:resource_type) { 'package' } - let(:resource) { VCAP::CloudController::PackageModel.make } + let(:resource) { create(:package_model) } end end context 'for service brokers' do it_behaves_like JobPresenter do let(:resource_type) { 'service_broker' } - let(:resource) { VCAP::CloudController::ServiceBroker.make } + let(:resource) { create(:service_broker) } end end end diff --git a/spec/unit/presenters/v3/organization_presenter_spec.rb b/spec/unit/presenters/v3/organization_presenter_spec.rb index 41db88f9d08..b9800bf4510 100644 --- a/spec/unit/presenters/v3/organization_presenter_spec.rb +++ b/spec/unit/presenters/v3/organization_presenter_spec.rb @@ -4,41 +4,33 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe OrganizationPresenter do let(:organization_quota) do - VCAP::CloudController::QuotaDefinition.make(guid: 'quota-guid') + create(:quota_definition, guid: 'quota-guid') end let(:organization) do - VCAP::CloudController::Organization.make(quota_definition: organization_quota) + create(:organization, quota_definition: organization_quota) end let!(:release_label) do - VCAP::CloudController::OrganizationLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: organization.guid - ) + create(:organization_label_model, key_name: 'release', + value: 'stable', + resource_guid: organization.guid) end let!(:potato_label) do - VCAP::CloudController::OrganizationLabelModel.make( - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed', - resource_guid: organization.guid - ) + create(:organization_label_model, key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed', + resource_guid: organization.guid) end let!(:organization_annotation_the_first) do - VCAP::CloudController::OrganizationAnnotationModel.make( - key_name: 'city', - value: 'Monticello', - resource_guid: organization.guid - ) + create(:organization_annotation_model, key_name: 'city', + value: 'Monticello', + resource_guid: organization.guid) end let!(:organization_annotation_the_second) do - VCAP::CloudController::OrganizationAnnotationModel.make( - key_name: 'state', - value: 'Indiana', - resource_guid: organization.guid - ) + create(:organization_annotation_model, key_name: 'state', + value: 'Indiana', + resource_guid: organization.guid) end describe '#to_hash' do diff --git a/spec/unit/presenters/v3/organization_quota_presenter_spec.rb b/spec/unit/presenters/v3/organization_quota_presenter_spec.rb index 080fd4c5a83..74142a3002c 100644 --- a/spec/unit/presenters/v3/organization_quota_presenter_spec.rb +++ b/spec/unit/presenters/v3/organization_quota_presenter_spec.rb @@ -3,9 +3,9 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe OrganizationQuotaPresenter do - let(:org) { VCAP::CloudController::Organization.make } - let(:org2) { VCAP::CloudController::Organization.make } - let(:organization_quota) { VCAP::CloudController::QuotaDefinition.make(guid: 'quota-guid') } + let(:org) { create(:organization) } + let(:org2) { create(:organization) } + let(:organization_quota) { create(:quota_definition, guid: 'quota-guid') } let(:all_orgs_visible) { false } let(:visible_org_guids) { [org.guid] } let(:visible_org_guids_query) { VCAP::CloudController::Organization.where(guid: visible_org_guids).select(:guid) } diff --git a/spec/unit/presenters/v3/organization_usage_summary_presenter_spec.rb b/spec/unit/presenters/v3/organization_usage_summary_presenter_spec.rb index 149e7936fe4..4b24c0d6bfb 100644 --- a/spec/unit/presenters/v3/organization_usage_summary_presenter_spec.rb +++ b/spec/unit/presenters/v3/organization_usage_summary_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe OrganizationUsageSummaryPresenter do - let(:org) { VCAP::CloudController::Organization.make } + let(:org) { create(:organization) } describe '#to_hash' do let(:result) { OrganizationUsageSummaryPresenter.new(org).to_hash } diff --git a/spec/unit/presenters/v3/package_presenter_spec.rb b/spec/unit/presenters/v3/package_presenter_spec.rb index 2a8f30c6956..258ebd55d40 100644 --- a/spec/unit/presenters/v3/package_presenter_spec.rb +++ b/spec/unit/presenters/v3/package_presenter_spec.rb @@ -5,39 +5,31 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe PackagePresenter do describe '#to_hash' do let(:result) { PackagePresenter.new(package).to_hash } - let(:package) { VCAP::CloudController::PackageModel.make(type: 'package_type', sha256_checksum: 'sha256') } + let(:package) { create(:package_model, type: 'package_type', sha256_checksum: 'sha256') } let!(:release_label) do - VCAP::CloudController::PackageLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: package.guid - ) + create(:package_label_model, key_name: 'release', + value: 'stable', + resource_guid: package.guid) end let!(:potato_label) do - VCAP::CloudController::PackageLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: package.guid - ) + create(:package_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: package.guid) end let!(:mountain_annotation) do - VCAP::CloudController::PackageAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: package.guid - ) + create(:package_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: package.guid) end let!(:plain_annotation) do - VCAP::CloudController::PackageAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: package.guid - ) + create(:package_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: package.guid) end it 'presents the package as json' do @@ -60,7 +52,7 @@ module VCAP::CloudController::Presenters::V3 end context 'when the package type is bits' do - let(:package) { VCAP::CloudController::PackageModel.make(type: 'bits') } + let(:package) { create(:package_model, type: 'bits') } it 'includes links to upload, download, and stage' do expect(result[:links][:upload][:href]).to eq("#{link_prefix}/v3/packages/#{package.guid}/upload") @@ -74,12 +66,10 @@ module VCAP::CloudController::Presenters::V3 context 'when the package type is docker' do let(:package) do - VCAP::CloudController::PackageModel.make( - type: 'docker', - docker_image: 'registry/image:latest', - docker_username: 'jarjarbinks', - docker_password: 'meesaPassword' - ) + create(:package_model, type: 'docker', + docker_image: 'registry/image:latest', + docker_username: 'jarjarbinks', + docker_password: 'meesaPassword') end it 'presents the docker information in the data section' do @@ -96,10 +86,8 @@ module VCAP::CloudController::Presenters::V3 context 'when no docker credentials are present' do let(:package) do - VCAP::CloudController::PackageModel.make( - type: 'docker', - docker_image: 'registry/image:latest' - ) + create(:package_model, type: 'docker', + docker_image: 'registry/image:latest') end it 'displays null for username and password' do @@ -112,7 +100,7 @@ module VCAP::CloudController::Presenters::V3 end context 'when the package type is not bits' do - let(:package) { VCAP::CloudController::PackageModel.make(type: 'docker', docker_image: 'some-image') } + let(:package) { create(:package_model, type: 'docker', docker_image: 'some-image') } it 'does NOT include a link to upload' do expect(result[:links][:upload]).to be_nil diff --git a/spec/unit/presenters/v3/process_instances_presenter_spec.rb b/spec/unit/presenters/v3/process_instances_presenter_spec.rb index 06abfbd73c9..9c89bbddc6a 100644 --- a/spec/unit/presenters/v3/process_instances_presenter_spec.rb +++ b/spec/unit/presenters/v3/process_instances_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe ProcessInstancesPresenter do - let(:process) { VCAP::CloudController::ProcessModel.make } + let(:process) { create(:process_model) } let(:instances) do { 0 => { state: 'RUNNING', since: 111 }, diff --git a/spec/unit/presenters/v3/process_presenter_spec.rb b/spec/unit/presenters/v3/process_presenter_spec.rb index 157b80bf5e0..3a8d6942bb3 100644 --- a/spec/unit/presenters/v3/process_presenter_spec.rb +++ b/spec/unit/presenters/v3/process_presenter_spec.rb @@ -4,23 +4,21 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe ProcessPresenter do describe '#to_hash' do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:health_check_type) { 'http' } let(:process) do - VCAP::CloudController::ProcessModel.make( - diego: true, - app_guid: app_model.guid, - instances: 3, - memory: 42, - disk_quota: 37, - command: 'rackup', - metadata: {}, - health_check_type: health_check_type, - health_check_timeout: 51, - health_check_interval: 23, - health_check_http_endpoint: '/healthcheck', - created_at: Time.at(1) - ) + create(:process_model, diego: true, + app_guid: app_model.guid, + instances: 3, + memory: 42, + disk_quota: 37, + command: 'rackup', + metadata: {}, + health_check_type: health_check_type, + health_check_timeout: 51, + health_check_interval: 23, + health_check_http_endpoint: '/healthcheck', + created_at: Time.at(1)) end let(:result) { ProcessPresenter.new(process).to_hash } let(:links) do @@ -35,36 +33,28 @@ module VCAP::CloudController::Presenters::V3 end let!(:release_label) do - VCAP::CloudController::ProcessLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: process.guid - ) + create(:process_label_model, key_name: 'release', + value: 'stable', + resource_guid: process.guid) end let!(:potato_label) do - VCAP::CloudController::ProcessLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: process.guid - ) + create(:process_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: process.guid) end let!(:mountain_annotation) do - VCAP::CloudController::ProcessAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: process.guid - ) + create(:process_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: process.guid) end let!(:plain_annotation) do - VCAP::CloudController::ProcessAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: process.guid - ) + create(:process_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: process.guid) end before do @@ -73,7 +63,7 @@ module VCAP::CloudController::Presenters::V3 context 'when the process does not have a start command' do let(:droplet) do - VCAP::CloudController::DropletModel.make(app: app_model, process_types: { web: 'detected-start-command' }) + create(:droplet_model, app: app_model, process_types: { web: 'detected-start-command' }) end before do @@ -155,7 +145,7 @@ module VCAP::CloudController::Presenters::V3 describe '#revisions' do context('when the process has a revision') do - let(:revision) { VCAP::CloudController::RevisionModel.make } + let(:revision) { create(:revision_model) } before do process.revision = revision diff --git a/spec/unit/presenters/v3/revision_environment_variables_presenter_spec.rb b/spec/unit/presenters/v3/revision_environment_variables_presenter_spec.rb index 319fe469e35..359678f03b9 100644 --- a/spec/unit/presenters/v3/revision_environment_variables_presenter_spec.rb +++ b/spec/unit/presenters/v3/revision_environment_variables_presenter_spec.rb @@ -4,9 +4,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe RevisionEnvironmentVariablesPresenter do let(:revision) do - VCAP::CloudController::RevisionModel.make( - environment_variables: { 'CUSTOM_ENV_VAR' => 'hello' } - ) + create(:revision_model, environment_variables: { 'CUSTOM_ENV_VAR' => 'hello' }) end subject(:presenter) { RevisionEnvironmentVariablesPresenter.new(revision) } diff --git a/spec/unit/presenters/v3/revision_presenter_spec.rb b/spec/unit/presenters/v3/revision_presenter_spec.rb index 2b8cfb32d00..e92a5227d88 100644 --- a/spec/unit/presenters/v3/revision_presenter_spec.rb +++ b/spec/unit/presenters/v3/revision_presenter_spec.rb @@ -3,72 +3,58 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe RevisionPresenter do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let!(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - process_types: { - 'web' => 'droplet_web_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, app: app_model, + process_types: { + 'web' => 'droplet_web_command', + 'worker' => 'droplet_worker_command' + }) end let(:revision) do - VCAP::CloudController::RevisionModel.make(:custom_web_command, - app: app_model, - version: 300, - droplet_guid: droplet.guid, - description: 'Initial revision') + create(:revision_model, :custom_web_command, + app: app_model, + version: 300, + droplet_guid: droplet.guid, + description: 'Initial revision') end let!(:revision_sidecar) do - VCAP::CloudController::RevisionSidecarModel.make( - revision: revision, - name: 'my-sidecar', - command: 'bake rackup', - memory: 300 - ) + create(:revision_sidecar_model, revision: revision, + name: 'my-sidecar', + command: 'bake rackup', + memory: 300) end let!(:revision_web_process_command2) do - VCAP::CloudController::RevisionProcessCommandModel.make( - revision_guid: revision.guid, - process_type: 'non_droplet_worker', - process_command: './work' - ) + create(:revision_process_command_model, revision_guid: revision.guid, + process_type: 'non_droplet_worker', + process_command: './work') end let!(:release_label) do - VCAP::CloudController::RevisionLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: revision.guid - ) + create(:revision_label_model, key_name: 'release', + value: 'stable', + resource_guid: revision.guid) end let!(:potato_label) do - VCAP::CloudController::RevisionLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: revision.guid - ) + create(:revision_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: revision.guid) end let!(:mountain_annotation) do - VCAP::CloudController::RevisionAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: revision.guid - ) + create(:revision_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: revision.guid) end let!(:plain_annotation) do - VCAP::CloudController::RevisionAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: revision.guid - ) + create(:revision_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: revision.guid) end describe '#to_hash' do @@ -101,14 +87,12 @@ module VCAP::CloudController::Presenters::V3 context 'when the droplet is not staged' do let(:droplet) do - VCAP::CloudController::DropletModel.make( - app: app_model, - state: VCAP::CloudController::DropletModel::EXPIRED_STATE, - process_types: { - 'web' => 'droplet_web_command', - 'worker' => 'droplet_worker_command' - } - ) + create(:droplet_model, app: app_model, + state: VCAP::CloudController::DropletModel::EXPIRED_STATE, + process_types: { + 'web' => 'droplet_web_command', + 'worker' => 'droplet_worker_command' + }) end it 'returns deployable is false' do diff --git a/spec/unit/presenters/v3/role_presenter_spec.rb b/spec/unit/presenters/v3/role_presenter_spec.rb index 3b4eb323ad8..51ecf40b0e8 100644 --- a/spec/unit/presenters/v3/role_presenter_spec.rb +++ b/spec/unit/presenters/v3/role_presenter_spec.rb @@ -7,7 +7,7 @@ module VCAP::CloudController::Presenters::V3 describe '#to_hash' do describe 'the role is space auditor' do - let(:role) { VCAP::CloudController::SpaceAuditor.make } + let(:role) { create(:space_auditor) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -25,7 +25,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is space developer' do - let(:role) { VCAP::CloudController::SpaceDeveloper.make } + let(:role) { create(:space_developer) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -43,7 +43,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is space developer' do - let(:role) { VCAP::CloudController::SpaceManager.make } + let(:role) { create(:space_manager) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -61,7 +61,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is organization auditor' do - let(:role) { VCAP::CloudController::OrganizationAuditor.make } + let(:role) { create(:organization_auditor) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -79,7 +79,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is organization manager' do - let(:role) { VCAP::CloudController::OrganizationManager.make } + let(:role) { create(:organization_manager) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -97,7 +97,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is organization billing manager' do - let(:role) { VCAP::CloudController::OrganizationBillingManager.make } + let(:role) { create(:organization_billing_manager) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -115,7 +115,7 @@ module VCAP::CloudController::Presenters::V3 end describe 'the role is organization user' do - let(:role) { VCAP::CloudController::OrganizationUser.make } + let(:role) { create(:organization_user) } let(:result) { presenter.to_hash } it 'presents the role' do @@ -133,8 +133,8 @@ module VCAP::CloudController::Presenters::V3 end describe 'when the user guid is weird' do - let(:user) { VCAP::CloudController::User.make(guid: ':---)') } - let(:role) { VCAP::CloudController::SpaceAuditor.make(user:) } + let(:user) { create(:user, guid: ':---)') } + let(:role) { create(:space_auditor, user:) } let(:result) { presenter.to_hash } it 'presents the role' do diff --git a/spec/unit/presenters/v3/route_destination_presenter_spec.rb b/spec/unit/presenters/v3/route_destination_presenter_spec.rb index 87c4642050e..cd206032199 100644 --- a/spec/unit/presenters/v3/route_destination_presenter_spec.rb +++ b/spec/unit/presenters/v3/route_destination_presenter_spec.rb @@ -4,18 +4,16 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe RouteDestinationPresenter do subject(:presenter) { RouteDestinationPresenter.new(route_mapping) } - let(:app) { VCAP::CloudController::AppModel.make } - let(:route) { VCAP::CloudController::Route.make(space: app.space) } + let(:app) { create(:app_model) } + let(:route) { create(:route, space: app.space) } let(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 1234, - route: route, - process_type: 'web', - weight: 55, - created_at: Time.at(1) - ) + create(:route_mapping_model, app: app, + app_port: 1234, + route: route, + process_type: 'web', + weight: 55, + created_at: Time.at(1)) end describe '#to_hash' do diff --git a/spec/unit/presenters/v3/route_destinations_presenter_spec.rb b/spec/unit/presenters/v3/route_destinations_presenter_spec.rb index fea18da3192..7ea02e14777 100644 --- a/spec/unit/presenters/v3/route_destinations_presenter_spec.rb +++ b/spec/unit/presenters/v3/route_destinations_presenter_spec.rb @@ -6,30 +6,26 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe RouteDestinationsPresenter do subject(:presenter) { RouteDestinationsPresenter.new(route.route_mappings, route:) } - let!(:app) { VCAP::CloudController::AppModel.make } - let!(:process) { VCAP::CloudController::ProcessModel.make(app: app, type: 'some-type') } - let!(:route) { VCAP::CloudController::Route.make(space: app.space) } + let!(:app) { create(:app_model) } + let!(:process) { create(:process_model, app: app, type: 'some-type') } + let!(:route) { create(:route, space: app.space) } let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 1234, - guid: 'guid-1', - route: route, - process_type: process.type, - weight: 55 - ) + create(:route_mapping_model, app: app, + app_port: 1234, + guid: 'guid-1', + route: route, + process_type: process.type, + weight: 55) end let!(:route_mapping2) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 5678, - guid: 'guid-2', - route: route, - process_type: 'other-process', - weight: 45 - ) + create(:route_mapping_model, app: app, + app_port: 5678, + guid: 'guid-2', + route: route, + process_type: 'other-process', + weight: 45) end describe '#to_hash' do @@ -63,21 +59,17 @@ module VCAP::CloudController::Presenters::V3 context 'ordering destinations' do let!(:route_mapping) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 1234, - route: route, - guid: 'guid-2' - ) + create(:route_mapping_model, app: app, + app_port: 1234, + route: route, + guid: 'guid-2') end let!(:route_mapping2) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 5678, - route: route, - guid: 'guid-1' - ) + create(:route_mapping_model, app: app, + app_port: 5678, + route: route, + guid: 'guid-1') end it 'sorts the destinations by guid' do diff --git a/spec/unit/presenters/v3/route_presenter_spec.rb b/spec/unit/presenters/v3/route_presenter_spec.rb index 684b132e407..b1627b1f53e 100644 --- a/spec/unit/presenters/v3/route_presenter_spec.rb +++ b/spec/unit/presenters/v3/route_presenter_spec.rb @@ -3,13 +3,13 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe RoutePresenter do - let!(:app) { VCAP::CloudController::AppModel.make } - let(:space) { VCAP::CloudController::Space.make } + let!(:app) { create(:app_model) } + let(:space) { create(:space) } let(:options) { { loadbalancing: 'round-robin' } } let(:org) { space.organization } let(:route_host) { 'host' } let(:path) { '/path' } - let(:domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: space.organization) } + let(:domain) { create(:private_domain, owning_organization: space.organization) } describe '#to_hash' do subject do @@ -17,52 +17,42 @@ module VCAP::CloudController::Presenters::V3 end let(:route) do - VCAP::CloudController::Route.make( - host: route_host, - path: path, - space: space, - domain: domain, - options: options - ) + create(:route, host: route_host, + path: path, + space: space, + domain: domain, + options: options) end let!(:destination) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 1234, - route: route, - process_type: 'web', - weight: 55, - protocol: 'http1' - ) + create(:route_mapping_model, app: app, + app_port: 1234, + route: route, + process_type: 'web', + weight: 55, + protocol: 'http1') end let!(:destination2) do - VCAP::CloudController::RouteMappingModel.make( - app: app, - app_port: 5678, - route: route, - process_type: 'other-process', - weight: 45, - protocol: 'http1' - ) + create(:route_mapping_model, app: app, + app_port: 5678, + route: route, + process_type: 'other-process', + weight: 45, + protocol: 'http1') end let!(:route_label) do - VCAP::CloudController::RouteLabelModel.make( - resource_guid: route.guid, - key_prefix: 'pfx.com', - key_name: 'potato', - value: 'baked' - ) + create(:route_label_model, resource_guid: route.guid, + key_prefix: 'pfx.com', + key_name: 'potato', + value: 'baked') end let!(:route_annotation) do - VCAP::CloudController::RouteAnnotationModel.make( - resource_guid: route.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:route_annotation_model, resource_guid: route.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end it 'presents the route as json' do @@ -119,12 +109,10 @@ module VCAP::CloudController::Presenters::V3 context 'when the host is empty' do let(:route) do - VCAP::CloudController::Route.make( - host: '', - path: path, - space: space, - domain: domain - ) + create(:route, host: '', + path: path, + space: space, + domain: domain) end it 'formats the url correctly' do @@ -134,12 +122,10 @@ module VCAP::CloudController::Presenters::V3 context 'when options is empty' do let(:route) do - VCAP::CloudController::Route.make( - host: 'foobar', - path: path, - space: space, - domain: domain - ) + create(:route, host: 'foobar', + path: path, + space: space, + domain: domain) end it 'outputs empty options hash' do diff --git a/spec/unit/presenters/v3/security_group_presenter_spec.rb b/spec/unit/presenters/v3/security_group_presenter_spec.rb index 4796c43e265..a763a100509 100644 --- a/spec/unit/presenters/v3/security_group_presenter_spec.rb +++ b/spec/unit/presenters/v3/security_group_presenter_spec.rb @@ -4,18 +4,16 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SecurityGroupPresenter do let(:security_group) do - VCAP::CloudController::SecurityGroup.make( - guid: 'security-group-guid', - staging_default: false, - running_default: true, - rules: [ - { - protocol: 'tcp', - destination: '10.10.10.0/24', - ports: '443,80,8080' - } - ] - ) + create(:security_group, guid: 'security-group-guid', + staging_default: false, + running_default: true, + rules: [ + { + protocol: 'tcp', + destination: '10.10.10.0/24', + ports: '443,80,8080' + } + ]) end before do @@ -26,8 +24,8 @@ module VCAP::CloudController::Presenters::V3 describe '#to_hash' do let(:result) { SecurityGroupPresenter.new(security_group, visible_space_guids:, all_spaces_visible:).to_hash } - let(:space1) { VCAP::CloudController::Space.make(guid: 'guid1') } - let(:space2) { VCAP::CloudController::Space.make(guid: 'guid2') } + let(:space1) { create(:space, guid: 'guid1') } + let(:space2) { create(:space, guid: 'guid2') } let(:visible_space_guids) { [space1.guid, space2.guid] } let(:all_spaces_visible) { false } diff --git a/spec/unit/presenters/v3/service_credential_binding_details_presenter_spec.rb b/spec/unit/presenters/v3/service_credential_binding_details_presenter_spec.rb index 5b99058730e..c3abf2dad42 100644 --- a/spec/unit/presenters/v3/service_credential_binding_details_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_credential_binding_details_presenter_spec.rb @@ -4,26 +4,22 @@ module VCAP module CloudController RSpec.describe Presenters::V3::ServiceCredentialBindingDetailsPresenter do - let(:instance) { ServiceInstance.make(guid: 'instance-guid') } - let(:app) { AppModel.make(guid: 'app-guid', space: instance.space) } + let(:instance) { create(:service_instance, guid: 'instance-guid') } + let(:app) { create(:app_model, guid: 'app-guid', space: instance.space) } let(:credentials) { { password: 'super secret avocado toast' } } let(:credential_binding) do - ServiceBinding.make( - name: 'some-name', - app: app, - service_instance: instance, - credentials: credentials, - volume_mounts: %w[super good], - syslog_drain_url: 'http://banana.example.com/drain' - ) + create(:service_binding, name: 'some-name', + app: app, + service_instance: instance, + credentials: credentials, + volume_mounts: %w[super good], + syslog_drain_url: 'http://banana.example.com/drain') end let(:key_binding) do - ServiceKey.make( - name: 'some-key', - service_instance: instance, - credentials: credentials - ) + create(:service_key, name: 'some-key', + service_instance: instance, + credentials: credentials) end it 'returns the app binding details' do @@ -51,7 +47,7 @@ module CloudController end context 'when syslog drain is not set' do - let(:credential_binding) { ServiceBinding.make } + let(:credential_binding) { create(:service_binding) } it 'does not include syslog_drain_url in the response' do presenter = described_class.new(binding: credential_binding, credentials: credential_binding.credentials) @@ -60,7 +56,7 @@ module CloudController end context 'when volume mounts are not set' do - let(:credential_binding) { ServiceBinding.make } + let(:credential_binding) { create(:service_binding) } it 'does not include volume_mounts in the response' do presenter = described_class.new(binding: credential_binding, credentials: credential_binding.credentials) diff --git a/spec/unit/presenters/v3/service_credential_binding_presenter_spec.rb b/spec/unit/presenters/v3/service_credential_binding_presenter_spec.rb index 0ec29b5085d..26d17ee6a1b 100644 --- a/spec/unit/presenters/v3/service_credential_binding_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_credential_binding_presenter_spec.rb @@ -6,12 +6,12 @@ module VCAP module CloudController RSpec.describe Presenters::V3::ServiceCredentialBindingPresenter do - let(:instance) { ManagedServiceInstance.make(guid: 'instance-guid') } - let(:app) { AppModel.make(guid: 'app-guid', space: instance.space) } + let(:instance) { create(:managed_service_instance, guid: 'instance-guid') } + let(:app) { create(:app_model, guid: 'app-guid', space: instance.space) } describe 'app bindings' do let(:credential_binding) do - ServiceBinding.make(name: 'some-name', guid: 'some-guid', app: app, service_instance: instance).tap do |binding| + create(:service_binding, name: 'some-name', guid: 'some-guid', app: app, service_instance: instance).tap do |binding| binding.save_with_attributes_and_new_operation( {}, { @@ -86,8 +86,8 @@ module CloudController end context 'when name is not set' do - let(:instance) { ServiceInstance.make(name: 'smashed-avocado') } - let(:credential_binding) { ServiceBinding.make(service_instance: instance) } + let(:instance) { create(:service_instance, name: 'smashed-avocado') } + let(:credential_binding) { create(:service_binding, service_instance: instance) } it 'returns null as the binding name' do presenter = described_class.new(credential_binding) @@ -97,7 +97,7 @@ module CloudController context 'no last_operation' do let(:credential_binding) do - ServiceBinding.make(name: 'some-name', guid: 'some-guid', app: app, service_instance: instance) + create(:service_binding, name: 'some-name', guid: 'some-guid', app: app, service_instance: instance) end it 'still displays the last operation' do @@ -117,7 +117,7 @@ module CloudController describe 'key bindings' do let(:credential_binding) do - ServiceKey.make(name: 'some-name', guid: 'some-guid', service_instance: instance).tap do |binding| + create(:service_key, name: 'some-name', guid: 'some-guid', service_instance: instance).tap do |binding| binding.save_with_attributes_and_new_operation( {}, { @@ -185,7 +185,7 @@ module CloudController context 'no last_operation' do let(:credential_binding) do - ServiceKey.make(name: 'some-name', guid: 'some-guid', service_instance: instance) + create(:service_key, name: 'some-name', guid: 'some-guid', service_instance: instance) end it 'still displays the last operation' do @@ -204,8 +204,8 @@ module CloudController end describe 'for user provided service instances' do - let(:instance) { UserProvidedServiceInstance.make(guid: 'instance-guid') } - let(:credential_binding) { ServiceKey.make(name: 'some-name', guid: 'some-guid', service_instance: instance) } + let(:instance) { create(:user_provided_service_instance, guid: 'instance-guid') } + let(:credential_binding) { create(:service_key, name: 'some-name', guid: 'some-guid', service_instance: instance) } it 'does not include links.parameters' do presenter = described_class.new(credential_binding) @@ -223,7 +223,7 @@ module CloudController end let(:credential_binding) do - ServiceBinding.make(name: 'some-name', guid: 'some-guid', app: app, service_instance: instance) + create(:service_binding, name: 'some-name', guid: 'some-guid', app: app, service_instance: instance) end let(:result) { described_class.new(credential_binding, decorators: [decorator]).to_hash.deep_symbolize_keys } diff --git a/spec/unit/presenters/v3/service_instance_presenter_spec.rb b/spec/unit/presenters/v3/service_instance_presenter_spec.rb index cf91f9d5f41..1713935f741 100644 --- a/spec/unit/presenters/v3/service_instance_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_instance_presenter_spec.rb @@ -10,43 +10,33 @@ module VCAP::CloudController::Presenters::V3 let(:result) { presenter.to_hash.deep_symbolize_keys } before do - VCAP::CloudController::ServiceInstanceLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: service_instance.guid - ) + create(:service_instance_label_model, key_name: 'release', + value: 'stable', + resource_guid: service_instance.guid) - VCAP::CloudController::ServiceInstanceLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: service_instance.guid - ) + create(:service_instance_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: service_instance.guid) - VCAP::CloudController::ServiceInstanceAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: service_instance.guid - ) + create(:service_instance_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: service_instance.guid) - VCAP::CloudController::ServiceInstanceAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: service_instance.guid - ) + create(:service_instance_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: service_instance.guid) end context 'managed service instance' do let(:maintenance_info) { nil } - let(:plan) { VCAP::CloudController::ServicePlan.make } + let(:plan) { create(:service_plan) } let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - name: 'denise-db', - tags: %w[tag1 tag2], - maintenance_info: maintenance_info, - dashboard_url: 'https://my-fantistic-service.com' - ) + create(:managed_service_instance, service_plan: plan, + name: 'denise-db', + tags: %w[tag1 tag2], + maintenance_info: maintenance_info, + dashboard_url: 'https://my-fantistic-service.com') end it 'presents the managed service instance' do @@ -111,9 +101,7 @@ module VCAP::CloudController::Presenters::V3 describe 'last_operation' do let(:last_operation) do - VCAP::CloudController::ServiceInstanceOperation.make( - description: 'did something cool' - ) + create(:service_instance_operation, description: 'did something cool') end before do @@ -149,7 +137,7 @@ module VCAP::CloudController::Presenters::V3 describe 'upgrade available' do context 'plan has the same maintenance_info' do let(:maintenance_info) { { version: '1.0.0' } } - let(:plan) { VCAP::CloudController::ServicePlan.make(maintenance_info:) } + let(:plan) { create(:service_plan, maintenance_info:) } it 'is false' do expect(result[:upgrade_available]).to be(false) @@ -158,7 +146,7 @@ module VCAP::CloudController::Presenters::V3 context 'plan has the different maintenance_info' do let(:maintenance_info) { { version: '1.0.0' } } - let(:plan) { VCAP::CloudController::ServicePlan.make(maintenance_info: { version: '2.0.0' }) } + let(:plan) { create(:service_plan, maintenance_info: { version: '2.0.0' }) } it 'is true' do expect(result[:upgrade_available]).to be(true) @@ -180,14 +168,12 @@ module VCAP::CloudController::Presenters::V3 end let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - name: 'my-db', - tags: %w[tag1 tag2], - maintenance_info: maintenance_info, - dashboard_url: 'https://my-fantistic-service.com', - broker_provided_metadata: broker_metadata - ) + create(:managed_service_instance, service_plan: plan, + name: 'my-db', + tags: %w[tag1 tag2], + maintenance_info: maintenance_info, + dashboard_url: 'https://my-fantistic-service.com', + broker_provided_metadata: broker_metadata) end it 'includes broker_provided_metadata in the response' do @@ -197,14 +183,12 @@ module VCAP::CloudController::Presenters::V3 context 'when broker_provided_metadata is nil' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - name: 'my-db-no-metadata', - tags: %w[tag1 tag2], - maintenance_info: maintenance_info, - dashboard_url: 'https://my-fantistic-service.com', - broker_provided_metadata: nil - ) + create(:managed_service_instance, service_plan: plan, + name: 'my-db-no-metadata', + tags: %w[tag1 tag2], + maintenance_info: maintenance_info, + dashboard_url: 'https://my-fantistic-service.com', + broker_provided_metadata: nil) end it 'does not include broker_provided_metadata in the response' do @@ -214,14 +198,12 @@ module VCAP::CloudController::Presenters::V3 context 'when broker_provided_metadata is an empty hash' do let(:service_instance) do - VCAP::CloudController::ManagedServiceInstance.make( - service_plan: plan, - name: 'my-db-empty-metadata', - tags: %w[tag1 tag2], - maintenance_info: maintenance_info, - dashboard_url: 'https://my-fantistic-service.com', - broker_provided_metadata: {} - ) + create(:managed_service_instance, service_plan: plan, + name: 'my-db-empty-metadata', + tags: %w[tag1 tag2], + maintenance_info: maintenance_info, + dashboard_url: 'https://my-fantistic-service.com', + broker_provided_metadata: {}) end it 'does not include broker_provided_metadata in the response' do @@ -233,16 +215,12 @@ module VCAP::CloudController::Presenters::V3 context 'user-provided service instance' do let(:service_instance) do - si = VCAP::CloudController::UserProvidedServiceInstance.make( - name: 'yu-db', - tags: %w[tag3 tag4], - syslog_drain_url: 'https://syslog-drain.com', - route_service_url: 'https://route-service.com' - ) - si.service_instance_operation = VCAP::CloudController::ServiceInstanceOperation.make( - type: 'create', - state: 'succeeded' - ) + si = create(:user_provided_service_instance, name: 'yu-db', + tags: %w[tag3 tag4], + syslog_drain_url: 'https://syslog-drain.com', + route_service_url: 'https://route-service.com') + si.service_instance_operation = create(:service_instance_operation, type: 'create', + state: 'succeeded') si end @@ -312,7 +290,7 @@ module VCAP::CloudController::Presenters::V3 let(:presenter) { described_class.new(service_instance, decorators: [fake_decorator]) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } it 'uses the decorator' do expect(result[:included]).to match({ resource: { guid: "included #{service_instance.guid}" } }) diff --git a/spec/unit/presenters/v3/service_offering_presenter_spec.rb b/spec/unit/presenters/v3/service_offering_presenter_spec.rb index c99864c3223..2629cb594d2 100644 --- a/spec/unit/presenters/v3/service_offering_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_offering_presenter_spec.rb @@ -16,47 +16,41 @@ let(:tags) { %w[foo bar] } let(:requires) { %w[syslog_drain route_forwarding volume_mount] } let(:updateable) { false } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:instances_retrievable) { false } let(:bindings_retrievable) { false } let(:allow_context_updates) { false } let(:created_at) { Time.now.round(0) - 100 } let(:service_offering) do - VCAP::CloudController::Service.make( - guid: guid, - label: name, - description: description, - active: available, - bindable: bindable, - extra: extra, - unique_id: id, - tags: tags, - requires: requires, - plan_updateable: updateable, - service_broker: service_broker, - instances_retrievable: instances_retrievable, - bindings_retrievable: bindings_retrievable, - allow_context_updates: allow_context_updates, - created_at: created_at - ) + create(:service, guid: guid, + label: name, + description: description, + active: available, + bindable: bindable, + extra: extra, + unique_id: id, + tags: tags, + requires: requires, + plan_updateable: updateable, + service_broker: service_broker, + instances_retrievable: instances_retrievable, + bindings_retrievable: bindings_retrievable, + allow_context_updates: allow_context_updates, + created_at: created_at) end let!(:potato_label) do - VCAP::CloudController::ServiceOfferingLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: service_offering.guid - ) + create(:service_offering_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: service_offering.guid) end let!(:mountain_annotation) do - VCAP::CloudController::ServiceOfferingAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: service_offering.guid - ) + create(:service_offering_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: service_offering.guid) end describe '#to_hash' do @@ -233,7 +227,7 @@ def self.decorate(hash, resources) let(:result) { described_class.new(service_offering, decorators: [FakeDecorator]).to_hash.deep_symbolize_keys } - let(:service_offering) { VCAP::CloudController::Service.make } + let(:service_offering) { create(:service) } it 'uses the decorator' do expect(result[:included]).to match({ resource: { guid: service_offering.guid } }) diff --git a/spec/unit/presenters/v3/service_plan_presenter_spec.rb b/spec/unit/presenters/v3/service_plan_presenter_spec.rb index 663ba89da62..b4045de6a89 100644 --- a/spec/unit/presenters/v3/service_plan_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_plan_presenter_spec.rb @@ -10,24 +10,20 @@ } end let(:service_plan) do - VCAP::CloudController::ServicePlan.make(maintenance_info:) + create(:service_plan, maintenance_info:) end let!(:potato_label) do - VCAP::CloudController::ServicePlanLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: service_plan.guid - ) + create(:service_plan_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: service_plan.guid) end let!(:mountain_annotation) do - VCAP::CloudController::ServicePlanAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: service_plan.guid - ) + create(:service_plan_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: service_plan.guid) end describe '#to_hash' do @@ -103,7 +99,7 @@ context 'when `active` is false' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(active: false) + create(:service_plan, active: false) end it 'presents the service plan with available false' do @@ -113,7 +109,7 @@ context 'when `free` is false' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(free: false) + create(:service_plan, free: false) end it 'presents the service plan with free false' do @@ -123,7 +119,7 @@ context 'when plan has `maximum_polling_duration`' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(maximum_polling_duration: 60) + create(:service_plan, maximum_polling_duration: 60) end it 'presents the service plan with maximum_polling_duration' do @@ -133,7 +129,7 @@ context 'when `bindable` is false' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(bindable: false) + create(:service_plan, bindable: false) end it 'presents the service plan with bindable false' do @@ -143,7 +139,7 @@ context 'when `plan_updateable` is false' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(plan_updateable: false) + create(:service_plan, plan_updateable: false) end it 'presents the service plan with plan_updateable false' do @@ -153,7 +149,7 @@ context 'when plan has `extra`' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(extra: '{"some_key": "some-value"}') + create(:service_plan, extra: '{"some_key": "some-value"}') end it 'presents the service plan with metadata' do @@ -164,7 +160,7 @@ context 'when plan has costs' do it 'flattens different currencies in the same unit' do service_plan = - VCAP::CloudController::ServicePlan.make(extra: '{"costs": [ + create(:service_plan, extra: '{"costs": [ { "amount": { "usd": 649.0, @@ -202,7 +198,7 @@ it 'handles currency symbols' do service_plan = - VCAP::CloudController::ServicePlan.make(extra: '{"costs": [ + create(:service_plan, extra: '{"costs": [ { "amount": { "$": 0.06 @@ -221,7 +217,7 @@ context 'when plan has no cost' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make + create(:service_plan) end it 'presents the service plan with cost' do @@ -337,7 +333,7 @@ }'] ].each do |scenario, extra| it "returns empty cost array when #{scenario}" do - service_plan = VCAP::CloudController::ServicePlan.make(extra:) + service_plan = create(:service_plan, extra:) result = described_class.new(service_plan).to_hash.deep_symbolize_keys @@ -348,7 +344,7 @@ context 'when plan has no `maintenance_info`' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make + create(:service_plan) end it 'presents the service plan with empty maintenance_info' do @@ -374,7 +370,7 @@ context 'when plan has create service_instance schema' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(create_instance_schema: schema) + create(:service_plan, create_instance_schema: schema) end it 'presents the service plan create service_instance with the schema' do @@ -386,7 +382,7 @@ context 'when plan has update service_instance schema' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(update_instance_schema: schema) + create(:service_plan, update_instance_schema: schema) end it 'presents the service plan update service_instance with the schema' do @@ -398,7 +394,7 @@ context 'when plan has create service_binding schema' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(create_binding_schema: schema) + create(:service_plan, create_binding_schema: schema) end it 'presents the service plan update service_instance with the schema' do @@ -410,10 +406,10 @@ end context 'when service plan is from a space-scoped broker' do - let(:space) { VCAP::CloudController::Space.make } - let(:service_broker) { VCAP::CloudController::ServiceBroker.make(space:) } - let(:service_offering) { VCAP::CloudController::Service.make(service_broker:) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service_offering) } + let(:space) { create(:space) } + let(:service_broker) { create(:service_broker, space:) } + let(:service_offering) { create(:service, service_broker:) } + let(:service_plan) { create(:service_plan, service: service_offering) } it 'includes a space relationship and link' do expect(result).to include({ @@ -437,7 +433,7 @@ def self.decorate(hash, resources) let(:result) { described_class.new(service_plan, decorators: [FakeDecorator]).to_hash.deep_symbolize_keys } - let(:service_plan) { VCAP::CloudController::ServicePlan.make } + let(:service_plan) { create(:service_plan) } it 'uses the decorator' do expect(result[:included]).to match({ resource: { guid: service_plan.guid } }) diff --git a/spec/unit/presenters/v3/service_plan_visibility_presenter_spec.rb b/spec/unit/presenters/v3/service_plan_visibility_presenter_spec.rb index f4671ec6748..13a59f15caa 100644 --- a/spec/unit/presenters/v3/service_plan_visibility_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_plan_visibility_presenter_spec.rb @@ -8,7 +8,7 @@ context 'when service plan is public' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(public: true) + create(:service_plan, public: true) end it 'returns type public' do @@ -20,13 +20,13 @@ context 'when service plan is space scoped' do let(:space) do - VCAP::CloudController::Space.make + create(:space) end let!(:service_plan) do - broker = VCAP::CloudController::ServiceBroker.make(space:) - offering = VCAP::CloudController::Service.make(service_broker: broker) - VCAP::CloudController::ServicePlan.make(public: false, service: offering) + broker = create(:service_broker, space:) + offering = create(:service, service_broker: broker) + create(:service_plan, public: false, service: offering) end it 'returns type space' do @@ -42,7 +42,7 @@ context 'when service plan is visible for admin only' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(public: false) + create(:service_plan, public: false) end it 'returns type admin' do @@ -54,14 +54,14 @@ context 'when service plan is visible for a set of orgs only' do let(:service_plan) do - VCAP::CloudController::ServicePlan.make(public: false) do |plan| - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan, organization: org_1) - VCAP::CloudController::ServicePlanVisibility.make(service_plan: plan, organization: org_2) + create(:service_plan, public: false) do |plan| + create(:service_plan_visibility, service_plan: plan, organization: org_1) + create(:service_plan_visibility, service_plan: plan, organization: org_2) end end - let(:org_1) { VCAP::CloudController::Organization.make } - let(:org_2) { VCAP::CloudController::Organization.make } + let(:org_1) { create(:organization) } + let(:org_2) { create(:organization) } let(:visible_in_orgs) { [org_1, org_2] } it 'returns type organization' do diff --git a/spec/unit/presenters/v3/service_route_binding_presenter_spec.rb b/spec/unit/presenters/v3/service_route_binding_presenter_spec.rb index 17190c83036..59666d66880 100644 --- a/spec/unit/presenters/v3/service_route_binding_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_route_binding_presenter_spec.rb @@ -6,10 +6,10 @@ module VCAP module CloudController RSpec.describe Presenters::V3::ServiceRouteBindingPresenter do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let(:route_service_url) { 'https://route_service_url.com' } - let(:service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:, route_service_url:) } - let(:route) { Route.make(space:) } + let(:service_instance) { create(:user_provided_service_instance, space:, route_service_url:) } + let(:route) { create(:route, space:) } let(:guid) { Sham.guid } let(:binding) do RouteBinding.new.save_with_new_operation( @@ -85,12 +85,10 @@ module CloudController context 'no last_operation' do let(:binding) do - RouteBinding.make( - guid:, - service_instance:, - route:, - route_service_url: - ) + create(:route_binding, guid:, + service_instance:, + route:, + route_service_url:) end it 'still displays the last operation' do @@ -126,9 +124,9 @@ module CloudController end describe 'links' do - let(:offering) { VCAP::CloudController::Service.make(requires: ['route_forwarding']) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service: offering) } - let(:service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space: space, service_plan: plan) } + let(:offering) { create(:service, requires: ['route_forwarding']) } + let(:plan) { create(:service_plan, service: offering) } + let(:service_instance) { create(:managed_service_instance, space: space, service_plan: plan) } it 'include parameters for managed service instance bindings' do presenter = described_class.new(binding) diff --git a/spec/unit/presenters/v3/service_usage_event_presenter_spec.rb b/spec/unit/presenters/v3/service_usage_event_presenter_spec.rb index eb75badfee9..2f86bd8dd74 100644 --- a/spec/unit/presenters/v3/service_usage_event_presenter_spec.rb +++ b/spec/unit/presenters/v3/service_usage_event_presenter_spec.rb @@ -5,7 +5,7 @@ RSpec.describe VCAP::CloudController::Presenters::V3::ServiceUsageEventPresenter do include LinkHelpers - let(:usage_event) { VCAP::CloudController::ServiceUsageEvent.make } + let(:usage_event) { create(:service_usage_event) } describe '#to_hash' do let(:result) { described_class.new(usage_event).to_hash } diff --git a/spec/unit/presenters/v3/shared_spaces_usage_summary_presenter_spec.rb b/spec/unit/presenters/v3/shared_spaces_usage_summary_presenter_spec.rb index 7a74eb897d0..2a06f16cfbf 100644 --- a/spec/unit/presenters/v3/shared_spaces_usage_summary_presenter_spec.rb +++ b/spec/unit/presenters/v3/shared_spaces_usage_summary_presenter_spec.rb @@ -6,19 +6,17 @@ module VCAP::CloudController::Presenters::V3 let(:presenter) { described_class.new(instance) } let(:result) { presenter.to_hash.deep_symbolize_keys } - let(:space) { VCAP::CloudController::Space.make } - let(:instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:space) { create(:space) } + let(:instance) { create(:managed_service_instance, space:) } - let(:space_1) { VCAP::CloudController::Space.make } - let(:space_2) { VCAP::CloudController::Space.make } - let(:space_3) { VCAP::CloudController::Space.make } + let(:space_1) { create(:space) } + let(:space_2) { create(:space) } + let(:space_3) { create(:space) } def create_bindings(instance, space:, count:) (1..count).each do - VCAP::CloudController::ServiceBinding.make( - app: VCAP::CloudController::AppModel.make(space:), - service_instance: instance - ) + create(:service_binding, app: create(:app_model, space:), + service_instance: instance) end end @@ -53,7 +51,7 @@ def create_bindings(instance, space:, count:) end context 'when there are no shared spaces' do - let(:another_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:) } + let(:another_instance) { create(:managed_service_instance, space:) } let(:presenter) { described_class.new(another_instance) } it 'presents an empty usage summary' do diff --git a/spec/unit/presenters/v3/sidecar_presenter_spec.rb b/spec/unit/presenters/v3/sidecar_presenter_spec.rb index ef2f8978d19..3d5d62b86cf 100644 --- a/spec/unit/presenters/v3/sidecar_presenter_spec.rb +++ b/spec/unit/presenters/v3/sidecar_presenter_spec.rb @@ -3,14 +3,12 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SidecarPresenter do - let(:app_model) { VCAP::CloudController::AppModel.make } + let(:app_model) { create(:app_model) } let(:sidecar) do - VCAP::CloudController::SidecarModel.make( - app: app_model, - name: 'my-sidecar', - command: './start-me-up', - memory: 301 - ) + create(:sidecar_model, app: app_model, + name: 'my-sidecar', + command: './start-me-up', + memory: 301) end let!(:web_sidecar_process_type) do VCAP::CloudController::SidecarProcessTypeModel.create(type: 'web', sidecar_guid: sidecar.guid, app_guid: sidecar.app_guid) diff --git a/spec/unit/presenters/v3/space_presenter_spec.rb b/spec/unit/presenters/v3/space_presenter_spec.rb index 59324cb7f01..80abefac098 100644 --- a/spec/unit/presenters/v3/space_presenter_spec.rb +++ b/spec/unit/presenters/v3/space_presenter_spec.rb @@ -3,39 +3,31 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SpacePresenter do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } let!(:release_label) do - VCAP::CloudController::SpaceLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: space.guid - ) + create(:space_label_model, key_name: 'release', + value: 'stable', + resource_guid: space.guid) end let!(:potato_label) do - VCAP::CloudController::SpaceLabelModel.make( - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed', - resource_guid: space.guid - ) + create(:space_label_model, key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed', + resource_guid: space.guid) end let!(:mountain_annotation) do - VCAP::CloudController::SpaceAnnotationModel.make( - key_name: 'altitude', - value: '14,411', - resource_guid: space.guid - ) + create(:space_annotation_model, key_name: 'altitude', + value: '14,411', + resource_guid: space.guid) end let!(:plain_annotation) do - VCAP::CloudController::SpaceAnnotationModel.make( - key_name: 'grass', - value: 'yes', - resource_guid: space.guid - ) + create(:space_annotation_model, key_name: 'grass', + value: 'yes', + resource_guid: space.guid) end describe '#to_hash' do @@ -60,7 +52,7 @@ module VCAP::CloudController::Presenters::V3 end context 'when the space has a space quota applied to it' do - let!(:space_quota) { VCAP::CloudController::SpaceQuotaDefinition.make(organization: space.organization) } + let!(:space_quota) { create(:space_quota_definition, organization: space.organization) } before do space_quota.add_space(space) diff --git a/spec/unit/presenters/v3/space_quota_presenter_spec.rb b/spec/unit/presenters/v3/space_quota_presenter_spec.rb index 93e07b7a858..849323e5e47 100644 --- a/spec/unit/presenters/v3/space_quota_presenter_spec.rb +++ b/spec/unit/presenters/v3/space_quota_presenter_spec.rb @@ -3,27 +3,25 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SpaceQuotaPresenter do - let(:org) { VCAP::CloudController::Organization.make } - let(:space_1) { VCAP::CloudController::Space.make(organization: org) } - let(:space_2) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space_1) { create(:space, organization: org) } + let(:space_2) { create(:space, organization: org) } let(:visible_space_guids) { [space_1.guid, space_2.guid] } let(:all_spaces_visible) { false } let(:space_quota) do - VCAP::CloudController::SpaceQuotaDefinition.make( - guid: 'quota-guid', - organization: org, - memory_limit: 2, - instance_memory_limit: 3, - app_instance_limit: 4, - app_task_limit: 5, - log_rate_limit: 2000, - non_basic_services_allowed: false, - total_services: 6, - total_service_keys: 7, - total_routes: 7, - total_reserved_route_ports: 2 - ) + create(:space_quota_definition, guid: 'quota-guid', + organization: org, + memory_limit: 2, + instance_memory_limit: 3, + app_instance_limit: 4, + app_task_limit: 5, + log_rate_limit: 2000, + non_basic_services_allowed: false, + total_services: 6, + total_service_keys: 7, + total_routes: 7, + total_reserved_route_ports: 2) end before do @@ -59,19 +57,17 @@ module VCAP::CloudController::Presenters::V3 context 'when using null values' do let(:space_quota) do - VCAP::CloudController::SpaceQuotaDefinition.make( - guid: 'quota-guid', - organization: org, - memory_limit: -1, - instance_memory_limit: -1, - app_instance_limit: -1, - app_task_limit: -1, - log_rate_limit: -1, - total_services: -1, - total_service_keys: -1, - total_routes: -1, - total_reserved_route_ports: -1 - ) + create(:space_quota_definition, guid: 'quota-guid', + organization: org, + memory_limit: -1, + instance_memory_limit: -1, + app_instance_limit: -1, + app_task_limit: -1, + log_rate_limit: -1, + total_services: -1, + total_service_keys: -1, + total_routes: -1, + total_reserved_route_ports: -1) end it "properly converts -1 sentinel values to JSON's null" do diff --git a/spec/unit/presenters/v3/space_ssh_feature_presenter_spec.rb b/spec/unit/presenters/v3/space_ssh_feature_presenter_spec.rb index fc3c8e7c80d..a3ca5e3de13 100644 --- a/spec/unit/presenters/v3/space_ssh_feature_presenter_spec.rb +++ b/spec/unit/presenters/v3/space_ssh_feature_presenter_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SpaceSshFeaturePresenter do - let(:space) { VCAP::CloudController::Space.make } + let(:space) { create(:space) } describe '#to_hash' do it 'presents the space feature as json' do diff --git a/spec/unit/presenters/v3/space_usage_summary_presenter_spec.rb b/spec/unit/presenters/v3/space_usage_summary_presenter_spec.rb index 2a35d82e1a9..ee065102d87 100644 --- a/spec/unit/presenters/v3/space_usage_summary_presenter_spec.rb +++ b/spec/unit/presenters/v3/space_usage_summary_presenter_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe SpaceUsageSummaryPresenter do - let(:org) { VCAP::CloudController::Organization.make } - let(:space) { VCAP::CloudController::Space.make(organization: org) } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } context 'empty space' do describe '#to_hash' do @@ -33,18 +33,18 @@ module VCAP::CloudController::Presenters::V3 allow(CloudController::DependencyLocator).to receive(:instance).and_return(double(:api_client, routing_api_client:)) end - let(:app_model) { VCAP::CloudController::AppModel.make(name: 'App Model', space: space) } - let!(:process) { VCAP::CloudController::ProcessModel.make(:process, state: VCAP::CloudController::ProcessModel::STARTED, memory: 512, app: app_model) } - let!(:task) { VCAP::CloudController::TaskModel.make(app: app_model, state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 512) } - let(:shared_domain) { VCAP::CloudController::SharedDomain.make(router_group_guid: '123') } - let!(:private_domain) { VCAP::CloudController::PrivateDomain.make(owning_organization: org) } - let!(:route) { VCAP::CloudController::Route.make(host: '', domain: shared_domain, space: space, port: 4444) } - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: broker) } - let(:service_plan) { VCAP::CloudController::ServicePlan.make(service: service, public: true) } - let!(:user_provided_service_instance) { VCAP::CloudController::UserProvidedServiceInstance.make(space:) } - let(:managed_service_instance) { VCAP::CloudController::ManagedServiceInstance.make(space:, service_plan:) } - let!(:service_key) { VCAP::CloudController::ServiceKey.make(service_instance: managed_service_instance) } + let(:app_model) { create(:app_model, name: 'App Model', space: space) } + let!(:process) { create(:process_model, :process, state: VCAP::CloudController::ProcessModel::STARTED, memory: 512, app: app_model) } + let!(:task) { create(:task_model, app: app_model, state: VCAP::CloudController::TaskModel::RUNNING_STATE, memory_in_mb: 512) } + let(:shared_domain) { create(:shared_domain, router_group_guid: '123') } + let!(:private_domain) { create(:private_domain, owning_organization: org) } + let!(:route) { create(:route, host: '', domain: shared_domain, space: space, port: 4444) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } + let(:service_plan) { create(:service_plan, service: service, public: true) } + let!(:user_provided_service_instance) { create(:user_provided_service_instance, space:) } + let(:managed_service_instance) { create(:managed_service_instance, space:, service_plan:) } + let!(:service_key) { create(:service_key, service_instance: managed_service_instance) } describe '#to_hash' do let(:result) { SpaceUsageSummaryPresenter.new(space).to_hash } diff --git a/spec/unit/presenters/v3/stack_presenter_spec.rb b/spec/unit/presenters/v3/stack_presenter_spec.rb index 29cebac77ad..befa5b7862d 100644 --- a/spec/unit/presenters/v3/stack_presenter_spec.rb +++ b/spec/unit/presenters/v3/stack_presenter_spec.rb @@ -3,43 +3,33 @@ RSpec.describe VCAP::CloudController::Presenters::V3::StackPresenter do let(:stack) do - VCAP::CloudController::Stack.make( - run_rootfs_image: 'run-image', - build_rootfs_image: 'build-image' - ) + create(:stack, run_rootfs_image: 'run-image', + build_rootfs_image: 'build-image') end let!(:release_label) do - VCAP::CloudController::StackLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: stack.guid - ) + create(:stack_label_model, key_name: 'release', + value: 'stable', + resource_guid: stack.guid) end let!(:potato_label) do - VCAP::CloudController::StackLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: stack.guid - ) + create(:stack_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: stack.guid) end let!(:mountain_annotation) do - VCAP::CloudController::StackAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: stack.guid - ) + create(:stack_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: stack.guid) end let!(:plain_annotation) do - VCAP::CloudController::StackAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: stack.guid - ) + create(:stack_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: stack.guid) end describe '#to_hash' do @@ -65,10 +55,8 @@ context 'when state_reason is present' do let(:stack) do - VCAP::CloudController::Stack.make( - state: 'DEPRECATED', - state_reason: 'This stack will be removed on 2026-12-31' - ) + create(:stack, state: 'DEPRECATED', + state_reason: 'This stack will be removed on 2026-12-31') end it 'presents the state_reason' do @@ -79,7 +67,7 @@ context 'when state_reason is nil' do let(:stack) do - VCAP::CloudController::Stack.make(state: 'ACTIVE', state_reason: nil) + create(:stack, state: 'ACTIVE', state_reason: nil) end it 'presents state_reason as nil' do diff --git a/spec/unit/presenters/v3/task_presenter_spec.rb b/spec/unit/presenters/v3/task_presenter_spec.rb index fcaa41a6bed..7eda5e2805a 100644 --- a/spec/unit/presenters/v3/task_presenter_spec.rb +++ b/spec/unit/presenters/v3/task_presenter_spec.rb @@ -6,47 +6,37 @@ module VCAP::CloudController::Presenters::V3 subject(:presenter) { TaskPresenter.new(task) } let(:task_user) { nil } let(:task) do - task = VCAP::CloudController::TaskModel.make( - failure_reason: 'sup dawg', - user: task_user, - memory_in_mb: 2048, - disk_in_mb: 4048, - log_rate_limit: 1024, - created_at: Time.at(1), - sequence_id: 5 - ) + task = create(:task_model, failure_reason: 'sup dawg', + user: task_user, + memory_in_mb: 2048, + disk_in_mb: 4048, + log_rate_limit: 1024, + created_at: Time.at(1), + sequence_id: 5) task.this.update(updated_at: Time.at(2)) task.reload end let!(:release_label) do - VCAP::CloudController::TaskLabelModel.make( - key_name: 'release', - value: 'stable', - resource_guid: task.guid - ) + create(:task_label_model, key_name: 'release', + value: 'stable', + resource_guid: task.guid) end let!(:potato_label) do - VCAP::CloudController::TaskLabelModel.make( - key_prefix: 'canberra.au', - key_name: 'potato', - value: 'mashed', - resource_guid: task.guid - ) + create(:task_label_model, key_prefix: 'canberra.au', + key_name: 'potato', + value: 'mashed', + resource_guid: task.guid) end let!(:mountain_annotation) do - VCAP::CloudController::TaskAnnotationModel.make( - key_name: 'altitude', - value: '14,412', - resource_guid: task.guid - ) + create(:task_annotation_model, key_name: 'altitude', + value: '14,412', + resource_guid: task.guid) end let!(:plain_annotation) do - VCAP::CloudController::TaskAnnotationModel.make( - key_name: 'maize', - value: 'hfcs', - resource_guid: task.guid - ) + create(:task_annotation_model, key_name: 'maize', + value: 'hfcs', + resource_guid: task.guid) end describe '#to_hash' do diff --git a/spec/unit/presenters/v3/user_presenter_spec.rb b/spec/unit/presenters/v3/user_presenter_spec.rb index abd0c755605..7e5714ef1aa 100644 --- a/spec/unit/presenters/v3/user_presenter_spec.rb +++ b/spec/unit/presenters/v3/user_presenter_spec.rb @@ -5,24 +5,20 @@ module VCAP::CloudController::Presenters::V3 RSpec.describe UserPresenter do describe '#to_hash' do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:uaa_user_mapping) { { user.guid => { 'origin' => 'some-origin', 'username' => 'some-username' } } } let!(:user_label) do - VCAP::CloudController::UserLabelModel.make( - resource_guid: user.guid, - key_prefix: 'maine.gov', - key_name: 'potato', - value: 'mashed' - ) + create(:user_label_model, resource_guid: user.guid, + key_prefix: 'maine.gov', + key_name: 'potato', + value: 'mashed') end let!(:user_annotation) do - VCAP::CloudController::UserAnnotationModel.make( - resource_guid: user.guid, - key_name: 'contacts', - value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)' - ) + create(:user_annotation_model, resource_guid: user.guid, + key_name: 'contacts', + value: 'Bill tel(1111111) email(bill@fixme), Bob tel(222222) pager(3333333#555) email(bob@fixme)') end context 'when the user is a UAA user' do diff --git a/spec/unit/queries/deployment_list_fetcher_spec.rb b/spec/unit/queries/deployment_list_fetcher_spec.rb index cde9c5556a3..17f7bb69e78 100644 --- a/spec/unit/queries/deployment_list_fetcher_spec.rb +++ b/spec/unit/queries/deployment_list_fetcher_spec.rb @@ -4,51 +4,51 @@ module VCAP::CloudController RSpec.describe DeploymentListFetcher do - let(:space1) { Space.make } - let(:space2) { Space.make } - let(:space3) { Space.make } + let(:space1) { create(:space) } + let(:space2) { create(:space) } + let(:space3) { create(:space) } let(:org_1_guid) { space1.organization.guid } let(:org_2_guid) { space2.organization.guid } let(:org_3_guid) { space3.organization.guid } - let(:app_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app1') } - let(:app2_in_space1) { AppModel.make(space_guid: space1.guid, guid: 'app2') } - let(:app3_in_space2) { AppModel.make(space_guid: space2.guid, guid: 'app3') } - let(:app4_in_space3) { AppModel.make(space_guid: space3.guid, guid: 'app4') } + let(:app_in_space1) { create(:app_model, space_guid: space1.guid, guid: 'app1') } + let(:app2_in_space1) { create(:app_model, space_guid: space1.guid, guid: 'app2') } + let(:app3_in_space2) { create(:app_model, space_guid: space2.guid, guid: 'app3') } + let(:app4_in_space3) { create(:app_model, space_guid: space3.guid, guid: 'app4') } let!(:deployment_for_app1_space1) do - DeploymentModel.make(guid: 'deployment_for_app1_space1', - app_guid: app_in_space1.guid, - state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYED_STATUS_REASON) + create(:deployment_model, guid: 'deployment_for_app1_space1', + app_guid: app_in_space1.guid, + state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYED_STATUS_REASON) end let!(:deployment_for_app1_space1_superseded) do - DeploymentModel.make(guid: 'deployment_for_app1_space1_superseded', - app_guid: app_in_space1.guid, - state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::SUPERSEDED_STATUS_REASON) + create(:deployment_model, guid: 'deployment_for_app1_space1_superseded', + app_guid: app_in_space1.guid, + state: VCAP::CloudController::DeploymentModel::DEPLOYED_STATE, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::SUPERSEDED_STATUS_REASON) end let!(:deployment_for_app2_space1) do - DeploymentModel.make(guid: 'deployment_for_app2_space1', - app_guid: app2_in_space1.guid, - state: VCAP::CloudController::DeploymentModel::CANCELING_STATE, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::CANCELING_STATUS_REASON) + create(:deployment_model, guid: 'deployment_for_app2_space1', + app_guid: app2_in_space1.guid, + state: VCAP::CloudController::DeploymentModel::CANCELING_STATE, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::CANCELING_STATUS_REASON) end let!(:deployment_for_app3_space2) do - DeploymentModel.make(guid: 'deployment_for_app3_space2', - app_guid: app3_in_space2.guid, - state: VCAP::CloudController::DeploymentModel::CANCELED_STATE, - status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::CANCELED_STATUS_REASON) + create(:deployment_model, guid: 'deployment_for_app3_space2', + app_guid: app3_in_space2.guid, + state: VCAP::CloudController::DeploymentModel::CANCELED_STATE, + status_value: VCAP::CloudController::DeploymentModel::FINALIZED_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::CANCELED_STATUS_REASON) end let!(:deployment_for_app4_space3) do - DeploymentModel.make(guid: 'deployment_for_app4_space3', - app_guid: app4_in_space3.guid, - state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, - status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, - status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) + create(:deployment_model, guid: 'deployment_for_app4_space3', + app_guid: app4_in_space3.guid, + state: VCAP::CloudController::DeploymentModel::DEPLOYING_STATE, + status_value: VCAP::CloudController::DeploymentModel::ACTIVE_STATUS_VALUE, + status_reason: VCAP::CloudController::DeploymentModel::DEPLOYING_STATUS_REASON) end subject(:fetcher) { DeploymentListFetcher } @@ -124,8 +124,8 @@ module VCAP::CloudController context 'filtering label_selector' do let(:message) { DeploymentsListMessage.from_params({ 'label_selector' => 'key=value' }) } - let!(:deployment1label) { DeploymentLabelModel.make(key_name: 'key', value: 'value', deployment: deployment_for_app1_space1) } - let!(:deployment2label) { DeploymentLabelModel.make(key_name: 'key2', value: 'value2', deployment: deployment_for_app2_space1) } + let!(:deployment1label) { create(:deployment_label_model, key_name: 'key', value: 'value', deployment: deployment_for_app1_space1) } + let!(:deployment2label) { create(:deployment_label_model, key_name: 'key2', value: 'value2', deployment: deployment_for_app2_space1) } it 'returns the correct set of deployments' do results = fetcher.fetch_all(message).all @@ -165,9 +165,9 @@ module VCAP::CloudController describe 'filtering label_selector' do let(:message) { DeploymentsListMessage.from_params({ 'label_selector' => 'key=value' }) } - let!(:deployment1label) { DeploymentLabelModel.make(key_name: 'key', value: 'value', deployment: deployment_for_app1_space1) } - let!(:deployment2label) { DeploymentLabelModel.make(key_name: 'key', value: 'value', deployment: deployment_for_app3_space2) } - let!(:deployment2label) { DeploymentLabelModel.make(key_name: 'key2', value: 'value2', deployment: deployment_for_app4_space3) } + let!(:deployment1label) { create(:deployment_label_model, key_name: 'key', value: 'value', deployment: deployment_for_app1_space1) } + let!(:deployment2label) { create(:deployment_label_model, key_name: 'key', value: 'value', deployment: deployment_for_app3_space2) } + let!(:deployment2label) { create(:deployment_label_model, key_name: 'key2', value: 'value2', deployment: deployment_for_app4_space3) } it 'returns the correct set of deployments' do results = fetcher.fetch_for_spaces(message, space_guids: [space1.guid, space3.guid]) diff --git a/spec/unit/repositories/app_event_repository_spec.rb b/spec/unit/repositories/app_event_repository_spec.rb index 32b40b7177d..cb1f2762d7c 100644 --- a/spec/unit/repositories/app_event_repository_spec.rb +++ b/spec/unit/repositories/app_event_repository_spec.rb @@ -25,7 +25,7 @@ module Repositories end let(:process) { ProcessModelFactory.make(instances: 2, memory: 99, space: space) } - let(:space) { Space.make } + let(:space) { create(:space) } it 'records the expected fields on the event and logs the event' do expected_request_field = { @@ -115,7 +115,7 @@ module Repositories end describe '#record_app_delete' do - let(:space) { Space.make } + let(:space) { create(:space) } let(:process) { ProcessModelFactory.make(space:) } it 'creates a new audit.app.delete-request event' do @@ -147,8 +147,8 @@ module Repositories end describe '#record_app_map_droplet' do - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } it 'creates a new audit.app.droplet.mapped event' do event = app_event_repository.record_app_map_droplet(app, space, user_audit_info, { a: 1 }) @@ -166,8 +166,8 @@ module Repositories end describe '#record_app_apply_manifest' do - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } let(:metadata) { { 'applications' => [{ 'name' => 'blah', 'instances' => 2 }] }.to_yaml } it 'creates a new audit.app.apply_manifest event' do @@ -227,10 +227,10 @@ module Repositories end describe '#record_map_route' do - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } - let(:route) { Route.make } - let(:route_mapping) { RouteMappingModel.make(route: route, app: app, process_type: 'potato') } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } + let(:route) { create(:route) } + let(:route_mapping) { create(:route_mapping_model, route: route, app: app, process_type: 'potato') } it 'creates a new app.map_route audit event' do event = app_event_repository.record_map_route(user_audit_info, route_mapping) @@ -271,10 +271,10 @@ module Repositories end context 'when given route mapping information' do - let(:app) { AppModel.make(space: route.space) } + let(:app) { create(:app_model, space: route.space) } context 'when the route mapping is unweighted' do - let(:route_mapping) { RouteMappingModel.make(route: route, app: app, process_type: 'potato') } + let(:route_mapping) { create(:route_mapping_model, route: route, app: app, process_type: 'potato') } it 'creates a new app.map_route audit event with appropriate metadata' do event = app_event_repository.record_map_route(user_audit_info, route_mapping) @@ -287,7 +287,7 @@ module Repositories end context 'when the route mapping has a weight' do - let(:route_mapping) { RouteMappingModel.make(route: route, app: app, process_type: 'potato', weight: 100) } + let(:route_mapping) { create(:route_mapping_model, route: route, app: app, process_type: 'potato', weight: 100) } it 'creates a new app.map_route audit event with appropriate metadata' do event = app_event_repository.record_map_route(user_audit_info, route_mapping) @@ -300,7 +300,7 @@ module Repositories end context 'when the route mapping has no protocol' do - let(:route_mapping) { RouteMappingModel.make(route: route, app: app, process_type: 'potato') } + let(:route_mapping) { create(:route_mapping_model, route: route, app: app, process_type: 'potato') } it 'creates a new app.map_route audit event with appropriate metadata' do event = app_event_repository.record_map_route(user_audit_info, route_mapping) @@ -313,7 +313,7 @@ module Repositories end context 'when the route mapping has a protocol' do - let(:route_mapping) { RouteMappingModel.make(route: route, app: app, process_type: 'potato', protocol: 'http2') } + let(:route_mapping) { create(:route_mapping_model, route: route, app: app, process_type: 'potato', protocol: 'http2') } it 'creates a new app.map_route audit event with appropriate metadata' do event = app_event_repository.record_map_route(user_audit_info, route_mapping) @@ -328,10 +328,10 @@ module Repositories end describe '#record_unmap_route' do - let(:space) { Space.make } - let(:app) { AppModel.make(space:) } - let(:route) { Route.make } - let(:route_mapping) { RouteMappingModel.make(route: route, guid: 'twice_baked', app: app, process_type: 'potato', weight: 100) } + let(:space) { create(:space) } + let(:app) { create(:app_model, space:) } + let(:route) { create(:route) } + let(:route_mapping) { create(:route_mapping_model, route: route, guid: 'twice_baked', app: app, process_type: 'potato', weight: 100) } it 'creates a new app.unmap_route audit event' do event = app_event_repository.record_unmap_route(user_audit_info, route_mapping) @@ -465,7 +465,7 @@ module Repositories end context 'obfuscation' do - let(:space) { Space.make } + let(:space) { create(:space) } context 'v2' do let(:attrs) { { 'buildpack' => buildpack } } @@ -493,7 +493,7 @@ module Repositories end context 'v3' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:buildpack) { 'schmython' } let(:attrs) do { @@ -532,7 +532,7 @@ module Repositories context 'with a v3 app' do describe '#record_app_create' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } let(:request_attrs) do { 'name' => 'new', @@ -557,7 +557,7 @@ module Repositories end describe '#record_app_start' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'creates a new audit.app.start event' do event = app_event_repository.record_app_start(app, user_audit_info) @@ -578,7 +578,7 @@ module Repositories end describe '#record_app_stop' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'creates a new audit.app.stop event' do event = app_event_repository.record_app_stop(app, user_audit_info) @@ -599,7 +599,7 @@ module Repositories end describe '#record_app_restart' do - let(:app) { AppModel.make } + let(:app) { create(:app_model) } it 'creates a new audit.app.restart event' do event = app_event_repository.record_app_restart(app, user_audit_info) diff --git a/spec/unit/repositories/app_usage_event_repository_spec.rb b/spec/unit/repositories/app_usage_event_repository_spec.rb index 2d05ef77b0f..3cd37e1f1da 100644 --- a/spec/unit/repositories/app_usage_event_repository_spec.rb +++ b/spec/unit/repositories/app_usage_event_repository_spec.rb @@ -8,7 +8,7 @@ module Repositories describe '#find' do context 'when the event exists' do - let(:event) { AppUsageEvent.make } + let(:event) { create(:app_usage_event) } it 'returns the event' do expect(repository.find(event.guid)).to eq(event) @@ -23,7 +23,7 @@ module Repositories end describe '#create_from_process' do - let(:parent_app) { AppModel.make(name: 'parent-app') } + let(:parent_app) { create(:app_model, name: 'parent-app') } let(:process) { ProcessModelFactory.make(app: parent_app, type: 'other') } it 'creates an event which matches the app' do @@ -216,7 +216,7 @@ module Repositories end describe '#create_from_task' do - let!(:task) { TaskModel.make(memory_in_mb: 222) } + let!(:task) { create(:task_model, memory_in_mb: 222) } let(:state) { 'TEST_STATE' } it 'creates an AppUsageEvent' do @@ -264,7 +264,7 @@ module Repositories context 'when the task exists' do let(:old_state) { TaskModel::RUNNING_STATE } let(:old_memory) { 256 } - let(:existing_task) { TaskModel.make(state: old_state, memory_in_mb: old_memory) } + let(:existing_task) { create(:task_model, state: old_state, memory_in_mb: old_memory) } context 'when the same attribute values are set' do before do @@ -309,12 +309,12 @@ module Repositories end describe '#create_from_build' do - let(:org) { Organization.make(guid: 'org-1') } - let(:space) { Space.make(guid: 'space-1', name: 'space-name', organization: org) } - let(:app_model) { AppModel.make(guid: 'app-1', name: 'frank-app', space: space) } + let(:org) { create(:organization, guid: 'org-1') } + let(:space) { create(:space, guid: 'space-1', name: 'space-name', organization: org) } + let(:app_model) { create(:app_model, guid: 'app-1', name: 'frank-app', space: space) } let(:package_state) { PackageModel::READY_STATE } - let(:package) { PackageModel.make(guid: 'package-1', app_guid: app_model.guid, state: package_state) } - let!(:build) { BuildModel.make(guid: 'build-1', package: package, app_guid: app_model.guid, state: BuildModel::STAGING_STATE) } + let(:package) { create(:package_model, guid: 'package-1', app_guid: app_model.guid, state: package_state) } + let!(:build) { create(:build_model, guid: 'build-1', package: package, app_guid: app_model.guid, state: BuildModel::STAGING_STATE) } let(:state) { 'TEST_STATE' } @@ -332,8 +332,8 @@ module Repositories it 'sets the attributes based on the build' do build.update( - droplet: DropletModel.make(buildpack_receipt_buildpack: 'le-buildpack'), - buildpack_lifecycle_data: BuildpackLifecycleDataModel.make + droplet: create(:droplet_model, buildpack_receipt_buildpack: 'le-buildpack'), + buildpack_lifecycle_data: create(:buildpack_lifecycle_data_model) ) event = repository.create_from_build(build, state) @@ -365,7 +365,7 @@ module Repositories context 'when the build does NOT have an associated droplet but does have lifecycle data' do before do build.update( - buildpack_lifecycle_data: BuildpackLifecycleDataModel.make(buildpacks: ['http://git.url.example.com']) + buildpack_lifecycle_data: create(:buildpack_lifecycle_data_model, buildpacks: ['http://git.url.example.com']) ) end @@ -379,7 +379,7 @@ module Repositories context 'when buildpack lifecycle info contains credentials in buildpack url' do before do build.update( - buildpack_lifecycle_data: BuildpackLifecycleDataModel.make(buildpacks: ['http://ping:pong@example.com']) + buildpack_lifecycle_data: create(:buildpack_lifecycle_data_model, buildpacks: ['http://ping:pong@example.com']) ) end @@ -394,24 +394,20 @@ module Repositories context 'when the build has BOTH an associated droplet and lifecycle data' do let!(:build) do - BuildModel.make( - guid: 'build-1', - package_guid: package.guid, - app_guid: app_model.guid - ) + create(:build_model, guid: 'build-1', + package_guid: package.guid, + app_guid: app_model.guid) end let!(:droplet) do - DropletModel.make( - buildpack_receipt_buildpack: 'a-buildpack', - buildpack_receipt_buildpack_guid: 'a-buildpack-guid', - build: build - ) + create(:droplet_model, buildpack_receipt_buildpack: 'a-buildpack', + buildpack_receipt_buildpack_guid: 'a-buildpack-guid', + build: build) end before do - Buildpack.make(name: 'ruby_buildpack') + create(:buildpack, name: 'ruby_buildpack') build.update( - buildpack_lifecycle_data: BuildpackLifecycleDataModel.make(buildpacks: ['ruby_buildpack']) + buildpack_lifecycle_data: create(:buildpack_lifecycle_data_model, buildpacks: ['ruby_buildpack']) ) end @@ -426,12 +422,10 @@ module Repositories context 'docker builds' do let!(:build) do - BuildModel.make( - :docker, - guid: 'build-1', - package_guid: package.guid, - app_guid: app_model.guid - ) + create(:build_model, :docker, + guid: 'build-1', + package_guid: package.guid, + app_guid: app_model.guid) end it 'does not include buildpack_guid or buildpack_name' do @@ -445,12 +439,10 @@ module Repositories context 'when the build is updating its state' do let(:old_build_state) { BuildModel::STAGED_STATE } let(:existing_build) do - BuildModel.make( - guid: 'existing-build', - state: old_build_state, - package: package, - app_guid: app_model.guid - ) + create(:build_model, guid: 'existing-build', + state: old_build_state, + package: package, + app_guid: app_model.guid) end context 'when the same attribute values are set' do @@ -494,7 +486,7 @@ module Repositories end context 'when the build has no package' do - let(:existing_build) { BuildModel.make(guid: 'existing-build', state: old_build_state, app_guid: app_model.guid) } + let(:existing_build) { create(:build_model, guid: 'existing-build', state: old_build_state, app_guid: app_model.guid) } context 'when an attribute changes' do before do @@ -602,7 +594,7 @@ module Repositories context 'when the latest_droplet is FAILED' do before do - DropletModel.make(app: process.app, package: process.latest_package, state: DropletModel::FAILED_STATE) + create(:droplet_model, app: process.app, package: process.latest_package, state: DropletModel::FAILED_STATE) process.reload end @@ -616,7 +608,7 @@ module Repositories context 'when the latest_droplet is not STAGED or FAILED' do before do - DropletModel.make(app: process.app, package: process.latest_package, state: DropletModel::STAGING_STATE) + create(:droplet_model, app: process.app, package: process.latest_package, state: DropletModel::STAGING_STATE) process.reload end @@ -661,7 +653,7 @@ module Repositories context 'when a new package has been added to a previously staged app' do before do - PackageModel.make(app: process.app) + create(:package_model, app: process.app) process.reload end @@ -685,14 +677,14 @@ module Repositories old = Time.now.utc - 999.days 3.times do - event = repository.create_from_process(ProcessModel.make) + event = repository.create_from_process(create(:process_model)) event.created_at = old event.save end end it 'deletes events created before the specified cutoff time' do - process = ProcessModel.make + process = create(:process_model) repository.create_from_process(process) expect do diff --git a/spec/unit/repositories/build_event_repository_spec.rb b/spec/unit/repositories/build_event_repository_spec.rb index b4949db9cc0..b6b32e31cf1 100644 --- a/spec/unit/repositories/build_event_repository_spec.rb +++ b/spec/unit/repositories/build_event_repository_spec.rb @@ -4,19 +4,17 @@ module VCAP::CloudController module Repositories RSpec.describe BuildEventRepository do - let(:app) { AppModel.make(name: 'popsicle') } - let(:user) { User.make } - let(:package) { PackageModel.make(app_guid: app.guid) } + let(:app) { create(:app_model, name: 'popsicle') } + let(:user) { create(:user) } + let(:package) { create(:package_model, app_guid: app.guid) } let(:email) { 'user-email' } let(:user_name) { 'user-name' } let(:build) do - BuildModel.make( - app_guid: app.guid, - package: package, - created_by_user_guid: user.guid, - created_by_user_name: user_name, - created_by_user_email: email - ) + create(:build_model, app_guid: app.guid, + package: package, + created_by_user_guid: user.guid, + created_by_user_name: user_name, + created_by_user_email: email) end let(:user_audit_info) { UserAuditInfo.new(user_email: email, user_name: user_name, user_guid: user.guid) } @@ -42,7 +40,7 @@ module Repositories end describe '#record_build_staged' do - let(:droplet) { DropletModel.make(app_guid: app.guid, package: package, build: build) } + let(:droplet) { create(:droplet_model, app_guid: app.guid, package: package, build: build) } it 'creates a new audit.app.build.staged event' do event = BuildEventRepository.record_build_staged(build, droplet) @@ -68,14 +66,14 @@ module Repositories context 'cnb lifecycle' do let(:build) do - BuildModel.make(:cnb, - app_guid: app.guid, - package: package, - created_by_user_guid: user.guid, - created_by_user_name: user_name, - created_by_user_email: email) + create(:build_model, :cnb, + app_guid: app.guid, + package: package, + created_by_user_guid: user.guid, + created_by_user_name: user_name, + created_by_user_email: email) end - let(:droplet) { DropletModel.make(:cnb, app_guid: app.guid, package: package, build: build) } + let(:droplet) { create(:droplet_model, :cnb, app_guid: app.guid, package: package, build: build) } it 'creates a new audit.app.build.staged event' do event = BuildEventRepository.record_build_staged(build, droplet) @@ -88,14 +86,14 @@ module Repositories context 'docker lifecycle' do let(:build) do - BuildModel.make(:docker, - app_guid: app.guid, - package: package, - created_by_user_guid: user.guid, - created_by_user_name: user_name, - created_by_user_email: email) + create(:build_model, :docker, + app_guid: app.guid, + package: package, + created_by_user_guid: user.guid, + created_by_user_name: user_name, + created_by_user_email: email) end - let(:droplet) { DropletModel.make(:docker, app_guid: app.guid, package: package, build: build) } + let(:droplet) { create(:droplet_model, :docker, app_guid: app.guid, package: package, build: build) } it 'creates a new audit.app.build.staged event' do event = BuildEventRepository.record_build_staged(build, droplet) @@ -107,24 +105,20 @@ module Repositories end context 'when the droplet has buildpack lifecycle data' do - let!(:admin_buildpack) { Buildpack.make(name: 'ruby_buildpack') } - let(:lifecycle_data) { BuildpackLifecycleDataModel.make(droplet:, build:) } + let!(:admin_buildpack) { create(:buildpack, name: 'ruby_buildpack') } + let(:lifecycle_data) { create(:buildpack_lifecycle_data_model, droplet:, build:) } let!(:lifecycle_buildpack1) do - BuildpackLifecycleBuildpackModel.make( - buildpack_lifecycle_data: lifecycle_data, - admin_buildpack_name: 'ruby_buildpack', - buildpack_name: 'ruby', - version: '1.8.0' - ) + create(:buildpack_lifecycle_buildpack_model, buildpack_lifecycle_data: lifecycle_data, + admin_buildpack_name: 'ruby_buildpack', + buildpack_name: 'ruby', + version: '1.8.0') end let!(:lifecycle_buildpack2) do - BuildpackLifecycleBuildpackModel.make( - buildpack_lifecycle_data: lifecycle_data, - admin_buildpack_name: nil, - buildpack_url: 'https://user:password@github.com/custom/buildpack', - buildpack_name: 'custom-bp', - version: '2.0.0' - ) + create(:buildpack_lifecycle_buildpack_model, buildpack_lifecycle_data: lifecycle_data, + admin_buildpack_name: nil, + buildpack_url: 'https://user:password@github.com/custom/buildpack', + buildpack_name: 'custom-bp', + version: '2.0.0') end before do @@ -189,12 +183,12 @@ module Repositories context 'cnb lifecycle' do let(:build) do - BuildModel.make(:cnb, - app_guid: app.guid, - package: package, - created_by_user_guid: user.guid, - created_by_user_name: user_name, - created_by_user_email: email) + create(:build_model, :cnb, + app_guid: app.guid, + package: package, + created_by_user_guid: user.guid, + created_by_user_name: user_name, + created_by_user_email: email) end it 'creates a new audit.app.build.failed event' do @@ -207,12 +201,12 @@ module Repositories context 'docker lifecycle' do let(:build) do - BuildModel.make(:docker, - app_guid: app.guid, - package: package, - created_by_user_guid: user.guid, - created_by_user_name: user_name, - created_by_user_email: email) + create(:build_model, :docker, + app_guid: app.guid, + package: package, + created_by_user_guid: user.guid, + created_by_user_name: user_name, + created_by_user_email: email) end it 'creates a new audit.app.build.failed event' do diff --git a/spec/unit/repositories/buildpack_event_repository_spec.rb b/spec/unit/repositories/buildpack_event_repository_spec.rb index 46f8c5b3313..b04828e4def 100644 --- a/spec/unit/repositories/buildpack_event_repository_spec.rb +++ b/spec/unit/repositories/buildpack_event_repository_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController module Repositories RSpec.describe BuildpackEventRepository do let(:request_attrs) { { 'name' => 'new-buildpack' } } - let(:user) { User.make } - let(:buildpack) { Buildpack.make } + let(:user) { create(:user) } + let(:buildpack) { create(:buildpack) } let(:user_email) { 'email address' } let(:user_name) { 'user name' } let(:user_audit_info) { UserAuditInfo.new(user_email: user_email, user_guid: user.guid, user_name: user_name) } diff --git a/spec/unit/repositories/deployment_event_repository_spec.rb b/spec/unit/repositories/deployment_event_repository_spec.rb index 6f86c43440e..f9587aa9f5f 100644 --- a/spec/unit/repositories/deployment_event_repository_spec.rb +++ b/spec/unit/repositories/deployment_event_repository_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController module Repositories RSpec.describe DeploymentEventRepository do - let(:app) { AppModel.make(name: 'popsicle') } - let(:user) { User.make } - let(:droplet) { DropletModel.make } - let(:deployment) { DeploymentModel.make(app_guid: app.guid, strategy: strategy) } + let(:app) { create(:app_model, name: 'popsicle') } + let(:user) { create(:user) } + let(:droplet) { create(:droplet_model) } + let(:deployment) { create(:deployment_model, app_guid: app.guid, strategy: strategy) } let(:email) { 'user-email' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_email: email, user_name: user_name, user_guid: user.guid) } @@ -19,7 +19,7 @@ module Repositories describe '#record_create_deployment' do context 'when a droplet is associated with the deployment' do - let(:deployment) { DeploymentModel.make(app_guid: app.guid, droplet_guid: droplet.guid, strategy: strategy) } + let(:deployment) { create(:deployment_model, app_guid: app.guid, droplet_guid: droplet.guid, strategy: strategy) } it 'creates a new audit.app.deployment.create event' do event = DeploymentEventRepository.record_create(deployment, droplet, user_audit_info, app.name, @@ -46,7 +46,7 @@ module Repositories end context 'when no droplet is associated with the deployment' do - let(:deployment) { DeploymentModel.make(app_guid: app.guid) } + let(:deployment) { create(:deployment_model, app_guid: app.guid) } it 'creates a new audit.app.deployment.create event' do event = DeploymentEventRepository.record_create(deployment, nil, user_audit_info, app.name, @@ -73,7 +73,7 @@ module Repositories end describe 'record_cancel_deployment' do - let(:deployment) { DeploymentModel.make(app_guid: app.guid) } + let(:deployment) { create(:deployment_model, app_guid: app.guid) } it 'creates a new audit.app.deployment.cancel event' do event = DeploymentEventRepository.record_cancel(deployment, droplet, user_audit_info, app.name, @@ -99,7 +99,7 @@ module Repositories end describe 'record_continue_deployment' do - let(:deployment) { DeploymentModel.make(app_guid: app.guid) } + let(:deployment) { create(:deployment_model, app_guid: app.guid) } it 'creates a new audit.app.deployment.continue event' do event = DeploymentEventRepository.record_continue(deployment, droplet, user_audit_info, app.name, diff --git a/spec/unit/repositories/droplet_event_repository_spec.rb b/spec/unit/repositories/droplet_event_repository_spec.rb index 58e1649261c..f0ef93a169e 100644 --- a/spec/unit/repositories/droplet_event_repository_spec.rb +++ b/spec/unit/repositories/droplet_event_repository_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController module Repositories RSpec.describe DropletEventRepository do - let(:app) { AppModel.make(name: 'popsicle') } - let(:user) { User.make } - let(:package) { PackageModel.make(app_guid: app.guid) } - let(:droplet) { DropletModel.make(app_guid: app.guid, package: package) } + let(:app) { create(:app_model, name: 'popsicle') } + let(:user) { create(:user) } + let(:package) { create(:package_model, app_guid: app.guid) } + let(:droplet) { create(:droplet_model, app_guid: app.guid, package: package) } let(:email) { 'user-email' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_email: email, user_name: user_name, user_guid: user.guid) } diff --git a/spec/unit/repositories/organization_event_repository_spec.rb b/spec/unit/repositories/organization_event_repository_spec.rb index 28a9d838e63..8a935a5028d 100644 --- a/spec/unit/repositories/organization_event_repository_spec.rb +++ b/spec/unit/repositories/organization_event_repository_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController module Repositories RSpec.describe OrganizationEventRepository do let(:request_attrs) { { 'name' => 'new-space' } } - let(:user) { User.make } - let(:organization) { Organization.make } + let(:user) { create(:user) } + let(:organization) { create(:organization) } let(:user_email) { 'email address' } let(:user_name) { 'user name' } let(:user_audit_info) { UserAuditInfo.new(user_email: user_email, user_guid: user.guid, user_name: user_name) } diff --git a/spec/unit/repositories/package_event_repository_spec.rb b/spec/unit/repositories/package_event_repository_spec.rb index 9f6f3fdde40..18bdda466dc 100644 --- a/spec/unit/repositories/package_event_repository_spec.rb +++ b/spec/unit/repositories/package_event_repository_spec.rb @@ -4,9 +4,9 @@ module VCAP::CloudController module Repositories RSpec.describe PackageEventRepository do - let(:app) { AppModel.make(name: 'potato') } + let(:app) { create(:app_model, name: 'potato') } let(:user_guid) { 'user_guid' } - let(:package) { PackageModel.make(app_guid: app.guid) } + let(:package) { create(:package_model, app_guid: app.guid) } let(:email) { 'user-email' } let(:user_name) { 'user-name' } let(:user_audit_info) { UserAuditInfo.new(user_email: email, user_name: user_name, user_guid: user_guid) } diff --git a/spec/unit/repositories/process_event_repository_spec.rb b/spec/unit/repositories/process_event_repository_spec.rb index a7d56f2ecee..3c32b46171f 100644 --- a/spec/unit/repositories/process_event_repository_spec.rb +++ b/spec/unit/repositories/process_event_repository_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController module Repositories RSpec.describe ProcessEventRepository do - let(:app) { AppModel.make(name: 'zach-loves-kittens') } - let(:process) { ProcessModel.make(app: app, type: 'potato') } + let(:app) { create(:app_model, name: 'zach-loves-kittens') } + let(:process) { create(:process_model, app: app, type: 'potato') } let(:user_guid) { 'user_guid' } let(:email) { 'user-email' } let(:user_name) { 'user-name' } diff --git a/spec/unit/repositories/route_event_repository_spec.rb b/spec/unit/repositories/route_event_repository_spec.rb index f048233d230..5cc16663003 100644 --- a/spec/unit/repositories/route_event_repository_spec.rb +++ b/spec/unit/repositories/route_event_repository_spec.rb @@ -3,8 +3,8 @@ module VCAP::CloudController module Repositories RSpec.describe RouteEventRepository do - let(:user) { User.make } - let(:route) { Route.make } + let(:user) { create(:user) } + let(:route) { create(:route) } let(:request_attrs) { { 'host' => 'dora', 'domain_guid' => route.domain.guid, 'space_guid' => route.space.guid } } let(:user_email) { 'some@email.com' } let(:user_name) { 'some-user' } @@ -119,10 +119,10 @@ module Repositories end describe '#record_route_map' do - let(:app) { AppModel.make(space: route.space) } + let(:app) { create(:app_model, space: route.space) } context 'when route mapping has no weight' do - let(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: 'web', app_port: 8080) } + let(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: 'web', app_port: 8080) } it 'records event correctly' do event = route_event_repository.record_route_map(route_mapping, actor_audit_info) @@ -149,7 +149,7 @@ module Repositories end context 'when route mapping has weight' do - let(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: 'web', app_port: 8080, weight: 100) } + let(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: 'web', app_port: 8080, weight: 100) } it 'records event correctly' do event = route_event_repository.record_route_map(route_mapping, actor_audit_info) @@ -177,10 +177,10 @@ module Repositories end describe '#record_route_unmap' do - let(:app) { AppModel.make(space: route.space) } + let(:app) { create(:app_model, space: route.space) } context 'when route mapping has no weight' do - let(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: 'web', app_port: 8080) } + let(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: 'web', app_port: 8080) } it 'records event correctly' do event = route_event_repository.record_route_unmap(route_mapping, actor_audit_info) @@ -207,7 +207,7 @@ module Repositories end context 'when route mapping has weight' do - let(:route_mapping) { RouteMappingModel.make(app: app, route: route, process_type: 'web', app_port: 8080, weight: 100) } + let(:route_mapping) { create(:route_mapping_model, app: app, route: route, process_type: 'web', app_port: 8080, weight: 100) } it 'records event correctly' do event = route_event_repository.record_route_unmap(route_mapping, actor_audit_info) diff --git a/spec/unit/repositories/service_binding_event_repository_spec.rb b/spec/unit/repositories/service_binding_event_repository_spec.rb index 44894ef6633..48efd3d7643 100644 --- a/spec/unit/repositories/service_binding_event_repository_spec.rb +++ b/spec/unit/repositories/service_binding_event_repository_spec.rb @@ -8,7 +8,7 @@ module Repositories let(:user_email) { 'some-email' } let(:user_name) { 'some-username' } let(:user_audit_info) { UserAuditInfo.new(user_guid:, user_name:, user_email:) } - let(:service_binding) { ServiceBinding.make(name: 'some-binding-name') } + let(:service_binding) { create(:service_binding, name: 'some-binding-name') } describe '.record_start_create' do it 'creates an audit.service_binding.start_create event' do @@ -55,7 +55,7 @@ module Repositories end context 'when binding name is not set' do - let(:service_binding) { ServiceBinding.make(name: nil) } + let(:service_binding) { create(:service_binding, name: nil) } it 'records actee_name as empty' do event = ServiceBindingEventRepository.record_start_create(service_binding, user_audit_info, {}) @@ -109,7 +109,7 @@ module Repositories end context 'when binding name is not set' do - let(:service_binding) { ServiceBinding.make(name: nil) } + let(:service_binding) { create(:service_binding, name: nil) } it 'records actee_name as empty' do event = ServiceBindingEventRepository.record_create(service_binding, user_audit_info, {}) @@ -141,7 +141,7 @@ module Repositories end context 'when binding name is not set' do - let(:service_binding) { ServiceBinding.make(name: nil) } + let(:service_binding) { create(:service_binding, name: nil) } it 'records actee_name as empty' do event = ServiceBindingEventRepository.record_start_delete(service_binding, user_audit_info) @@ -173,7 +173,7 @@ module Repositories end context 'when binding name is not set' do - let(:service_binding) { ServiceBinding.make(name: nil) } + let(:service_binding) { create(:service_binding, name: nil) } it 'records actee_name as empty' do event = ServiceBindingEventRepository.record_delete(service_binding, user_audit_info) diff --git a/spec/unit/repositories/service_event_repository_spec.rb b/spec/unit/repositories/service_event_repository_spec.rb index 0287303ae90..3d3a9193e9d 100644 --- a/spec/unit/repositories/service_event_repository_spec.rb +++ b/spec/unit/repositories/service_event_repository_spec.rb @@ -3,7 +3,7 @@ module VCAP::CloudController module Repositories RSpec.describe ServiceEventRepository do - let(:user) { VCAP::CloudController::User.make } + let(:user) { create(:user) } let(:email) { 'email@example.com' } let(:user_name) { 'arthur' } let(:logger) { double(:logger, error: nil) } @@ -14,7 +14,7 @@ module Repositories end describe 'record_service_plan_visibility_event' do - let(:service_plan_visibility) { VCAP::CloudController::ServicePlanVisibility.make } + let(:service_plan_visibility) { create(:service_plan_visibility) } it 'creates the event' do params = { @@ -39,7 +39,7 @@ module Repositories end describe 'record_service_plan_update_visibility_event' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make } + let(:service_plan) { create(:service_plan) } it 'creates the event' do params = { @@ -65,8 +65,8 @@ module Repositories end describe 'record_service_plan_delete_visibility_event' do - let(:service_plan) { VCAP::CloudController::ServicePlan.make } - let(:org) { VCAP::CloudController::Organization.make } + let(:service_plan) { create(:service_plan) } + let(:org) { create(:organization) } it 'creates the event' do repository.record_service_plan_delete_visibility_event(service_plan, org) @@ -86,7 +86,7 @@ module Repositories end describe '#record_broker_event' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:params) do { name: service_broker.name, @@ -140,7 +140,7 @@ module Repositories end describe '#record_broker_event_with_request' do - let(:service_broker) { VCAP::CloudController::ServiceBroker.make } + let(:service_broker) { create(:service_broker) } let(:request) do { fake: 'request' @@ -167,7 +167,7 @@ module Repositories end describe '#with_service_event' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } context 'when the service is new' do let(:service) do @@ -229,7 +229,7 @@ module Repositories end context 'when the service already exists' do - let!(:service) { Service.make(service_broker: broker, description: 'description') } + let!(:service) { create(:service, service_broker: broker, description: 'description') } before do service.plan_updateable = true @@ -270,8 +270,8 @@ module Repositories end describe '#with_service_plan_event' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: broker) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } context 'when the service is new' do let(:plan) do @@ -325,7 +325,7 @@ module Repositories end context 'when the service plan already exists' do - let!(:plan) { ServicePlan.make(service: service, description: 'description') } + let!(:plan) { create(:service_plan, service: service, description: 'description') } before do plan.extra = { 'extra' => 'data' }.to_json @@ -364,8 +364,8 @@ module Repositories end describe '#record_service_event' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: broker) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } it 'creates an event with empty metadata because it is only used for delete events' do repository.record_service_event(:delete, service) @@ -387,9 +387,9 @@ module Repositories end describe '#record_service_plan_event' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } - let(:service) { VCAP::CloudController::Service.make(service_broker: broker) } - let(:plan) { VCAP::CloudController::ServicePlan.make(service:) } + let(:broker) { create(:service_broker) } + let(:service) { create(:service, service_broker: broker) } + let(:plan) { create(:service_plan, service:) } it 'creates an event with empty metadata because it is only used for delete events' do repository.record_service_plan_event(:delete, plan) @@ -411,7 +411,7 @@ module Repositories end describe '#record_service_plan_delete_event' do - let(:plan) { VCAP::CloudController::ServicePlan.make } + let(:plan) { create(:service_plan) } it 'creates an event with empty metadata' do repository.record_service_plan_delete_event(plan) @@ -433,7 +433,7 @@ module Repositories end describe '#record_service_dashboard_client_event' do - let(:broker) { VCAP::CloudController::ServiceBroker.make } + let(:broker) { create(:service_broker) } let(:client_attrs) do { 'id' => 'client-id', @@ -484,7 +484,7 @@ module Repositories end describe '#record_service_instance_event' do - let(:instance) { VCAP::CloudController::ServiceInstance.make } + let(:instance) { create(:service_instance) } let(:params) do { 'service_plan_guid' => 'plan-guid', @@ -560,7 +560,7 @@ module Repositories end describe '#record_user_provided_service_instance_event' do - let(:instance) { VCAP::CloudController::UserProvidedServiceInstance.make } + let(:instance) { create(:user_provided_service_instance) } let(:params) do { 'name' => 'my-upsi', @@ -619,7 +619,7 @@ module Repositories end describe '#record_service_key_event' do - let(:service_key) { VCAP::CloudController::ServiceKey.make } + let(:service_key) { create(:service_key) } def check_event_data(event_type, metadata) event = Event.first(type: event_type) @@ -654,7 +654,7 @@ def check_event_data(event_type, metadata) end describe '#record_service_purge_event' do - let(:service) { VCAP::CloudController::Service.make } + let(:service) { create(:service) } it 'records an event' do repository.record_service_purge_event(service) @@ -679,7 +679,7 @@ def check_event_data(event_type, metadata) end describe '#record_service_delete_event' do - let(:service) { VCAP::CloudController::Service.make } + let(:service) { create(:service) } it 'records an event' do repository.record_service_delete_event(service) @@ -705,59 +705,59 @@ def check_event_data(event_type, metadata) end specify 'record_service_plan_visibility_event logs an error but does not propagate errors' do - service_plan_visibility = VCAP::CloudController::ServicePlanVisibility.make + service_plan_visibility = create(:service_plan_visibility) repository.record_service_plan_visibility_event(:create, service_plan_visibility, {}) expect(logger).to have_received(:error) end specify 'record_broker_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make + broker = create(:service_broker) repository.record_broker_event(:create, broker, {}) expect(logger).to have_received(:error) end specify 'record_service_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make - service = VCAP::CloudController::Service.make(service_broker: broker) + broker = create(:service_broker) + service = create(:service, service_broker: broker) repository.record_service_event(:create, service) expect(logger).to have_received(:error) end specify 'record_service_plan_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make - service = VCAP::CloudController::Service.make(service_broker: broker) - service_plan = VCAP::CloudController::ServicePlan.make(service:) + broker = create(:service_broker) + service = create(:service, service_broker: broker) + service_plan = create(:service_plan, service:) repository.record_service_plan_event(:create, service_plan) expect(logger).to have_received(:error) end specify 'record_service_dashboard_client_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make + broker = create(:service_broker) repository.record_service_dashboard_client_event(:create, {}, broker) expect(logger).to have_received(:error) end specify 'record_service_instance_event logs an error but does not propagate errors' do - service_instance = VCAP::CloudController::ServiceInstance.make + service_instance = create(:service_instance) repository.record_service_instance_event(:create, service_instance, {}) expect(logger).to have_received(:error) end specify 'record_user_provided_service_instance_event logs an error but does not propagate errors' do - service_instance = VCAP::CloudController::UserProvidedServiceInstance.make + service_instance = create(:user_provided_service_instance) repository.record_user_provided_service_instance_event(:create, service_instance, {}) expect(logger).to have_received(:error) end specify 'record_service_purge_event logs an error but does not propagate errors' do - service = VCAP::CloudController::Service.make + service = create(:service) repository.record_service_purge_event(service) expect(logger).to have_received(:error) end specify 'with_service_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make - service = VCAP::CloudController::Service.make(service_broker: broker) + broker = create(:service_broker) + service = create(:service, service_broker: broker) plan = VCAP::CloudController::ServicePlan.new( service: service, @@ -773,7 +773,7 @@ def check_event_data(event_type, metadata) end specify 'with_service_plan_event logs an error but does not propagate errors' do - broker = VCAP::CloudController::ServiceBroker.make + broker = create(:service_broker) service = VCAP::CloudController::Service.new( service_broker: broker, label: 'name', diff --git a/spec/unit/repositories/service_instance_share_event_repository_spec.rb b/spec/unit/repositories/service_instance_share_event_repository_spec.rb index 2decb0a3e5a..921eb96e722 100644 --- a/spec/unit/repositories/service_instance_share_event_repository_spec.rb +++ b/spec/unit/repositories/service_instance_share_event_repository_spec.rb @@ -4,7 +4,7 @@ module VCAP module CloudController module Repositories RSpec.describe ServiceInstanceShareEventRepository do - let(:service_instance) { ServiceInstance.make } + let(:service_instance) { create(:service_instance) } let(:user_guid) { 'user-guid' } let(:user_email) { 'user-email' } let(:user_name) { 'user-name' } diff --git a/spec/unit/repositories/service_usage_event_repository_spec.rb b/spec/unit/repositories/service_usage_event_repository_spec.rb index 6dd8398e038..0ec9b52f8cb 100644 --- a/spec/unit/repositories/service_usage_event_repository_spec.rb +++ b/spec/unit/repositories/service_usage_event_repository_spec.rb @@ -12,7 +12,7 @@ module Repositories describe '#find' do context 'when the event exists' do - let(:event) { ServiceUsageEvent.make } + let(:event) { create(:service_usage_event) } it 'returns the event' do expect(repository.find(event.guid)).to eq(event) @@ -30,7 +30,7 @@ module Repositories let(:custom_state) { 'CUSTOM' } context 'with managed service instance' do - let(:service_instance) { ManagedServiceInstance.make } + let(:service_instance) { create(:managed_service_instance) } it 'creates an event which matches the service instance and custom state' do event = repository.create_from_service_instance(service_instance, custom_state) @@ -63,7 +63,7 @@ module Repositories end context 'with user provided service instance' do - let(:service_instance) { UserProvidedServiceInstance.make } + let(:service_instance) { create(:user_provided_service_instance) } it 'creates an event if service instance does not have a service plan' do event = repository.create_from_service_instance(service_instance, custom_state) @@ -76,13 +76,9 @@ module Repositories describe '#purge_and_reseed_service_instances!!', isolation: :truncation do before do - 3.times do - ManagedServiceInstance.make - end + create_list(:managed_service_instance, 3) - 3.times do - UserProvidedServiceInstance.make - end + create_list(:user_provided_service_instance, 3) ManagedServiceInstance.each do |service_instance| service_broker = service_instance.service.service_broker @@ -155,7 +151,7 @@ module Repositories end describe '#delete_events_older_than' do - let!(:service_instance) { ManagedServiceInstance.make } + let!(:service_instance) { create(:managed_service_instance) } let(:cutoff_age_in_days) { 1 } before do diff --git a/spec/unit/repositories/space_event_repository_spec.rb b/spec/unit/repositories/space_event_repository_spec.rb index aa54cd70256..780528a1b70 100644 --- a/spec/unit/repositories/space_event_repository_spec.rb +++ b/spec/unit/repositories/space_event_repository_spec.rb @@ -4,8 +4,8 @@ module VCAP::CloudController module Repositories RSpec.describe SpaceEventRepository do let(:request_attrs) { { 'name' => 'new-space' } } - let(:user) { User.make } - let(:space) { Space.make } + let(:user) { create(:user) } + let(:space) { create(:space) } let(:user_email) { 'email address' } let(:user_name) { 'user name' } let(:user_audit_info) { UserAuditInfo.new(user_email: user_email, user_guid: user.guid, user_name: user_name) } diff --git a/spec/unit/repositories/stack_event_repository_spec.rb b/spec/unit/repositories/stack_event_repository_spec.rb index c4d5032743b..20caecaa92e 100644 --- a/spec/unit/repositories/stack_event_repository_spec.rb +++ b/spec/unit/repositories/stack_event_repository_spec.rb @@ -5,8 +5,8 @@ module VCAP::CloudController module Repositories RSpec.describe StackEventRepository do let(:request_attrs) { { 'name' => 'new-stack' } } - let(:user) { User.make } - let(:stack) { Stack.make } + let(:user) { create(:user) } + let(:stack) { create(:stack) } let(:user_email) { 'email address' } let(:user_name) { 'user name' } let(:user_audit_info) { UserAuditInfo.new(user_email: user_email, user_guid: user.guid, user_name: user_name) } diff --git a/spec/unit/repositories/task_event_repository_spec.rb b/spec/unit/repositories/task_event_repository_spec.rb index eaedcdebaf5..1e96ba35a86 100644 --- a/spec/unit/repositories/task_event_repository_spec.rb +++ b/spec/unit/repositories/task_event_repository_spec.rb @@ -4,7 +4,7 @@ module VCAP module CloudController module Repositories RSpec.describe TaskEventRepository do - let(:task) { TaskModel.make } + let(:task) { create(:task_model) } let(:user_guid) { 'user-guid' } let(:user_email) { 'user-email' } let(:user_name) { 'user-name' } diff --git a/spec/unit/repositories/user_event_repository_spec.rb b/spec/unit/repositories/user_event_repository_spec.rb index 4c3656f2dbc..80a8be9b07f 100644 --- a/spec/unit/repositories/user_event_repository_spec.rb +++ b/spec/unit/repositories/user_event_repository_spec.rb @@ -4,10 +4,10 @@ module VCAP::CloudController module Repositories RSpec.describe UserEventRepository do let(:request_attrs) { { 'name' => 'new-space' } } - let(:org) { Organization.make } - let(:space) { Space.make(organization: org) } - let(:assigner) { User.make } - let(:assignee) { User.make(username: 'frank') } + let(:org) { create(:organization) } + let(:space) { create(:space, organization: org) } + let(:assigner) { create(:user) } + let(:assignee) { create(:user, username: 'frank') } let(:assigner_email) { 'foo@bar.com' } let(:assigner_username) { 'Mr.Foo' } let(:request_attrs) { { 'some_key' => 'some_val' } }