2022-06-25 20:06:01 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-06-25 20:06:01 +03:00
package sitemap
import (
"bytes"
"encoding/xml"
"strings"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
2022-12-30 18:31:00 +03:00
func TestNewSitemap ( t * testing . T ) {
ts := time . Unix ( 1651322008 , 0 ) . UTC ( )
tests := [ ] struct {
name string
urls [ ] URL
want string
wantErr string
} {
{
name : "empty" ,
urls : [ ] URL { } ,
want : xml . Header + ` <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"" +
"</urlset>\n" ,
} ,
{
name : "regular" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" , LastMod : & ts } ,
} ,
want : xml . Header + ` <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<url><loc>https://gitea.io/test1</loc><lastmod>2022-04-30T12:33:28Z</lastmod></url>" +
"</urlset>\n" ,
} ,
{
name : "without lastmod" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" } ,
} ,
want : xml . Header + ` <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<url><loc>https://gitea.io/test1</loc></url>" +
"</urlset>\n" ,
} ,
{
name : "multiple" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" , LastMod : & ts } ,
{ URL : "https://gitea.io/test2" , LastMod : nil } ,
} ,
want : xml . Header + ` <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<url><loc>https://gitea.io/test1</loc><lastmod>2022-04-30T12:33:28Z</lastmod></url>" +
"<url><loc>https://gitea.io/test2</loc></url>" +
"</urlset>\n" ,
} ,
{
name : "too many urls" ,
urls : make ( [ ] URL , 50001 ) ,
wantErr : "The sitemap contains 50001 URLs, but only 50000 are allowed" ,
} ,
{
name : "too big file" ,
urls : [ ] URL {
{ URL : strings . Repeat ( "b" , 50 * 1024 * 1024 + 1 ) } ,
} ,
wantErr : "The sitemap has 52428932 bytes, but only 52428800 are allowed" ,
} ,
2022-06-25 20:06:01 +03:00
}
2022-12-30 18:31:00 +03:00
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
s := NewSitemap ( )
for _ , url := range tt . urls {
s . Add ( url )
}
buf := & bytes . Buffer { }
_ , err := s . WriteTo ( buf )
if tt . wantErr != "" {
assert . EqualError ( t , err , tt . wantErr )
} else {
assert . NoError ( t , err )
assert . Equalf ( t , tt . want , buf . String ( ) , "NewSitemap()" )
}
} )
2022-06-25 20:06:01 +03:00
}
2022-12-30 18:31:00 +03:00
}
2022-06-25 20:06:01 +03:00
2022-12-30 18:31:00 +03:00
func TestNewSitemapIndex ( t * testing . T ) {
2022-06-25 20:06:01 +03:00
ts := time . Unix ( 1651322008 , 0 ) . UTC ( )
2022-12-30 18:31:00 +03:00
tests := [ ] struct {
name string
urls [ ] URL
want string
wantErr string
} {
{
name : "empty" ,
urls : [ ] URL { } ,
want : xml . Header + ` <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"" +
"</sitemapindex>\n" ,
2022-06-25 20:06:01 +03:00
} ,
2022-12-30 18:31:00 +03:00
{
name : "regular" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" , LastMod : & ts } ,
} ,
want : xml . Header + ` <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<sitemap><loc>https://gitea.io/test1</loc><lastmod>2022-04-30T12:33:28Z</lastmod></sitemap>" +
"</sitemapindex>\n" ,
2022-06-25 20:06:01 +03:00
} ,
2022-12-30 18:31:00 +03:00
{
name : "without lastmod" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" } ,
} ,
want : xml . Header + ` <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<sitemap><loc>https://gitea.io/test1</loc></sitemap>" +
"</sitemapindex>\n" ,
} ,
{
name : "multiple" ,
urls : [ ] URL {
{ URL : "https://gitea.io/test1" , LastMod : & ts } ,
{ URL : "https://gitea.io/test2" , LastMod : nil } ,
} ,
want : xml . Header + ` <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> ` +
"<sitemap><loc>https://gitea.io/test1</loc><lastmod>2022-04-30T12:33:28Z</lastmod></sitemap>" +
"<sitemap><loc>https://gitea.io/test2</loc></sitemap>" +
"</sitemapindex>\n" ,
} ,
{
name : "too many sitemaps" ,
urls : make ( [ ] URL , 50001 ) ,
wantErr : "The sitemap contains 50001 sub-sitemaps, but only 50000 are allowed" ,
} ,
{
name : "too big file" ,
urls : [ ] URL {
{ URL : strings . Repeat ( "b" , 50 * 1024 * 1024 + 1 ) } ,
} ,
wantErr : "The sitemap has 52428952 bytes, but only 52428800 are allowed" ,
2022-06-25 20:06:01 +03:00
} ,
}
2022-12-30 18:31:00 +03:00
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
s := NewSitemapIndex ( )
for _ , url := range tt . urls {
s . Add ( url )
}
buf := & bytes . Buffer { }
_ , err := s . WriteTo ( buf )
if tt . wantErr != "" {
assert . EqualError ( t , err , tt . wantErr )
} else {
assert . NoError ( t , err )
assert . Equalf ( t , tt . want , buf . String ( ) , "NewSitemapIndex()" )
}
} )
}
2022-06-25 20:06:01 +03:00
}