tags: track tag histories.
Track the history of the tag `category` and `is_deprecated` fields in the `tag_versions` table. Adds generic Versionable and VersionFor concerns that encapsulate most of the history tracking logic. These concerns are designed to make it easy to add history to any model. There are a couple notable differences between tag versions and other versions: * There is no 1 hour edit merge window. All changes to the `category` and `is_deprecated` fields produce a new version in the tag history. * New versions aren't created when a tag is created. Versions are only created when a tag is edited for the first time. The tag's initial version isn't created until *after* the tag is edited for the first time. For example, if you change the category of a tag that was last updated 10 years ago, that will create an initial version of the tag backdated to 10 years ago, plus a new version for your edit. This is for a few reasons: * So that we don't have to create new tag versions every time a new tag is created. This would be wasteful because most tags never have their category or deprecation status change. * So that if you make a typo tag, your name isn't recorded in the tag's history forever. * So that we can create new tags in various places without having to know who created the tag (which may be unknown if the current user isn't set). * Because we don't know the full history of most tags, so we have to deal with incomplete histories anyway. This has a few important consequences: * Most tags won't have any tag versions. They only gain tag versions if they're edited. * You can't track /tag_versions to see newly created tags. It only shows changes to already existing tags. * Tag version IDs won't be in strict chronological order. Higher IDs may have created_at timestamps before lower IDs. For example, if you change the category of a tag that is 10 years old, that will create an initial version with a high ID, but with a created_at timestamp dated to 10 years ago. Fixes #4402: Track tag category changes
This commit is contained in:
@@ -128,14 +128,12 @@ module PostSets
|
||||
end
|
||||
|
||||
context "that has a matching artist" do
|
||||
setup do
|
||||
Tag.find_by(name: "a").update!(category: Tag.categories.artist)
|
||||
@artist = FactoryBot.create(:artist, :name => "a")
|
||||
end
|
||||
|
||||
should "find the artist" do
|
||||
assert_not_nil(@set.artist)
|
||||
assert_equal(@artist.id, @set.artist.id)
|
||||
set = PostSets::Post.new("bkub")
|
||||
artist = create(:artist, name: "bkub")
|
||||
|
||||
assert_not_nil(set.artist)
|
||||
assert_equal(artist, set.artist)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user