Validate bookmark URL uniqueness

This commit is contained in:
2024-03-01 20:52:30 +11:00
parent 0f9b9c6248
commit 32411b76ef
3 changed files with 33 additions and 0 deletions

View File

@@ -53,6 +53,12 @@ module Micropub
.one
end
def url_exists?(url)
!!posts
.where(url: url)
.one
end
def find!(id)
posts
.by_pk(id)

View File

@@ -2,6 +2,9 @@ module Micropub
module Validation
module Posts
class BookmarkContract < Dry::Validation::Contract
include Deps["repos.post_repo"]
params do
required(:name).filled(:string)
required(:content).maybe(:string)
@@ -14,6 +17,10 @@ module Micropub
required(:photos).array(:hash)
required(:cache).filled(:bool)
end
rule(:url) do
key.failure("URL already bookmarked") if post_repo.url_exists?(values[:url])
end
end
end
end

View File

@@ -176,6 +176,26 @@ RSpec.describe "Post creation", :db, :requests do
expect(post_repo.bookmark_listing.count).to eq 1
expect(post_repo.bookmark_listing.last.cached_content).to_not eq nil
end
it "validates an already bookmarked URL" do
params = {
h: "entry",
"bookmark-of": "http://example.com",
name: "Name",
content: "Content of the post",
cache: "true"
}
post "/micropub", params
expect(last_response).to be_successful
expect(post_repo.bookmark_listing.count).to eq 1
expect(post_repo.bookmark_listing.last.cached_content).to_not eq nil
post "/micropub", params
expect(last_response).to_not be_successful
expect(post_repo.bookmark_listing.count).to eq 1
end
end
context "checkins" do