Defect #15709


TimeEntry custom_values are not deleted from the database when destroying the associated project

Added by Mischa The Evil almost 10 years ago. Updated almost 10 years ago.

Custom fields
Target version:
Start date:
Due date:
% Done:


Estimated time:
Affected version:


This defect emerged while I was writing some tests (with new fixtures) for my patch for issue #4138. When I ran these new tests they passed without issues, but when I ran the whole test suite to make sure I didn't break any existing functionality I encountered a failing unit test. The failing test is ProjectTest#test_destroying_root_projects_should_clear_data.

The assertion that triggers the test failure is

assert_equal 0, CustomValue.where(:customized_type => ['Project', 'Issue', 'TimeEntry', 'Version']).count

This assertion tests if all custom_values of the designated cutomized_type are deleted from the database when the associated project has been destroyed. This functionality works for custom_values of the type Project, Issue and Version (where the first two are explicitly tested because they have fixtures, in contrast to the Version type that is not-yet tested because it is missing fixtures), but it does not work for custom_values of the type TimeEntry.

The defect (and the error-free behavior of the Version type custom_values) can be made visible by adding some custom_value fixtures like shown below, followed by running ProjectTest#test_destroying_root_projects_should_clear_data:

Index: test/fixtures/custom_fields.yml
--- test/fixtures/custom_fields.yml    (revision 12406)
+++ test/fixtures/custom_fields.yml    (working copy)
@@ -145,3 +145,35 @@
   - Other value
   field_format: list
+  name: Searchable time entry field
+  regexp: "" 
+  is_for_all: false
+  is_filter: false
+  type: TimeEntryCustomField
+  possible_values: "" 
+  id: 12
+  is_required: false
+  field_format: string
+  searchable: true
+  default_value: "" 
+  editable: true
+  position: 2
+  name: vState
+  regexp: "" 
+  is_for_all: false
+  is_filter: false
+  type: VersionCustomField
+  possible_values: 
+  - Stable
+  - Beta
+  - Alpha
+  - Planning
+  id: 13
+  is_required: false
+  field_format: list
+  searchable: false
+  default_value: "" 
+  editable: true
+  position: 1
Index: test/fixtures/custom_values.yml
--- test/fixtures/custom_values.yml    (revision 12406)
+++ test/fixtures/custom_values.yml    (working copy)
@@ -101,3 +101,15 @@
   customized_id: 1
   id: 17
   value: '2009-12-01'
+  customized_type: TimeEntry
+  custom_field_id: 12
+  customized_id: 2
+  id: 18
+  value: "stringfortimeentry custom field search" 
+  customized_type: Version
+  custom_field_id: 13
+  customized_id: 2
+  id: 19
+  value: Stable

The assertion fails because the TimeEntry custom_value is not deleted from the db when the associated project is destroyed (as opposed to the yet-untested Version custom_value which is indeed properly deleted [as like for the already-tested Issue and Project custom_values]).

This issue seems pretty much related to #7385 and #7904.

Environment information:
  • Redmine Trunk at r12406
  • Ruby 2.0.0-p353 (2013-11-22) [i686-linux
  • Rails 3.2.16

Please let me know if more information is needed...

Actions #1

Updated by Jean-Philippe Lang almost 10 years ago

  • Target version set to 2.5.0
Actions #2

Updated by Jean-Philippe Lang almost 10 years ago

  • Status changed from New to Closed
  • Assignee set to Jean-Philippe Lang
  • Resolution set to Fixed

Fixed in r12421, a migration takes care of removing orphan custom values that may be present.
Thanks for reporting this.


Also available in: Atom PDF