package integrationtests

import (
	"bytes"
	"testing"

	"github.com/mattermost/focalboard/server/model"
	"github.com/mattermost/focalboard/server/utils"
	"github.com/stretchr/testify/require"
)

func TestExportBoard(t *testing.T) {
	t.Run("export single board", func(t *testing.T) {
		th := SetupTestHelper(t).InitBasic()
		defer th.TearDown()

		board := &model.Board{
			ID:        utils.NewID(utils.IDTypeBoard),
			TeamID:    "test-team",
			Title:     "Export Test Board",
			CreatedBy: th.GetUser1().ID,
			Type:      model.BoardTypeOpen,
			CreateAt:  utils.GetMillis(),
			UpdateAt:  utils.GetMillis(),
		}

		block := model.Block{
			ID:        utils.NewID(utils.IDTypeCard),
			ParentID:  board.ID,
			Type:      model.TypeCard,
			BoardID:   board.ID,
			Title:     "Test card # for export",
			CreatedBy: th.GetUser1().ID,
			CreateAt:  utils.GetMillis(),
			UpdateAt:  utils.GetMillis(),
		}

		babs := &model.BoardsAndBlocks{
			Boards: []*model.Board{board},
			Blocks: []model.Block{block},
		}

		babs, resp := th.Client.CreateBoardsAndBlocks(babs)
		th.CheckOK(resp)

		// export the board to an in-memory archive file
		buf, resp := th.Client.ExportBoardArchive(babs.Boards[0].ID)
		th.CheckOK(resp)
		require.NotNil(t, buf)

		// import the archive file to team 0
		resp = th.Client.ImportArchive(model.GlobalTeamID, bytes.NewReader(buf))
		th.CheckOK(resp)
		require.NoError(t, resp.Error)

		// check for test card
		boardsImported, err := th.Server.App().GetBoardsForUserAndTeam(th.GetUser1().ID, model.GlobalTeamID)
		require.NoError(t, err)
		require.Len(t, boardsImported, 1)
		boardImported := boardsImported[0]
		blocksImported, err := th.Server.App().GetBlocksForBoard(boardImported.ID)
		require.NoError(t, err)
		require.Len(t, blocksImported, 1)
		require.Equal(t, block.Title, blocksImported[0].Title)
	})
}
