@@ -126,6 +126,22 @@ describe('ReactHeadSafe', () => {
126126 ) ;
127127 } ) ;
128128
129+ it ( 'should create og:url meta tag' , ( ) => {
130+ render ( < ReactHeadSafe ogUrl = "https://example.com/page" /> ) ;
131+
132+ const metaTag = document . querySelector ( 'meta[property="og:url"]' ) ;
133+ expect ( metaTag ) . toBeInTheDocument ( ) ;
134+ expect ( metaTag ?. getAttribute ( 'content' ) ) . toBe ( 'https://example.com/page' ) ;
135+ } ) ;
136+
137+ it ( 'should create og:type meta tag' , ( ) => {
138+ render ( < ReactHeadSafe ogType = "website" /> ) ;
139+
140+ const metaTag = document . querySelector ( 'meta[property="og:type"]' ) ;
141+ expect ( metaTag ) . toBeInTheDocument ( ) ;
142+ expect ( metaTag ?. getAttribute ( 'content' ) ) . toBe ( 'website' ) ;
143+ } ) ;
144+
129145 it ( 'should prevent duplicate og:title meta tags' , ( ) => {
130146 const { rerender } = render ( < ReactHeadSafe ogTitle = "First OG Title" /> ) ;
131147 rerender ( < ReactHeadSafe ogTitle = "Second OG Title" /> ) ;
@@ -160,6 +176,24 @@ describe('ReactHeadSafe', () => {
160176 'https://example.com/second.jpg'
161177 ) ;
162178 } ) ;
179+
180+ it ( 'should prevent duplicate og:url meta tags' , ( ) => {
181+ const { rerender } = render ( < ReactHeadSafe ogUrl = "https://site.com/1" /> ) ;
182+ rerender ( < ReactHeadSafe ogUrl = "https://site.com/2" /> ) ;
183+
184+ const metaTags = document . querySelectorAll ( 'meta[property="og:url"]' ) ;
185+ expect ( metaTags ) . toHaveLength ( 1 ) ;
186+ expect ( metaTags [ 0 ] . getAttribute ( 'content' ) ) . toBe ( 'https://site.com/2' ) ;
187+ } ) ;
188+
189+ it ( 'should prevent duplicate og:type meta tags' , ( ) => {
190+ const { rerender } = render ( < ReactHeadSafe ogType = "website" /> ) ;
191+ rerender ( < ReactHeadSafe ogType = "website" /> ) ;
192+
193+ const metaTags = document . querySelectorAll ( 'meta[property="og:type"]' ) ;
194+ expect ( metaTags ) . toHaveLength ( 1 ) ;
195+ expect ( metaTags [ 0 ] . getAttribute ( 'content' ) ) . toBe ( 'website' ) ;
196+ } ) ;
163197 } ) ;
164198
165199 describe ( 'multiple props' , ( ) => {
@@ -172,6 +206,8 @@ describe('ReactHeadSafe', () => {
172206 ogTitle = "OG Title"
173207 ogDescription = "OG Description"
174208 ogImage = "https://example.com/image.jpg"
209+ ogUrl = "https://example.com/page"
210+ ogType = "website"
175211 />
176212 ) ;
177213
@@ -181,54 +217,45 @@ describe('ReactHeadSafe', () => {
181217 . querySelector ( 'meta[name="description"]' )
182218 ?. getAttribute ( 'content' )
183219 ) . toBe ( 'Test Description' ) ;
184- expect (
185- document . querySelector ( 'meta[name="keywords"]' ) ?. getAttribute ( 'content' )
186- ) . toBe ( 'test, keywords' ) ;
187220 expect (
188221 document
189222 . querySelector ( 'meta[property="og:title"]' )
190223 ?. getAttribute ( 'content' )
191224 ) . toBe ( 'OG Title' ) ;
192225 expect (
193226 document
194- . querySelector ( 'meta[property="og:description "]' )
227+ . querySelector ( 'meta[property="og:url "]' )
195228 ?. getAttribute ( 'content' )
196- ) . toBe ( 'OG Description ' ) ;
229+ ) . toBe ( 'https://example.com/page ' ) ;
197230 expect (
198231 document
199- . querySelector ( 'meta[property="og:image "]' )
232+ . querySelector ( 'meta[property="og:type "]' )
200233 ?. getAttribute ( 'content' )
201- ) . toBe ( 'https://example.com/image.jpg ' ) ;
234+ ) . toBe ( 'website ' ) ;
202235 } ) ;
203236
204237 it ( 'should update only changed props' , ( ) => {
205238 const { rerender } = render (
206- < ReactHeadSafe
207- title = "Initial Title"
208- description = "Initial Description"
209- />
239+ < ReactHeadSafe title = "Initial Title" ogUrl = "https://example.com/1" />
210240 ) ;
211241
212242 expect ( document . title ) . toBe ( 'Initial Title' ) ;
213243 expect (
214244 document
215- . querySelector ( 'meta[name="description "]' )
245+ . querySelector ( 'meta[property="og:url "]' )
216246 ?. getAttribute ( 'content' )
217- ) . toBe ( 'Initial Description ' ) ;
247+ ) . toBe ( 'https://example.com/1 ' ) ;
218248
219249 rerender (
220- < ReactHeadSafe
221- title = "Updated Title"
222- description = "Initial Description"
223- />
250+ < ReactHeadSafe title = "Updated Title" ogUrl = "https://example.com/1" />
224251 ) ;
225252
226253 expect ( document . title ) . toBe ( 'Updated Title' ) ;
227254 expect (
228255 document
229- . querySelector ( 'meta[name="description "]' )
256+ . querySelector ( 'meta[property="og:url "]' )
230257 ?. getAttribute ( 'content' )
231- ) . toBe ( 'Initial Description ' ) ;
258+ ) . toBe ( 'https://example.com/1 ' ) ;
232259 } ) ;
233260 } ) ;
234261
0 commit comments