var test = require('tap').test;
var tar = require('../index');
var fixtures = require('./fixtures');
var concat = require('concat-stream');
var fs = require('fs');

test('one-file', function(t) {
	t.plan(2);

	var pack = tar.pack();

	pack.entry({
		name:'test.txt',
		mtime:new Date(1387580181000),
		mode:0644,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	}, 'hello world\n');

	pack.finalize();

	pack.pipe(concat(function(data) {
		t.same(data.length & 511, 0);
		t.deepEqual(data, fs.readFileSync(fixtures.ONE_FILE_TAR));
	}));
});

test('multi-file', function(t) {
	t.plan(2);

	var pack = tar.pack();

	pack.entry({
		name:'file-1.txt',
		mtime:new Date(1387580181000),
		mode:0644,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	}, 'i am file-1\n');

	pack.entry({
		name:'file-2.txt',
		mtime:new Date(1387580181000),
		mode:0644,
		size:12,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	}).end('i am file-2\n');

	pack.finalize();

	pack.pipe(concat(function(data) {
		t.same(data.length & 511, 0);
		t.deepEqual(data, fs.readFileSync(fixtures.MULTI_FILE_TAR));
	}));
});

test('types', function(t) {
	t.plan(2);
	var pack = tar.pack();

	pack.entry({
		name:'directory',
		mtime:new Date(1387580181000),
		type:'directory',
		mode:0755,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	});

	pack.entry({
		name:'directory-link',
		mtime:new Date(1387580181000),
		type:'symlink',
		linkname: 'directory',
		mode:0755,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	});

	pack.finalize();

	pack.pipe(concat(function(data) {
		t.equal(data.length & 511, 0);
		t.deepEqual(data, fs.readFileSync(fixtures.TYPES_TAR));
	}));

});

test('long-name', function(t) {
	t.plan(2);
	var pack = tar.pack();

	pack.entry({
		name:'my/file/is/longer/than/100/characters/and/should/use/the/prefix/header/foobarbaz/foobarbaz/foobarbaz/foobarbaz/foobarbaz/foobarbaz/filename.txt',
		mtime:new Date(1387580181000),
		type:'file',
		mode:0644,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	}, 'hello long name\n');

	pack.finalize();

	pack.pipe(concat(function(data) {
		t.equal(data.length & 511, 0);
		t.deepEqual(data, fs.readFileSync(fixtures.LONG_NAME_TAR));
	}));
});

test('unicode', function(t) {
	t.plan(2);
	var pack = tar.pack();

	pack.entry({
		name:'høstål.txt',
		mtime:new Date(1387580181000),
		type:'file',
		mode:0644,
		uname:'maf',
		gname:'staff',
		uid:501,
		gid:20
	}, 'høllø\n');

	pack.finalize();

	pack.pipe(concat(function(data) {
		t.equal(data.length & 511, 0);
		t.deepEqual(data, fs.readFileSync(fixtures.UNICODE_TAR));
	}));
});