// Package osbuild provides primitives for representing and (un)marshalling
// OSBuild types.
package osbuild

import (
	"testing"

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

func TestPipeline_SetBuild(t *testing.T) {
	expectedPipeline := &Pipeline{
		Build: &Build{
			Pipeline: &Pipeline{},
			Runner:   "org.osbuild.fedora32",
		},
	}
	actualPipeline := &Pipeline{}
	actualPipeline.SetBuild(&Pipeline{}, "org.osbuild.fedora32")
	assert.Equal(t, expectedPipeline, actualPipeline)
}

func TestPipeline_AddStage(t *testing.T) {
	expectedPipeline := &Pipeline{
		Build: &Build{
			Pipeline: &Pipeline{},
			Runner:   "org.osbuild.fedora32",
		},
		Stages: []*Stage{
			{
				Name: "org.osbuild.rpm",
			},
		},
	}
	actualPipeline := &Pipeline{
		Build: &Build{
			Pipeline: &Pipeline{},
			Runner:   "org.osbuild.fedora32",
		},
	}
	actualPipeline.AddStage(&Stage{
		Name: "org.osbuild.rpm",
	})
	assert.Equal(t, expectedPipeline, actualPipeline)
	assert.Equal(t, 1, len(actualPipeline.Stages))
}

func TestPipeline_SetAssembler(t *testing.T) {
	expectedPipeline := &Pipeline{
		Assembler: &Assembler{
			Name: "org.osbuild.testassembler",
		},
	}
	actualPipeline := &Pipeline{}
	actualPipeline.SetAssembler(&Assembler{
		Name: "org.osbuild.testassembler",
	})
	assert.Equal(t, expectedPipeline, actualPipeline)
}
