package web

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestNewServer_routes(t *testing.T) {
	s := NewServer()
	routes := s.router.Routes()
	checkedRoutes := make(map[string]bool)

	tests := []struct {
		path    string
		method  string
		handler string
	}{
		{path: "/ping", method: "GET", handler: "github.com/ajswis/go-pkparse-server/web.ping"},
		{path: "/parse", method: "POST", handler: "github.com/ajswis/go-pkparse-server/web.(*Server).parse-fm"},
	}
	for _, tt := range tests {
		var ran bool
		for _, route := range routes {
			if route.Path == tt.path {
				t.Run(tt.path, func(t *testing.T) {
					assert.Equal(t, tt.path, route.Path)
					assert.Equal(t, tt.method, route.Method)
					assert.Equal(t, tt.handler, route.Handler)
				})

				ran = true
				checkedRoutes[route.Path] = true
				break
			}
		}
		if !ran {
			assert.Failf(t, "Unknown route", "Don't know about %s", tt.path)
		}
	}

	for _, route := range routes {
		if !checkedRoutes[route.Path] {
			assert.Failf(t, "Unchecked route", "Didn't check %s", route.Path)
		}
	}
}
